diff --git a/ar/api-doc/get-id.mdx b/ar/api-doc/get-id.mdx
index f172fbd9..bb4e848c 100644
--- a/ar/api-doc/get-id.mdx
+++ b/ar/api-doc/get-id.mdx
@@ -14,11 +14,11 @@ title: "الحصول على المعرّفات"
## BaseId
-انقر على قاعدة البيانات المستهدفة، ثم انسخ من عنوان URL السلسلة التي تبدأ بـ 'bse'، مثال: `bseXXXXXXXXXX`
+انقر على المشروع المستهدف، ثم انسخ من عنوان URL السلسلة التي تبدأ بـ 'bse'، مثال: `bseXXXXXXXXXX`
diff --git a/ar/api-doc/oauth.mdx b/ar/api-doc/oauth.mdx
index d7006cff..3d2f5b10 100644
--- a/ar/api-doc/oauth.mdx
+++ b/ar/api-doc/oauth.mdx
@@ -33,7 +33,7 @@ description: "أنشئ عمليات تكامل تتيح للمستخدمين ا
| المورد | النطاقات |
|----------|--------|
| **التطبيق** | `app\|create`, `app\|read`, `app\|update`, `app\|delete` |
-| **قاعدة البيانات** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
+| **المشروع** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
| **الجدول** | `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` |
@@ -296,14 +296,14 @@ curl https://app.teable.ai/api/table/TABLE_ID/record \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-تكون الخطوة الأولى بعد الحصول على رمز عادةً هي جلب جميع قواعد البيانات التي يمكن للمستخدم الحالي الوصول إليها:
+تكون الخطوة الأولى بعد الحصول على رمز عادةً هي جلب جميع المشاريع التي يمكن للمستخدم الحالي الوصول إليها:
```bash
curl https://app.teable.ai/api/base/access/all \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-تُرجع نقطة النهاية هذه جميع قواعد البيانات التي يملك المستخدم الحالي إذنًا للوصول إليها. ويمكنك استخدام `baseId` من الاستجابة في استدعاءات API اللاحقة.
+تُرجع نقطة النهاية هذه جميع المشاريع التي يملك المستخدم الحالي إذنًا للوصول إليها. ويمكنك استخدام `baseId` من الاستجابة في استدعاءات API اللاحقة.
## تحديث رموز الوصول
diff --git a/ar/api-doc/record/interface.mdx b/ar/api-doc/record/interface.mdx
index dcceea8c..bc876959 100644
--- a/ar/api-doc/record/interface.mdx
+++ b/ar/api-doc/record/interface.mdx
@@ -2,7 +2,7 @@
title: "واجهة حقول السجلات"
---
-حقل البحث ليس نوعًا محددًا من الحقول. يمكننا البحث عن أي نوع من الحقول في قاعدة بيانات مرتبطة. يتحدد نوع حقل البحث وفقًا للحقل الأصلي في قاعدة البيانات المرتبطة، وتكون لديه الخاصية isLookup. لا يمكن تحرير حقول البحث.
+حقل البحث ليس نوعًا محددًا من الحقول. يمكننا البحث عن أي نوع من الحقول في مشروع مرتبط. يتحدد نوع حقل البحث وفقًا للحقل الأصلي في المشروع المرتبط، وتكون لديه الخاصية isLookup. لا يمكن تحرير حقول البحث.
قد تحمل جميع قيم الإرجاع للحقول القيمة `isMultipleCellValue: true` في حالات معينة:
diff --git a/ar/api-doc/sql-query.mdx b/ar/api-doc/sql-query.mdx
index f53d65d8..ef0c6851 100644
--- a/ar/api-doc/sql-query.mdx
+++ b/ar/api-doc/sql-query.mdx
@@ -11,12 +11,12 @@ noindex: true
### إنشاء اتصال بقاعدة البيانات
-1. **فتح جدول**: افتح أولًا أي جدول ضمن قاعدة البيانات التي تريد الاتصال بها.
-2. **الانتقال إلى صفحة التصميم**: انقر على أيقونة ⚙️ في الزاوية العلوية اليمنى للانتقال إلى صفحة تصميم قاعدة البيانات.
+1. **فتح جدول**: افتح أولًا أي جدول ضمن المشروع الذي تريد الاتصال به.
+2. **الانتقال إلى صفحة التصميم**: انقر على أيقونة ⚙️ في الزاوية العلوية اليمنى للانتقال إلى صفحة تصميم المشروع.
@@ -50,7 +50,7 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
**ملاحظة:** في PostgreSQL، استخدم علامتي الاقتباس المزدوجتين `"` حول أسماء المخططات والجداول للحفاظ على حساسية حالة الأحرف.
لكتابة هذا الاستعلام، ستحتاج إلى معرفة ثلاثة أمور:
-- **اسم المخطط (BaseId)**: معرّف قاعدة البيانات الذي يبدأ بـ `bse`
+- **اسم المخطط (BaseId)**: معرّف المشروع الذي يبدأ بـ `bse`
- **اسم الجدول**: الاسم الفعلي للجدول في PostgreSQL
- **أسماء الحقول**: أسماء الأعمدة الفعلية في قاعدة البيانات
@@ -58,27 +58,27 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
### العثور على BaseId (اسم المخطط)
-تقابل كل قاعدة بيانات في Teable **مخططًا** في PostgreSQL. وBaseId هو اسم المخطط المستخدم في استعلامات SQL.
+يقابل كل مشروع في Teable **مخططًا** في PostgreSQL. وBaseId هو اسم المخطط المستخدم في استعلامات SQL.
**الطريقة الأولى:** انظر إلى عنوان URL؛ السلسلة التي تبدأ بـ `bse` هي BaseId.
-**الطريقة الثانية:** في واجهة تصميم قاعدة البيانات، اسم المخطط المعروض هو BaseId.
+**الطريقة الثانية:** في واجهة تصميم المشروع، اسم المخطط المعروض هو BaseId.
### العثور على أسماء الجداول
-لا تتزامن أسماء الجداول في واجهة Teable تلقائيًا مع أسماء الجداول الفعلية في قاعدة البيانات. راجع واجهة تصميم قاعدة البيانات لمعرفة الاسم الفعلي للجدول في قاعدة البيانات.
+لا تتزامن أسماء الجداول في واجهة Teable تلقائيًا مع أسماء الجداول الفعلية في قاعدة البيانات. راجع واجهة تصميم المشروع لمعرفة الاسم الفعلي للجدول في قاعدة البيانات.
diff --git a/ar/api-doc/token.mdx b/ar/api-doc/token.mdx
index 48727923..46a24909 100644
--- a/ar/api-doc/token.mdx
+++ b/ar/api-doc/token.mdx
@@ -15,7 +15,7 @@ description: "تُستخدم رموز الوصول الشخصية للمصادق
3. أضف نطاقات الأذونات المناسبة إلى رمز الوصول.
-4. حدّد القواعد والمساحات التي يمكن الوصول إليها باستخدام الرمز.
+4. حدّد المشاريع والمساحات التي يمكن الوصول إليها باستخدام الرمز.
بعد إنشاء رمز الوصول، لن يُعرض إلا مرة واحدة. نوصي بنسخه وحفظه في مكان آمن.
diff --git a/ar/basic/admin-panel/announcements.mdx b/ar/basic/admin-panel/announcements.mdx
index 4a6a250c..f027139b 100644
--- a/ar/basic/admin-panel/announcements.mdx
+++ b/ar/basic/admin-panel/announcements.mdx
@@ -15,7 +15,7 @@ description: "انشر إعلانات داخل التطبيق للجميع أو
| الإعداد | ما يتحكم فيه |
| --- | --- |
-| **الشكل** | مكان ظهور الإعلان: **شريط** يمتد أعلى التطبيق، أو **إشعار منبثق** مؤقت، أو **نافذة مشروطة** تقاطع العمل، أو **بطاقة في الشريط الجانبي** للمساحات وقواعد البيانات. |
+| **الشكل** | مكان ظهور الإعلان: **شريط** يمتد أعلى التطبيق، أو **إشعار منبثق** مؤقت، أو **نافذة مشروطة** تقاطع العمل، أو **بطاقة في الشريط الجانبي** للمساحات والمشاريع. |
| **المستوى** | النبرة التي يراها المستخدمون: **معلومات** أو **صيانة** أو **حرج** أو **تم الحل**. |
| العنوان و**النص** | نص الإعلان. |
| **يبدأ في** / **ينتهي في** | النافذة الزمنية التي يُعرض الإعلان خلالها. يجب أن يكون وقت الانتهاء بعد وقت البدء. |
diff --git a/ar/basic/admin-panel/audit-log.mdx b/ar/basic/admin-panel/audit-log.mdx
index 6ac45cce..e047034d 100644
--- a/ar/basic/admin-panel/audit-log.mdx
+++ b/ar/basic/admin-panel/audit-log.mdx
@@ -11,9 +11,9 @@ description: "راجع النشاط على مستوى النسخة، وصفِّ
## ما يمكنك مراجعته
-يغطي سجل التدقيق أنشطة الإدارة والتعاون الشائعة، بما في ذلك المساحات وقواعد البيانات والجداول وطرق العرض والحقول والسجلات والمشاركة والدعوات ورموز الوصول ومصفوفة الصلاحيات.
+يغطي سجل التدقيق أنشطة الإدارة والتعاون الشائعة، بما في ذلك المساحات والمشاريع والجداول وطرق العرض والحقول والسجلات والمشاركة والدعوات ورموز الوصول ومصفوفة الصلاحيات.
-يعرض كل إدخال في السجل وقت العملية ومنفّذها ونوع الإجراء وقاعدة البيانات أو المساحة المرتبطة ومصدر الطلب. افتح إدخالًا لعرض تفاصيله.
+يعرض كل إدخال في السجل وقت العملية ومنفّذها ونوع الإجراء والمشروع أو المساحة المرتبطة ومصدر الطلب. افتح إدخالًا لعرض تفاصيله.
## اتخاذ إجراء بشأن منفّذ العملية
@@ -30,10 +30,10 @@ description: "راجع النشاط على مستوى النسخة، وصفِّ
- **تحديد منفّذ العملية**: عرض الإجراءات التي نفّذها مستخدم محدد.
- **تحديد مساحة**: عرض النشاط ضمن مساحة محددة.
-- **تحديد قاعدة بيانات**: عرض نشاط قاعدة بيانات محددة.
-- **تحديد إجراء**: التصفية حسب نوع العملية، مثل السجلات والحقول وطرق العرض والجداول وقواعد البيانات والمشاركة ومصفوفة الصلاحيات وأدوار مصفوفة الصلاحيات والمساحات والدعوات والمستخدمين ورموز الوصول.
+- **تحديد مشروع**: عرض نشاط مشروع محدد.
+- **تحديد إجراء**: التصفية حسب نوع العملية، مثل السجلات والحقول وطرق العرض والجداول والمشاريع والمشاركة ومصفوفة الصلاحيات وأدوار مصفوفة الصلاحيات والمساحات والدعوات والمستخدمين ورموز الوصول.
-إذا حُذف مستخدم أو قاعدة بيانات أو مساحة، يظل الإدخال في السجل ويُعلّم المورد بأنه محذوف.
+إذا حُذف مستخدم أو مشروع أو مساحة، يظل الإدخال في السجل ويُعلّم المورد بأنه محذوف.
## تصفح قوائم السجل الكبيرة
diff --git a/ar/basic/admin-panel/computed-outbox.mdx b/ar/basic/admin-panel/computed-outbox.mdx
index 35053f8a..123274e0 100644
--- a/ar/basic/admin-panel/computed-outbox.mdx
+++ b/ar/basic/admin-panel/computed-outbox.mdx
@@ -30,7 +30,7 @@ description: "راقب تسليم BullMQ وتراكم المهام المحسو
لتضييق القائمة:
- انقر على مربعات الحالات أعلى الجدول للتصفية حسب الحالة: **بانتظار التنفيذ** و**نشطة** و**مؤجلة** و**فاشلة** و**مكتملة (محتفظ بها)** وما إلى ذلك. يمكنك تحديد عدة حالات معًا، ويشرح تمرير المؤشر فوق مربع معنى تلك الحالة.
-- صفِّ حسب **المساحة** أو **قاعدة البيانات** أو **السبب** أو **النتيجة**، أو ابحث عن مهمة أو قاعدة بيانات أو مساحة أو خطأ، أو عيّن حدًا أدنى لوقت المعالجة لإظهار المهام البطيئة.
+- صفِّ حسب **المساحة** أو **المشروع** أو **السبب** أو **النتيجة**، أو ابحث عن مهمة أو مشروع أو مساحة أو خطأ، أو عيّن حدًا أدنى لوقت المعالجة لإظهار المهام البطيئة.
- انقر على صف لفتح **مسار الحوسبة**: الطوابع الزمنية لقائمة الانتظار، وتأخر التسليم، ووقت المعالجة، وسبب الفشل الكامل مع SQL المنقح لعملية تسليم فاشلة، وتفاصيل الانتشار الموضحة أدناه.
لا تعني حالة **مكتملة** أن المهمة نفذت عملًا. توضح شارة النتيجة ما فعلته عملية التسليم فعليًا: **تمت المعالجة** تعني تشغيل المهمة، و**بلا إجراء** تعني عدم العثور على شيء متبقٍ، و**مؤجلة** تعني إعادة جدولتها لوقت لاحق، و**مركونة** تعني أن نطاقها متوقف مؤقتًا. يضيّق عامل تصفية **النتيجة** القائمة حسب تلك النتيجة ويعرض عدد عمليات التسليم التي تغطيها كل نتيجة؛ لذا فإن الجمع بين **مكتملة (محتفظ بها)** و**تمت المعالجة** لا يترك إلا عمليات التسليم التي شغّلت المهمة بالفعل.
@@ -58,7 +58,7 @@ description: "راقب تسليم BullMQ وتراكم المهام المحسو
يعرض عدد **الفاشلة** وقسم **معالجة الحالات الشاذة** أنواعًا مختلفة من المشكلات، ولذلك قد تختلف أرقامهما.
-تجمع **معالجة الحالات الشاذة** الحالات في مجموعات مشكلات، واحدة لكل قاعدة بيانات وجدول مصدر وخطأ، حتى يسهل اكتشاف السبب الجذري الواحد. راجع سبب الفشل وأصلح المشكلة الأساسية قبل استرداد أي شيء. وسّع مجموعة لقراءة تفاصيل الخطأ والمهام التي تشملها؛ هذه الصفوف للفحص، ويُنفذ الاسترداد دائمًا على المجموعة بأكملها.
+تجمع **معالجة الحالات الشاذة** الحالات في مجموعات مشكلات، واحدة لكل مشروع وجدول مصدر وخطأ، حتى يسهل اكتشاف السبب الجذري الواحد. راجع سبب الفشل وأصلح المشكلة الأساسية قبل استرداد أي شيء. وسّع مجموعة لقراءة تفاصيل الخطأ والمهام التي تشملها؛ هذه الصفوف للفحص، ويُنفذ الاسترداد دائمًا على المجموعة بأكملها.
تعتمد الإجراءات التي توفرها المجموعة على نوعها:
@@ -70,7 +70,7 @@ description: "راقب تسليم BullMQ وتراكم المهام المحسو
بعد استرداد مجموعة، يبلغ Teable بعدد المهام التي استعادها، وعدد المهام التي أُدرجت حديثًا أو كانت مدرجة بالفعل، وعدد ما سُلّم منها أو أُجّل. ثم تستهلك العوامل المجموعة وفق حدود التزامن وتقسيم المهام الحالية.
-تنتمي المجموعة التي تحمل علامة **قاعدة البيانات محذوفة** إلى قاعدة بيانات لم تعد موجودة. سيفشل استردادها فورًا مرة أخرى، لذلك يكون **تجاهل المجموعة** هو الإجراء الوحيد المتاح.
+تنتمي المجموعة التي تحمل علامة **المشروع محذوف** إلى مشروع لم يعد موجودًا. سيفشل استردادها فورًا مرة أخرى، لذلك يكون **تجاهل المجموعة** هو الإجراء الوحيد المتاح.
لم يعد نقل جدول إلى سلة المهملات ينشئ حالات شاذة هنا. تتخطى المهمة المحسوبة التي لا تزال تشير إلى جدول في سلة المهملات الخطوات التي تقرأه، وتكمل الخطوات التي تستهدف جداول نشطة، ثم تنتهي.
@@ -101,8 +101,8 @@ description: "راقب تسليم BullMQ وتراكم المهام المحسو
| عنصر التحكم | ما يقيّده |
| --- | --- |
| **التزامن لكل عملية** | عدد المهام المحسوبة التي تعالجها كل عملية عامل في الوقت نفسه. |
-| **حدود المطالبة لكل قاعدة بيانات** | عدد المهام المحسوبة التي تعمل في الوقت نفسه لقاعدة بيانات واحدة (**لكل قاعدة بيانات**) ولجدول مصدر واحد داخلها (**لكل جدول أولي**). القيمة الافتراضية لكل منهما 2، ويقبلان قيمًا من 1 إلى 16. |
+| **حدود المطالبة لكل مشروع** | عدد المهام المحسوبة التي تعمل في الوقت نفسه لمشروع واحد (**لكل مشروع**) ولجدول مصدر واحد داخله (**لكل جدول أولي**). القيمة الافتراضية لكل منهما 2، ويقبلان قيمًا من 1 إلى 16. |
-ارفع حدود المطالبة عندما تكون قاعدة بيانات مزدحمة واحدة هي عنق الزجاجة، وارفع التزامن لكل عملية عندما تكون عدة قواعد بيانات في قائمة الانتظار في الوقت نفسه.
+ارفع حدود المطالبة عندما يكون مشروع مزدحم واحد هو عنق الزجاجة، وارفع التزامن لكل عملية عندما تكون عدة مشاريع في قائمة الانتظار في الوقت نفسه.
يفرض التزامن الأعلى حملًا أكبر على قاعدة بياناتك. تحتفظ المساحات التي تخزن بياناتها في [مستأجر قاعدة بيانات](/ar/basic/admin-panel/database-tenant) بالإعدادات الافتراضية للبيئة الخاصة بحدود المطالبة، لأن مجمعات اتصالاتها مضبوطة لتلك القيم.
diff --git a/ar/basic/admin-panel/database-tenant.mdx b/ar/basic/admin-panel/database-tenant.mdx
index fb6468e3..1b5acbd8 100644
--- a/ar/basic/admin-panel/database-tenant.mdx
+++ b/ar/basic/admin-panel/database-tenant.mdx
@@ -26,6 +26,6 @@ description: "استضف بيانات مساحة Teable في قاعدة بيان
لا. يشير إلى مساحة Teable التي تُخزن بياناتها في قاعدة البيانات تلك.
- لا. إنه يغيّر مكان تخزين Teable لبيانات مساحته وإدارتها. تقدم قاعدة بيانات PostgreSQL مستضافة في مكان آخر، وينشئ Teable بياناته الخاصة فيها ويديرها. لا ترتبط الجداول والسجلات الموجودة في قاعدة البيانات تلك بـ Teable، ولا تُستورد تلقائيًا كقواعد بيانات.
+ لا. إنه يغيّر مكان تخزين Teable لبيانات مساحته وإدارتها. تقدم قاعدة بيانات PostgreSQL مستضافة في مكان آخر، وينشئ Teable بياناته الخاصة فيها ويديرها. لا ترتبط الجداول والسجلات الموجودة في قاعدة البيانات تلك بـ Teable، ولا تُستورد تلقائيًا كمشاريع.
diff --git a/ar/basic/admin-panel/multitenancy.mdx b/ar/basic/admin-panel/multitenancy.mdx
index c12e8c49..915f2a0d 100644
--- a/ar/basic/admin-panel/multitenancy.mdx
+++ b/ar/basic/admin-panel/multitenancy.mdx
@@ -16,10 +16,10 @@ noindex: true
نسخة Teable
├── مستأجر المؤسسة A
│ ├── مسؤولو المؤسسة والأعضاء والأقسام
-│ └── المساحات وقواعد البيانات والإعدادات على مستوى المؤسسة
+│ └── المساحات والمشاريع والإعدادات على مستوى المؤسسة
├── مستأجر المؤسسة B
│ ├── مسؤولو المؤسسة والأعضاء والأقسام
-│ └── المساحات وقواعد البيانات والإعدادات على مستوى المؤسسة
+│ └── المساحات والمشاريع والإعدادات على مستوى المؤسسة
└── مستأجر المؤسسة C
```
@@ -107,7 +107,7 @@ noindex: true
| --- | --- |
| **المستخدمون** | عرض المستخدمين وإدارتهم في المؤسسة الحالية |
| **المؤسسة** | إنشاء الأقسام ونقلها وإعادة تسميتها وحذفها وإدارة أعضائها |
-| **إدارة المساحات** | إضافة مساحات إلى المؤسسة أو إزالتها منها وعرض أعداد المساحات وقواعد البيانات |
+| **إدارة المساحات** | إضافة مساحات إلى المؤسسة أو إزالتها منها وعرض أعداد المساحات والمشاريع |
| **إعدادات المصادقة** | تهيئة موفّري مصادقة الجهات الخارجية للمؤسسة |
| **إعدادات الأمان** | التحقق من نطاقات البريد الإلكتروني حتى ينضم المستخدمون الجدد أصحاب تلك النطاقات إلى المؤسسة تلقائيًا |
| **إعدادات النسخة** | تغيير اسم المؤسسة والوصول التلقائي إلى المساحات ونطاق الأقسام |
diff --git a/ar/basic/admin-panel/skills.mdx b/ar/basic/admin-panel/skills.mdx
index d7a1037a..1d141db9 100644
--- a/ar/basic/admin-panel/skills.mdx
+++ b/ar/basic/admin-panel/skills.mdx
@@ -9,7 +9,7 @@ description: "انشر مهارات يمكن لكل وكيل ذكاء اصطنا
استخدم **المهارات** لنشر مهارات للنسخة بأكملها. تتاح المهارة المضافة هنا في كل محادثة للذكاء الاصطناعي ومنشئ التطبيقات والروبوتات، لذا استخدمها لأساليب العمل التي ينبغي لمؤسستك مشاركتها افتراضيًا، مثل أسلوب الكتابة المؤسسي أو نهج إعداد التقارير أو إجراء مشترك للتكامل.
-تظل المهارات التي يضيفها المستخدمون في مواضع أخرى ضمن نطاقها. راجع [محادثة الذكاء الاصطناعي](/ar/basic/ai/ai-chat) للتعرف إلى المهارات الشخصية ومهارات قواعد البيانات والمساحات.
+تظل المهارات التي يضيفها المستخدمون في مواضع أخرى ضمن نطاقها. راجع [محادثة الذكاء الاصطناعي](/ar/basic/ai/ai-chat) للتعرف إلى المهارات الشخصية ومهارات المشاريع والمساحات.
## إضافة مهارة
@@ -34,4 +34,4 @@ description: "انشر مهارات يمكن لكل وكيل ذكاء اصطنا
## عند تكرار الاسم
-المهارة المنشورة هنا هي الإعداد الافتراضي للنسخة. إذا استخدمت مهارة على مستوى قاعدة بيانات أو مساحة أو مستخدم أو تطبيق أو روبوت الاسم نفسه، تُطبق المهارة الأضيق نطاقًا في تلك المحادثة، وتُتجاهل مهارة النسخة فيها.
+المهارة المنشورة هنا هي الإعداد الافتراضي للنسخة. إذا استخدمت مهارة على مستوى مشروع أو مساحة أو مستخدم أو تطبيق أو روبوت الاسم نفسه، تُطبق المهارة الأضيق نطاقًا في تلك المحادثة، وتُتجاهل مهارة النسخة فيها.
diff --git a/ar/basic/admin-panel/spaces.mdx b/ar/basic/admin-panel/spaces.mdx
index 60731a08..6b26dfc7 100644
--- a/ar/basic/admin-panel/spaces.mdx
+++ b/ar/basic/admin-panel/spaces.mdx
@@ -8,7 +8,7 @@ description: "أدر جميع المساحات في نسختك عبر لوحة
### معلومات المساحة
* **اسم المساحة**: الاسم المعروض للمساحة
-* **قواعد البيانات**: إجمالي عدد قواعد البيانات في المساحة
+* **المشاريع**: إجمالي عدد المشاريع في المساحة
* **المتعاونون**: إجمالي عدد المستخدمين الذين يمكنهم الوصول إلى المساحة
* **وقت الإنشاء**: وقت إنشاء المساحة
* **الانضمام التلقائي**: ما إذا كانت المساحة تسمح للمستخدمين الجدد بالانضمام تلقائيًا
@@ -26,7 +26,7 @@ description: "أدر جميع المساحات في نسختك عبر لوحة
عند حذف مساحة من لوحة الإدارة:
* تُعلّم المساحة كمحذوفة فورًا
-* يتعذر الوصول إلى جميع قواعد البيانات والبيانات داخلها
+* يتعذر الوصول إلى جميع المشاريع والبيانات داخلها
* يفقد المتعاونون إمكانية الوصول إلى المساحة
* لا يمكن التراجع عن هذه العملية
diff --git a/ar/basic/admin-panel/table-query-ops.mdx b/ar/basic/admin-panel/table-query-ops.mdx
index 1ff11d70..f7312d8d 100644
--- a/ar/basic/admin-panel/table-query-ops.mdx
+++ b/ar/basic/admin-panel/table-query-ops.mdx
@@ -26,7 +26,7 @@ description: "راجع تغطية البحث والفهارس لكل جدول،
| **غير مضبوط** | جداول بلا تغطية بحث بعد. |
| **غير متاح** | جداول لا يمكنها استخدام البحث المفهرس حاليًا، ويوضّح الصف السبب. |
-يقبل مربع البحث أسماء الجداول وقواعد البيانات والمساحات أو معرّفاتها. ويكون الترتيب حسب **الأكثر استعلامات بطيئة** أو **اسم الجدول**. وتغطي **نافذة الرصد** آخر ساعة أو 24 ساعة، وتتبع كل أرقام الرصد في القائمة هذه النافذة. تُحفظ بيانات الرصد لمدة يومين، وما هو أقدم من ذلك لا يظهر في القائمة.
+يقبل مربع البحث أسماء الجداول والمشاريع والمساحات أو معرّفاتها. ويكون الترتيب حسب **الأكثر استعلامات بطيئة** أو **اسم الجدول**. وتغطي **نافذة الرصد** آخر ساعة أو 24 ساعة، وتتبع كل أرقام الرصد في القائمة هذه النافذة. تُحفظ بيانات الرصد لمدة يومين، وما هو أقدم من ذلك لا يظهر في القائمة.
يعرض كل صف عدد الصفوف والحجم التقديريين للجدول، والطلبات والاستعلامات البطيئة ضمن النافذة، وطريقة البحث الحالية وتغطية الحقول، وعدد فهارس التصفية/الفرز، إضافة إلى عدد التوصيات المعلّقة والمهام النشطة. انقر اسم الجدول لفتح تفاصيله.
diff --git a/ar/basic/admin-panel/template-admin.mdx b/ar/basic/admin-panel/template-admin.mdx
index 0152558e..bc33f409 100644
--- a/ar/basic/admin-panel/template-admin.mdx
+++ b/ar/basic/admin-panel/template-admin.mdx
@@ -1,6 +1,6 @@
---
title: "إدارة القوالب"
-description: "أدر قوالب سير العمل لمؤسستك، بما يتيح للمستخدمين البدء سريعًا بقواعد بيانات مهيأة مسبقًا."
+description: "أدر قوالب سير العمل لمؤسستك، بما يتيح للمستخدمين البدء سريعًا بمشاريع مهيأة مسبقًا."
---
متاحة لخطة Business ذاتية الاستضافة والخطط الأعلى
@@ -16,12 +16,12 @@ description: "أدر قوالب سير العمل لمؤسستك، بما يتي
* **وصف Markdown**: وصف تفصيلي يدعم تنسيق النص المنسق
* **الفئة**: تجميع القوالب حسب سيناريوهات الأعمال (مثل الموارد البشرية والمبيعات والهندسة)
* **النظام**: يوضح ما إذا كان القالب قالب نظام رسميًا
-* **المصدر**: قاعدة البيانات الأصلية المستخدمة لإنشاء القالب
+* **المصدر**: المشروع الأصلي المستخدم لإنشاء القالب
#### عمليات القالب
* **قالب جديد**: إنشاء تهيئة قالب جديدة
-* **نشر لقطة**: التقاط الحالة الحالية لقاعدة البيانات المصدرية. يجب نشر لقطة قبل إدراج القالب.
+* **نشر لقطة**: التقاط الحالة الحالية للمشروع المصدر. يجب نشر لقطة قبل إدراج القالب.
* **الحالة (النشر)**: التبديل بين إدراج القالب وإلغاء إدراجه في مركز القوالب. يتطلب اسمًا ووصفًا ولقطة.
* **تثبيت**: تثبيت القوالب المهمة أعلى القائمة
* **حذف**: إزالة تهيئة القالب
@@ -31,7 +31,7 @@ description: "أدر قوالب سير العمل لمؤسستك، بما يتي
يمكن لمستخدمي الاستضافة الذاتية استيراد القوالب من Teable السحابية الرسمية:
1. **التنزيل**: احصل على ملف `.tea` من [مركز القوالب الرسمي](https://teable.ai/templates)
-2. **الاستيراد**: استورد ملف `.tea` كقاعدة بيانات جديدة في مساحتك
+2. **الاستيراد**: استورد ملف `.tea` كمشروع جديد في مساحتك
3. **إنشاء قالب**: انتقل إلى إدارة القوالب > قالب جديد
-4. **تحديد المصدر**: اختر قاعدة البيانات المستوردة كمصدر
+4. **تحديد المصدر**: اختر المشروع المستورد كمصدر
5. **النشر**: هيئ التفاصيل وانشر اللقطة ومكّن الحالة
diff --git a/ar/basic/ai/ai-chat.mdx b/ar/basic/ai/ai-chat.mdx
index c4d3fe04..fe157c85 100644
--- a/ar/basic/ai/ai-chat.mdx
+++ b/ar/basic/ai/ai-chat.mdx
@@ -35,7 +35,7 @@ description: تفاعل مع بياناتك باللغة الطبيعية لتح
- **أسراري**: افتح **+** ← **المزيد** ← **أسراري** لحفظ مفاتيح API أو غيرها من بيانات الاعتماد في **الإعدادات** ← **التكاملات**. هذه القيم ملك لك، ويمكن لمحادثة الذكاء الاصطناعي قراءتها أثناء التشغيل بوصفها متغيرات بيئة، كما يمكنك منحها لتطبيقات وأتمتة بعينها. راجع [بيانات الاعتماد وعمليات التكامل](/ar/basic/credential).
- **طلبات بيانات الاعتماد**: عندما يحتاج الذكاء الاصطناعي إلى حساب خارجي أو إلى سرّ، يثبّت بطاقة طلب في المحادثة. اختر **ربط حسابي** لتنفيذ تصريح OAuth، أو امنح بيانات اعتماد تملكها بالفعل. وإذا نقرت على **تخطي** فلن تُقدَّم بيانات الاعتماد، ويواصل الذكاء الاصطناعي الأجزاء التي يمكنه إكمالها من دونها.
- **استخراج بيانات الويب**: افتح قائمة **+** واختر **استخراج بيانات الويب**، ثم حدد منصة ونوع بيانات. تنقسم العناصر إلى نوعين: نوع يستخرج من رابط تلصقه، مثل **الملف الشخصي** على LinkedIn أو **تقييمات المنتج** على Amazon، ونوع يبحث بكلمة مفتاحية أو وسم أو اسم، مثل **البحث عن فيديوهات** على TikTok أو **منشورات مجتمع فرعي** على Reddit. يملأ Teable التعليمات المناسبة في حقل الإدخال ويترك في نهايتها الجزء الذي عليك إكماله. أما **أي صفحة ويب** فتقبل الرابط الملصوق مباشرة.
-- **المهارات**: افتح قائمة **+** واختر **المهارات** لاستيراد المهارات أو تمكينها أو تعطيلها أو تجربتها في المحادثة الحالية. عند استيراد مهارة، اختر من يمكنه استخدامها: يحصرها **شخصي** بك، ويتيحها **قاعدة البيانات** للمتعاونين في قاعدة البيانات هذه، وتتيحها **المساحة** للجميع في هذه المساحة. اكتب `/` في مربع الإدخال لاختيار مهارة مفعّلة. لربط نظام خارجي أو ترحيله، راجع [ربط كل شيء وترحيله](/ar/basic/ai/connect-everything).
+- **المهارات**: افتح قائمة **+** واختر **المهارات** لاستيراد المهارات أو تمكينها أو تعطيلها أو تجربتها في المحادثة الحالية. عند استيراد مهارة، اختر من يمكنه استخدامها: يحصرها **شخصي** بك، ويتيحها **المشروع** للمتعاونين في هذا المشروع، وتتيحها **المساحة** للجميع في هذه المساحة. اكتب `/` في مربع الإدخال لاختيار مهارة مفعّلة. لربط نظام خارجي أو ترحيله، راجع [ربط كل شيء وترحيله](/ar/basic/ai/connect-everything).
- **استخدام السياق**: توضح الحلقة المجاورة لمربع الإدخال مقدار ما تستخدمه المحادثة حاليًا من نافذة سياق النموذج. انقر عليها لعرض النسبة المئوية وأعداد الرموز. عندما يمتلئ السياق، يضغط Teable المحادثة؛ ابدأ محادثة جديدة إذا أردت سياقًا جديدًا بدلاً من ذلك.
- **إدارة الملفات**: افتح **+** ← **المزيد** ← **إدارة الملفات** لعرض الملفات في بيئة المحادثة المعزولة الحالية. يمكنك معاينة الملفات المدعومة أو تنزيلها أو حذف الملفات والمجلدات التي لم تعد بحاجة إليها. يجب أن تكون هناك محادثة قبل أن تتمكن من إدارة ملفاتها.
- **قائمة انتظار الرسائل**: لا يؤدي إرسال رسالة أخرى أثناء عمل الذكاء الاصطناعي إلى مقاطعته. تنتظر الرسالة في قائمة أعلى مربع الإدخال وتُرسل عند انتهاء التشغيل الحالي. تحتفظ العناصر الموجودة في قائمة الانتظار بشارات الجدول وطريقة العرض والمرفقات والتحديد نفسها الموجودة في إدخال المحادثة؛ يؤدي **إزالة** إلى حذف عنصر، ويعيده **...** ← **تحرير الرسالة** إلى مربع الإدخال، كما يتيح العنصر النصي فقط خيار **توجيه** لتمرير نصه إلى الدور الجاري بدلاً من الانتظار.
@@ -129,9 +129,9 @@ description: تفاعل مع بياناتك باللغة الطبيعية لتح
### الذاكرة
-تخزّن الذاكرة المعلومات التي تطلب صراحةً من Cuppy تذكرها. يقتصر نطاق الذاكرة على المستخدم وقاعدة البيانات: لكل مستخدم في كل قاعدة بيانات سياق ذاكرة مستقل، ولا تظهر الذاكرة المحفوظة في قاعدة بيانات أخرى تلقائيًا في قاعدة البيانات الحالية.
+تخزّن الذاكرة المعلومات التي تطلب صراحةً من Cuppy تذكرها. يقتصر نطاق الذاكرة على المستخدم والمشروع: لكل مستخدم في كل مشروع سياق ذاكرة مستقل، ولا تظهر الذاكرة المحفوظة في مشروع آخر تلقائيًا في المشروع الحالي.
-- حفظ ذاكرة في قاعدة البيانات الحالية
+- حفظ ذاكرة في المشروع الحالي
اذكر في المحادثة ما ينبغي لـ Cuppy تذكره:
@@ -139,12 +139,12 @@ description: تفاعل مع بياناتك باللغة الطبيعية لتح
يرجى تذكّر xxx.
```
-- إعادة استخدام ذاكرة من قاعدة بيانات أخرى
+- إعادة استخدام ذاكرة من مشروع آخر
-اطلب من Cuppy قراءة قاعدة بيانات أخرى وحفظ الأجزاء ذات الصلة في قاعدة البيانات الحالية:
+اطلب من Cuppy قراءة مشروع آخر وحفظ الأجزاء ذات الصلة في المشروع الحالي:
```text
-Cuppy، يرجى قراءة الذاكرة الخاصة بـ Base ID bsexxxxxxxxxxxx وحفظ المعلومات ذات الصلة في قاعدة البيانات الحالية.
+Cuppy، يرجى قراءة ذاكرة المشروع ذي المعرّف bsexxxxxxxxxxxx وحفظ المعلومات ذات الصلة في المشروع الحالي.
```
### معالجة المهام الطويلة
@@ -228,8 +228,8 @@ Cuppy، يرجى قراءة الذاكرة الخاصة بـ Base ID bsexxxxxxxx
اكتب `@` في مربع الإدخال وحدد العقدة التي تريد من محادثة الذكاء الاصطناعي الرجوع إليها. وبالنسبة إلى التحديدات في طريقة عرض الشبكة، يمكنك أيضًا تحديد صفوف أو أعمدة أو خلية واحدة أو نطاق خلايا، ثم استخدام **إضافة إلى المحادثة** من قائمة السياق.
-
- نعم. لا يقتصر الذكاء الاصطناعي على قاعدة البيانات التي تنتمي إليها المحادثة؛ بل يمكنه البحث في قواعد البيانات الأخرى التي يمكنك الوصول إليها والعمل فيها. اذكر قاعدة البيانات في طلبك، مثل «قارن هذا الجدول بجدول الطلبات في قاعدة بيانات المبيعات». لا يعرض `@` إلا العُقد الموجودة في قاعدة البيانات الحالية، وأي إجراء لا توجهه إلى مكان آخر يُنفذ في قاعدة البيانات التي تنتمي إليها المحادثة.
+
+ نعم. لا يقتصر الذكاء الاصطناعي على المشروع الذي تنتمي إليه المحادثة؛ بل يمكنه البحث في المشاريع الأخرى التي يمكنك الوصول إليها والعمل فيها. اذكر المشروع في طلبك، مثل «قارن هذا الجدول بجدول الطلبات في مشروع المبيعات». لا يعرض `@` إلا العُقد الموجودة في المشروع الحالي، وأي إجراء لا توجهه إلى مكان آخر يُنفذ في المشروع الذي تنتمي إليه المحادثة.
@@ -239,8 +239,8 @@ Cuppy، يرجى قراءة الذاكرة الخاصة بـ Base ID bsexxxxxxxx
ليس افتراضيًا. لا يمكنك إلا أنت فتح نتائجك التفاعلية. فعّل **تمكين المشاركة** في العارض وأرسل الرابط، واختر **أعضاء المساحة** إذا كان ينبغي أن تظل النتيجة داخل المساحة.
-
- لا. يقتصر نطاق الذاكرة على المستخدم وقاعدة البيانات. إذا أردت إعادة استخدام ذاكرة من قاعدة بيانات أخرى، فاطلب من Cuppy قراءة ذاكرة قاعدة البيانات تلك وحفظ الأجزاء ذات الصلة في قاعدة البيانات الحالية.
+
+ لا. يقتصر نطاق الذاكرة على المستخدم والمشروع. إذا أردت إعادة استخدام ذاكرة من مشروع آخر، فاطلب من Cuppy قراءة ذاكرة ذلك المشروع وحفظ الأجزاء ذات الصلة في المشروع الحالي.
@@ -268,11 +268,11 @@ Cuppy، يرجى قراءة الذاكرة الخاصة بـ Base ID bsexxxxxxxx
- افتح قائمة **+** واختر **المهارات** لاستيراد المهارات أو إدارتها، أو اكتب `/` في مربع الإدخال لاختيار مهارة مفعّلة. اختر من يمكنه استخدام المهارة عند استيرادها: شخصي لمحادثاتك، وقاعدة البيانات عندما يحتاج إليها المتعاونون في قاعدة البيانات نفسها، والمساحة عندما يحتاج إليها الجميع في المساحة. يمكن للمستخدمين القادرين على إدارة قاعدة البيانات إضافة مهارات على مستوى قاعدة البيانات، ويمكن لمالكي المساحة ومنشئيها إضافة مهارات على مستوى المساحة. إذا عرضت محادثة الذكاء الاصطناعي ملف `.skill`، فاستخدم **تثبيت** في بطاقة الملف لإضافته.
+ افتح قائمة **+** واختر **المهارات** لاستيراد المهارات أو إدارتها، أو اكتب `/` في مربع الإدخال لاختيار مهارة مفعّلة. اختر من يمكنه استخدام المهارة عند استيرادها: شخصي لمحادثاتك، والمشروع عندما يحتاج إليها المتعاونون في المشروع نفسه، والمساحة عندما يحتاج إليها الجميع في المساحة. يمكن للمستخدمين القادرين على إدارة المشروع إضافة مهارات على مستوى المشروع، ويمكن لمالكي المساحة ومنشئيها إضافة مهارات على مستوى المساحة. إذا عرضت محادثة الذكاء الاصطناعي ملف `.skill`، فاستخدم **تثبيت** في بطاقة الملف لإضافته.
- لا يُطبق إلا إصدار واحد، وتكون أولوية الإصدار المشترك للفريق أعلى من النسخة الشخصية: تتقدم مهارة قاعدة البيانات على مهارة المساحة، وتتقدم مهارة المساحة على المهارة الشخصية. وفي محادثة تطبيق أو روبوت، تتقدم المهارة المضافة إلى ذلك التطبيق أو الروبوت. لنقل الجميع إلى إصدار جديد، حدّث النسخة في قاعدة البيانات أو المساحة.
+ لا يُطبق إلا إصدار واحد، وتكون أولوية الإصدار المشترك للفريق أعلى من النسخة الشخصية: تتقدم مهارة المشروع على مهارة المساحة، وتتقدم مهارة المساحة على المهارة الشخصية. وفي محادثة تطبيق أو روبوت، تتقدم المهارة المضافة إلى ذلك التطبيق أو الروبوت. لنقل الجميع إلى إصدار جديد، حدّث النسخة في المشروع أو المساحة.
diff --git a/ar/basic/ai/app-builder.mdx b/ar/basic/ai/app-builder.mdx
index de2f33df..5af8d7a3 100644
--- a/ar/basic/ai/app-builder.mdx
+++ b/ar/basic/ai/app-builder.mdx
@@ -5,21 +5,21 @@ description: حوّل بياناتك إلى تطبيقات ويب مخصصة ب
متاح ضمن جميع الخطط السحابية؛ وتتطلب الاستضافة الذاتية خطة Business أو أعلى.
-يتيح لك منشئ تطبيقات Teable تحويل قواعد بياناتك إلى تطبيقات ويب مخصصة ومتكاملة الوظائف من دون كتابة شيفرة. ومن خلال الجمع بين قوة بنية بياناتك والتصميم المدعوم بالذكاء الاصطناعي، يمكنك إطلاق أدوات داخلية وبوابات للعملاء ولوحات معلومات للبيانات في غضون دقائق.
+يتيح لك منشئ تطبيقات Teable تحويل مشاريعك إلى تطبيقات ويب مخصصة ومتكاملة الوظائف من دون كتابة شيفرة. ومن خلال الجمع بين قوة بنية بياناتك والتصميم المدعوم بالذكاء الاصطناعي، يمكنك إطلاق أدوات داخلية وبوابات للعملاء ولوحات معلومات للبيانات في غضون دقائق.
## نظرة عامة
يتبع منشئ التطبيقات سير عمل «من المطالبة إلى التطبيق». تصف ما تريده، فينشئ الذكاء الاصطناعي بنية التطبيق وصفحاته ومنطقه. ويمكنك بعد ذلك ضبط كل التفاصيل باستخدام المحرر المرئي أو الشيفرة.
-استخدم منشئ التطبيقات لإنشاء واجهات مخصصة وتطبيقات مستقلة. ولتحليل البيانات تفاعليًا وطرح الأسئلة المخصصة داخل قاعدة البيانات، استخدم [محادثة الذكاء الاصطناعي](/ar/basic/ai/ai-chat).
+استخدم منشئ التطبيقات لإنشاء واجهات مخصصة وتطبيقات مستقلة. ولتحليل البيانات تفاعليًا وطرح الأسئلة المخصصة داخل المشروع، استخدم [محادثة الذكاء الاصطناعي](/ar/basic/ai/ai-chat).
## إنشاء تطبيق
توجد طريقتان رئيسيتان لإنشاء تطبيق:
-1. **من قاعدة بيانات**: انقر على «إنشاء تطبيق» في أي قاعدة بيانات لإنشاء تطبيق مرتبط ببياناتك الحالية.
+1. **من مشروع**: انقر على «إنشاء تطبيق» في أي مشروع لإنشاء تطبيق مرتبط ببياناتك الحالية.
2. **من المحادثة**: افتح محادثة الذكاء الاصطناعي وقل «أنشئ تطبيق CRM لجدول العملاء هذا».
## واجهة محرر التطبيقات
@@ -37,7 +37,7 @@ description: حوّل بياناتك إلى تطبيقات ويب مخصصة ب
- **التحرير باللغة الطبيعية**: صِف تغييرات مثل *«اجعل الترويسة زرقاء»* أو *«أضف نموذج إرسال للسجلات الجديدة»*.
- **التوجيه التلقائي**: يفهم الذكاء الاصطناعي المكوّن أو الصفحة التي تشير إليها ويعدّلها مباشرةً.
- **عمليات التكامل**: عندما تحتاج مهمة التطبيق إلى الوصول إلى حساب تابع لجهة خارجية، يمكن لمنشئ التطبيقات عرض بطاقة مثل **ربط Slack** في لوحة المحادثة. انقر على **ربط** للتصريح عبر OAuth. انقر على **تخطي** لإلغاء هذا التصريح؛ وسيواصل الذكاء الاصطناعي تنفيذ الأجزاء التي يمكنه إكمالها من دون ذلك الاتصال.
-- **المهارات**: افتح قائمة **+** واختر **المهارات** لإدارة مهارات محادثة التطبيق هذه. لا تتاح المهارة المضافة هنا إلا للتطبيق الحالي، ويمكن أيضًا استخدام المهارات المشتركة مع قاعدة بيانات التطبيق ومساحته. اكتب `/` في مربع الإدخال لاختيار مهارة مفعّلة.
+- **المهارات**: افتح قائمة **+** واختر **المهارات** لإدارة مهارات محادثة التطبيق هذه. لا تتاح المهارة المضافة هنا إلا للتطبيق الحالي، ويمكن أيضًا استخدام المهارات المشتركة مع مشروع التطبيق ومساحته. اكتب `/` في مربع الإدخال لاختيار مهارة مفعّلة.
- **إدارة الملفات**: افتح **+** ← **المزيد** ← **إدارة الملفات** لعرض الملفات في بيئة التطبيق المعزولة. استخدمها لمعاينة الملفات المدعومة أو تنزيل الملفات المنشأة أو حذف الملفات والمجلدات التي لم تعد بحاجة إليها.
- **مسح المحادثة**: إذا انحرفت المحادثة الحالية عن مسارها، فانقر على **مسح المحادثة** في الزاوية السفلية اليمنى من اللوحة لبدء جلسة جديدة. يؤدي ذلك إلى مسح سجل المحادثة الحالية، لكنه لا يحذف التطبيق نفسه. يظهر تأكيد عند الاستخدام الأول، ويمكنك اختيار عدم إظهاره مرة أخرى لاحقًا.
diff --git a/ar/basic/ai/connect-everything/migrate-airtable.mdx b/ar/basic/ai/connect-everything/migrate-airtable.mdx
index 527e56c7..2cd86a0f 100644
--- a/ar/basic/ai/connect-everything/migrate-airtable.mdx
+++ b/ar/basic/ai/connect-everything/migrate-airtable.mdx
@@ -13,7 +13,7 @@ keywords:
## بدء الترحيل
1. أنشئ [رمز وصول شخصيًا في Airtable](https://airtable.com/create/tokens) يتيح الوصول إلى قواعد البيانات التي تريد ترحيلها.
-2. افتح قاعدة بيانات Teable المستهدفة وشغّل AI Chat.
+2. افتح مشروع Teable المستهدف وشغّل AI Chat.
3. اكتب `/`، واختر **Connect Everything**، وقدّم الرمز.
4. اطلب من Teable AI ترحيل قاعدة بيانات Airtable، ثم راجع النتيجة.
diff --git a/ar/basic/ai/connect-everything/migrate-baserow.mdx b/ar/basic/ai/connect-everything/migrate-baserow.mdx
index 8b92aa7b..053a43fc 100644
--- a/ar/basic/ai/connect-everything/migrate-baserow.mdx
+++ b/ar/basic/ai/connect-everything/migrate-baserow.mdx
@@ -13,7 +13,7 @@ keywords:
## بدء الترحيل
1. انسخ عنوان URL لنسخة Baserow وأنشئ [رمز قاعدة بيانات Baserow](https://baserow.io/user-docs/personal-api-tokens) بصلاحية قراءة الجداول المصدرية.
-2. افتح قاعدة بيانات Teable المستهدفة وشغّل AI Chat.
+2. افتح مشروع Teable المستهدف وشغّل AI Chat.
3. اكتب `/`، واختر **Connect Everything**، وقدّم عنوان URL للنسخة ورمز قاعدة البيانات.
4. اطلب من Teable AI ترحيل قاعدة بيانات Baserow، ثم راجع النتيجة.
diff --git a/ar/basic/ai/connect-everything/migrate-clickup.mdx b/ar/basic/ai/connect-everything/migrate-clickup.mdx
index d764eb3b..77bbab57 100644
--- a/ar/basic/ai/connect-everything/migrate-clickup.mdx
+++ b/ar/basic/ai/connect-everything/migrate-clickup.mdx
@@ -16,7 +16,7 @@ keywords:
## بدء الترحيل
1. في ClickUp، افتح **الإعدادات ← التطبيقات**، ثم انسخ رمز API الشخصي. راجع [دليل المصادقة](https://developer.clickup.com/docs/authentication) من ClickUp.
-2. افتح قاعدة بيانات Teable المستهدفة وشغّل AI Chat.
+2. افتح مشروع Teable المستهدف وشغّل AI Chat.
3. اكتب `/`، واختر **Connect Everything**، وقدّم رمز API الشخصي.
4. اطلب من Teable AI ترحيل مساحات عمل ClickUp المتاحة وإنشاء طرق عرض المشاريع ولوحات المعلومات وعمليات الأتمتة التي يحتاج إليها فريقك.
diff --git a/ar/basic/ai/connect-everything/migrate-jira.mdx b/ar/basic/ai/connect-everything/migrate-jira.mdx
index 05175805..4d786d0c 100644
--- a/ar/basic/ai/connect-everything/migrate-jira.mdx
+++ b/ar/basic/ai/connect-everything/migrate-jira.mdx
@@ -16,7 +16,7 @@ keywords:
## بدء الترحيل
1. أنشئ [رمز Atlassian API](https://id.atlassian.com/manage-profile/security/api-tokens) لحساب يمكنه الوصول إلى مشاريع Jira التي تريد ترحيلها. راجع دليل Atlassian حول [المصادقة الأساسية لواجهات REST API](https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/).
-2. افتح قاعدة بيانات Teable المستهدفة وشغّل AI Chat.
+2. افتح مشروع Teable المستهدف وشغّل AI Chat.
3. اكتب `/`، واختر **Connect Everything**، وقدّم عنوان URL لموقع Jira Cloud والبريد الإلكتروني للحساب ورمز API.
4. اطلب من Teable AI ترحيل مشاريع Jira المتاحة وإنشاء طرق عرض المشاريع ولوحات المعلومات وعمليات الأتمتة التي يحتاج إليها فريقك.
diff --git a/ar/basic/ai/connect-everything/migrate-monday.mdx b/ar/basic/ai/connect-everything/migrate-monday.mdx
index 09887d57..623c8ab1 100644
--- a/ar/basic/ai/connect-everything/migrate-monday.mdx
+++ b/ar/basic/ai/connect-everything/migrate-monday.mdx
@@ -16,7 +16,7 @@ keywords:
## بدء الترحيل
1. في monday.com، افتح قائمة ملفك الشخصي، واختر **المطورون**، ثم انسخ رمز API الشخصي. راجع [دليل مصادقة API](https://developer.monday.com/api-reference/docs/authentication) من monday.com.
-2. افتح قاعدة بيانات Teable المستهدفة وشغّل AI Chat.
+2. افتح مشروع Teable المستهدف وشغّل AI Chat.
3. اكتب `/`، واختر **Connect Everything**، وقدّم رمز API الشخصي.
4. اطلب من Teable AI ترحيل مساحات عمل monday.com المتاحة وإنشاء طرق عرض المشاريع ولوحات المعلومات وعمليات الأتمتة التي يحتاج إليها فريقك.
diff --git a/ar/basic/ai/connect-everything/migrate-nocodb.mdx b/ar/basic/ai/connect-everything/migrate-nocodb.mdx
index fc59d030..069f25a0 100644
--- a/ar/basic/ai/connect-everything/migrate-nocodb.mdx
+++ b/ar/basic/ai/connect-everything/migrate-nocodb.mdx
@@ -13,7 +13,7 @@ keywords:
## بدء الترحيل
1. انسخ عنوان URL لنسخة NocoDB وأنشئ [رمز NocoDB API](https://nocodb.com/docs/product-docs/account-settings/api-tokens) يتيح الوصول إلى قاعدة البيانات المصدرية.
-2. افتح قاعدة بيانات Teable المستهدفة وشغّل AI Chat.
+2. افتح مشروع Teable المستهدف وشغّل AI Chat.
3. اكتب `/`، واختر **Connect Everything**، وقدّم عنوان URL للنسخة ورمز API.
4. اطلب من Teable AI ترحيل قاعدة بيانات NocoDB، ثم راجع النتيجة.
diff --git a/ar/basic/ai/connect-everything/migrate-smartsheet.mdx b/ar/basic/ai/connect-everything/migrate-smartsheet.mdx
index 57f03e1a..9a3b7b52 100644
--- a/ar/basic/ai/connect-everything/migrate-smartsheet.mdx
+++ b/ar/basic/ai/connect-everything/migrate-smartsheet.mdx
@@ -16,7 +16,7 @@ keywords:
## بدء الترحيل
1. في Smartsheet، افتح **الحساب ← الإعدادات الشخصية ← الوصول إلى API**، ثم أنشئ رمز وصول. راجع [دليل بدء استخدام API](https://developers.smartsheet.com/api/smartsheet/guides/getting-started) من Smartsheet.
-2. افتح قاعدة بيانات Teable المستهدفة وشغّل AI Chat.
+2. افتح مشروع Teable المستهدف وشغّل AI Chat.
3. اكتب `/`، واختر **Connect Everything**، وقدّم رمز الوصول وبيئة الحساب: القياسية أو Regions Europe أو Gov.
4. اطلب من Teable AI ترحيل مساحات عمل Smartsheet المتاحة وإنشاء طرق عرض المشاريع ولوحات المعلومات وعمليات الأتمتة التي يحتاج إليها فريقك.
diff --git a/ar/basic/ai/connect-everything/migrate-smartsuite.mdx b/ar/basic/ai/connect-everything/migrate-smartsuite.mdx
index 1e018b83..45edef20 100644
--- a/ar/basic/ai/connect-everything/migrate-smartsuite.mdx
+++ b/ar/basic/ai/connect-everything/migrate-smartsuite.mdx
@@ -13,7 +13,7 @@ keywords:
## بدء الترحيل
1. احصل على [مفتاح SmartSuite API ومعرّف مساحة العمل](https://help.smartsuite.com/en/articles/6096587-retrieving-your-api-key-and-workspace-id).
-2. افتح قاعدة بيانات Teable المستهدفة وشغّل AI Chat.
+2. افتح مشروع Teable المستهدف وشغّل AI Chat.
3. اكتب `/`، واختر **Connect Everything**، وقدّم مفتاح API ومعرّف مساحة العمل.
4. اطلب من Teable AI ترحيل حل SmartSuite، ثم راجع النتيجة.
diff --git a/ar/basic/ai/overview.mdx b/ar/basic/ai/overview.mdx
index 529a305b..a4117617 100644
--- a/ar/basic/ai/overview.mdx
+++ b/ar/basic/ai/overview.mdx
@@ -45,6 +45,6 @@ description: "استكشف إمكانات Teable للذكاء الاصطناعي
1. **تمكين الذكاء الاصطناعي** (للاستضافة الذاتية فقط) - تتضمن Teable السحابية ذكاءً اصطناعيًا مدمجًا جاهزًا للاستخدام. ينبغي لمستخدمي الاستضافة الذاتية إكمال [إعدادات الذكاء الاصطناعي](/ar/basic/admin-panel/ai-setting) أولًا. إذا أردت ربط نماذجك الخاصة، فتابع إلى [نموذج ذكاء اصطناعي مخصص](/ar/basic/ai/custom-model).
2. **استخدام AI Chat** - اطرح أسئلة حول بياناتك أو أنشئ مخططات
-3. **إنشاء التطبيقات** - حوّل قاعدة بياناتك إلى تطبيق ويب بمطالبة بسيطة
+3. **إنشاء التطبيقات** - حوّل مشروعك إلى تطبيق ويب بمطالبة بسيطة
4. **إنشاء حقول ذكاء اصطناعي** - أضف حقولًا مدعومة بالذكاء الاصطناعي لمعالجة بياناتك تلقائيًا
5. **إنشاء عمليات الأتمتة** - استخدم إجرائي التوليد بالذكاء الاصطناعي وتشغيل نص برمجي في مهام سير عملك
diff --git a/ar/basic/ai/teable-skill.mdx b/ar/basic/ai/teable-skill.mdx
index c73ec10e..1c7cb2ae 100644
--- a/ar/basic/ai/teable-skill.mdx
+++ b/ar/basic/ai/teable-skill.mdx
@@ -24,7 +24,7 @@ npx skills add https://github.com/teableio/agent-skills
```text مطالبات بداية بسيطة wrap
-أنشئ جدول CRM بسيطًا في <قاعدة البيانات> {الصق عنوان URL لقاعدة البيانات}.
+أنشئ جدول CRM بسيطًا في <المشروع> {الصق عنوان URL للمشروع}.
```
```text الملفات المحلية → Teable wrap
diff --git a/ar/basic/authority-matrix.mdx b/ar/basic/authority-matrix.mdx
index 35733517..10ec9d21 100644
--- a/ar/basic/authority-matrix.mdx
+++ b/ar/basic/authority-matrix.mdx
@@ -1,13 +1,13 @@
---
title: "نظرة عامة"
-description: "حدّد نطاقات وصول للفرق المختلفة في قاعدة البيانات نفسها، بحيث لا يرى الأعضاء أو يحرروا أو يصدّروا إلا البيانات التي يحتاجون إليها."
+description: "حدّد نطاقات وصول للفرق المختلفة في المشروع نفسه، بحيث لا يرى الأعضاء أو يحرروا أو يصدّروا إلا البيانات التي يحتاجون إليها."
---
{/* mintlify-resync: 2026-05-28 */}
متاح في خطة Business والخطط الأعلى
-عندما تشترك فرق المبيعات والمالية والعمليات والإدارة في قاعدة البيانات نفسها،
-تحدّد الصلاحيات من يمكنه الدخول إلى القاعدة، والبيانات التي يمكنه رؤيتها أو تحريرها،
+عندما تشترك فرق المبيعات والمالية والعمليات والإدارة في المشروع نفسه،
+تحدّد الصلاحيات من يمكنه الدخول إلى المشروع، والبيانات التي يمكنه رؤيتها أو تحريرها،
وما إذا كان يستطيع استيراد البيانات أو تصديرها. تساعد مصفوفة الصلاحيات الفرق على
الاحتفاظ بالبيانات في مكان واحد مع فصل الوصول بحسب المسؤولية.
@@ -24,7 +24,7 @@ description: "حدّد نطاقات وصول للفرق المختلفة في ق
| الوصول على مستوى الأقسام | يستطيع فريق المبيعات إدارة سجلات العملاء، بينما لا يرى فريق المالية إلا حقول الفوترة. |
| السجلات حسب المكلّف | لا يرى مندوبو المبيعات ولا يحدّثون إلا السجلات المسندة إليهم. |
| إدخال البيانات المقيّد | يستطيع الأعضاء إنشاء سجلات جديدة دون تحرير السجلات الموجودة أو حذفها. |
-| حقول حساسة في قاعدة بيانات مشتركة | يستطيع الأعضاء رؤية سجلات الطلبات دون رؤية حقول الدفع أو التكلفة. |
+| حقول حساسة في مشروع مشترك | يستطيع الأعضاء رؤية سجلات الطلبات دون رؤية حقول الدفع أو التكلفة. |
| تطبيقات ومسارات عمل خاضعة للتحكم | تستطيع الأدوار فتح تطبيقات أو مسارات عمل محددة، بينما تظل العقد غير المصرح بها مخفية. |
## آلية عمل الصلاحيات
@@ -45,7 +45,7 @@ description: "حدّد نطاقات وصول للفرق المختلفة في ق
استخدم `إضافة دور` لإنشاء دور مخصص. في صفحة تفاصيل الدور، عيّن
المتعاونين، واكتب وصفًا موجزًا، واضبط الوصول لكل عقدة في
-قاعدة البيانات:
+المشروع:
للتعرف على مستويات الصلاحيات الأساسية للمساحة وقاعدة البيانات، راجع [صلاحيات التعاون](/ar/basic/space/space-permission).
+للتعرف على مستويات الصلاحيات الأساسية للمساحة والمشروع، راجع [صلاحيات التعاون](/ar/basic/space/space-permission).
diff --git a/ar/basic/authority-matrix/authority-matrix-practical-guide.mdx b/ar/basic/authority-matrix/authority-matrix-practical-guide.mdx
index fbba3645..dc63f507 100644
--- a/ar/basic/authority-matrix/authority-matrix-practical-guide.mdx
+++ b/ar/basic/authority-matrix/authority-matrix-practical-guide.mdx
@@ -4,9 +4,9 @@ description: "اضبط أدوار مصفوفة الصلاحيات لفريق م
---
{/* mintlify-resync: 2026-05-28 */}
-يستخدم هذا الدليل قاعدة بيانات للمبيعات تضم ثلاثة جداول: `العملاء` و`طلبات المبيعات`
+يستخدم هذا الدليل مشروع للمبيعات يضم ثلاثة جداول: `العملاء` و`طلبات المبيعات`
و`المنتجات`. والهدف هو تمكين كل دور من العمل بالبيانات التي يحتاجها
-دون كشف قاعدة البيانات كاملة.
+دون كشف المشروع كاملًا.
| الدور | هدف الوصول |
| --- | --- |
@@ -26,7 +26,7 @@ description: "اضبط أدوار مصفوفة الصلاحيات لفريق م
- افتح صفحة مصفوفة الصلاحيات في قاعدة البيانات وفعّل المفتاح الرئيسي. ويُضاف
+ افتح صفحة مصفوفة الصلاحيات في المشروع وفعّل المفتاح الرئيسي. ويُضاف
المستخدم الذي يفعّلها بصفته مسؤولًا.
diff --git a/ar/basic/automation.mdx b/ar/basic/automation.mdx
index 1601e651..6005fcfc 100644
--- a/ar/basic/automation.mdx
+++ b/ar/basic/automation.mdx
@@ -65,8 +65,8 @@ description: "أنشئ تدفقات عمل مؤتمتة بالذكاء الاص
| العنصر | الحد |
|---|---|
-| معدل إرسال البريد | 5 / ثانية / قاعدة بيانات |
-| معدل استلام خطافات الويب | 50 / ثانية / قاعدة بيانات، و2 / ثانية / سير عمل |
+| معدل إرسال البريد | 5 / ثانية / مشروع |
+| معدل استلام خطافات الويب | 50 / ثانية / مشروع، و2 / ثانية / سير عمل |
| حجم حمولة خطاف الويب | 4 MB |
| حصة التشغيل والاحتفاظ بالسجل | تختلف حسب الخطة |
@@ -82,7 +82,7 @@ description: "أنشئ تدفقات عمل مؤتمتة بالذكاء الاص
قد يرسل Teable Cloud أيضًا إشعارات حرجة بشأن الاستخدام غير المعتاد، مثل زيادة يومية كبيرة أو طفرة مفاجئة خلال مدة قصيرة. يستخدم النظام أنماط التشغيل اليومية وكل ساعة مؤخرًا، وقد تتغير الحدود الدقيقة.
- يفتح الإشعار **إعدادات المساحة** ← **الفوترة**. وعند توفر البيانات، يعرض سير العمل وقاعدة البيانات اللذين أسهما بأكبر عدد من عمليات التشغيل. تستند تذكيرات الحصة إلى العمليات المحتسبة ضمن حد خطتك؛ وقد تراعي فحوص الاستخدام غير المعتاد أيضًا عمليات التشغيل الأخيرة ذات الحالة **ناجح** أو **فاشل** أو **معلّق**.
+ يفتح الإشعار **إعدادات المساحة** ← **الفوترة**. وعند توفر البيانات، يعرض سير العمل والمشروع اللذين أسهما بأكبر عدد من عمليات التشغيل. تستند تذكيرات الحصة إلى العمليات المحتسبة ضمن حد خطتك؛ وقد تراعي فحوص الاستخدام غير المعتاد أيضًا عمليات التشغيل الأخيرة ذات الحالة **ناجح** أو **فاشل** أو **معلّق**.
إذا كان الاستخدام متوقعًا، ففكّر في شراء حصة أتمتة إضافية أو تغيير خطتك. وإذا كان غير متوقع، فراجع سير العمل الأعلى استخدامًا وعدّل الأتمتة المرتبطة أو أوقفها مؤقتًا.
diff --git a/ar/basic/automation/actions/communication/send-email-overview.mdx b/ar/basic/automation/actions/communication/send-email-overview.mdx
index 467e6190..1a57593c 100644
--- a/ar/basic/automation/actions/communication/send-email-overview.mdx
+++ b/ar/basic/automation/actions/communication/send-email-overview.mdx
@@ -37,7 +37,7 @@ description: "أرسل رسائل بريد إلكتروني مخصصة من سي
\* يجب إدخال واحد على الأقل من **إلى** أو **نسخة مخفية**.
-**حد المعدل:** 5 رسائل / ثانية / قاعدة بيانات.
+**حد المعدل:** 5 رسائل / ثانية / مشروع.
## كيفية الإعداد
diff --git a/ar/basic/automation/actions/records/create-record.mdx b/ar/basic/automation/actions/records/create-record.mdx
index f538055d..ff217dfb 100644
--- a/ar/basic/automation/actions/records/create-record.mdx
+++ b/ar/basic/automation/actions/records/create-record.mdx
@@ -30,7 +30,7 @@ description: "أنشئ سجلًا جديدًا في أي جدول ضمن سير
## كيفية الإعداد
1. أضف إجراء **إنشاء سجل** إلى سير العمل.
-2. اختر **الجدول** الذي تريد إنشاء السجل فيه. يكون هذا افتراضيًا جدولًا في قاعدة البيانات نفسها، ولكن يمكنك استخدام [الوصول عبر قواعد البيانات](/ar/basic/automation/actions/records/cross-base) لاستهداف جدول في قاعدة بيانات أخرى.
+2. اختر **الجدول** الذي تريد إنشاء السجل فيه. يكون هذا افتراضيًا جدولًا في المشروع نفسه، ولكن يمكنك استخدام [الوصول عبر المشاريع](/ar/basic/automation/actions/records/cross-base) لاستهداف جدول في مشروع آخر.
3. تعرض منطقة ربط الحقول جميع حقول الجدول المستهدف. لكل حقل تريد تعبئته:
- **قيمة ثابتة:** اكتب قيمة مباشرة في الحقل (مثل كتابة "جديد" في حقل الحالة).
- **قيمة ديناميكية:** انقر على زر **+** بجوار الحقل لإدراج متغير من خطوة سابقة. على سبيل المثال، أدرج حقل "الاسم" من المشغّل لنسخ الاسم من السجل الذي شغّل الأتمتة.
@@ -68,11 +68,11 @@ description: "أنشئ سجلًا جديدًا في أي جدول ضمن سير
- يمكنك إنشاء سجلات دفعة واحدة بدمج هذا الإجراء مع [الحلقة (دفعة)](../logic/loop-run). على سبيل المثال، اجلب 50 سجلًا من جدول وأنشئ 50 سجلًا مقابلًا في جدول آخر.
- ستستخدم الحقول التي لا تربطها القيم الافتراضية للجدول (إن وُجدت) أو ستظل فارغة.
- تتوقع حقول السجلات المرتبطة معرّفات السجلات، لا قيم العرض. إذا أردت الربط بسجل، فتأكد من تمرير معرّف السجل، لا اسمه.
-- استخدم [الوصول عبر قواعد البيانات](/ar/basic/automation/actions/records/cross-base) عندما يكون الجدول المستهدف في قاعدة بيانات مختلفة عن قاعدة بيانات الأتمتة.
+- استخدم [الوصول عبر المشاريع](/ar/basic/automation/actions/records/cross-base) عندما يكون الجدول المستهدف في مشروع مختلف عن مشروع الأتمتة.
## موضوعات ذات صلة
- [تحديث سجل](/ar/basic/automation/actions/records/update-record) — تعديل السجلات الموجودة بدلًا من إنشاء سجلات جديدة
- [جلب السجلات](/ar/basic/automation/actions/records/get-records) — استرداد سجلات لاستخدامها مدخلات لإنشاء سجلات جديدة
-- [الوصول عبر قواعد البيانات](/ar/basic/automation/actions/records/cross-base) — إنشاء سجلات في جداول خارج قاعدة البيانات الحالية
+- [الوصول عبر المشاريع](/ar/basic/automation/actions/records/cross-base) — إنشاء سجلات في جداول خارج المشروع الحالي
- [الحلقة (دفعة)](../logic/loop-run) — إنشاء عدة سجلات في خطوة إجراء واحدة
diff --git a/ar/basic/automation/actions/records/cross-base.mdx b/ar/basic/automation/actions/records/cross-base.mdx
index 3aca5e3f..589e75ab 100644
--- a/ar/basic/automation/actions/records/cross-base.mdx
+++ b/ar/basic/automation/actions/records/cross-base.mdx
@@ -1,6 +1,6 @@
---
-title: "الوصول عبر قواعد البيانات"
-description: "اقرأ البيانات واكتبها عبر قواعد بيانات مختلفة ضمن سير عمل واحد"
+title: "الوصول عبر المشاريع"
+description: "اقرأ البيانات واكتبها عبر مشاريع مختلفة ضمن سير عمل واحد"
---
{/* mintlify-resync: 2026-05-26 */}
@@ -10,74 +10,74 @@ description: "اقرأ البيانات واكتبها عبر قواعد بيا
يُرجى ملاحظة أنه إذا أضفت إجراءات يدويًا، فلن يتعرف عليها الذكاء الاصطناعي أو يعدّلها لاحقًا.
-تعمل إجراءات الأتمتة افتراضيًا على الجداول الموجودة داخل قاعدة بيانات سير العمل نفسه. ويتيح الوصول عبر قواعد البيانات لسير العمل القراءة من قاعدة بيانات أخرى والكتابة إليها. استخدمه في تدفقات العمل التي تمتد عبر الأقسام أو المشاريع أو مجموعات البيانات.
+تعمل إجراءات الأتمتة افتراضيًا على الجداول الموجودة داخل مشروع سير العمل نفسه. ويتيح الوصول عبر المشاريع لسير العمل القراءة من مشروع آخر والكتابة إليه. استخدمه في تدفقات العمل التي تمتد عبر الأقسام أو المشاريع أو مجموعات البيانات.
-على سبيل المثال، يمكن لأتمتة قاعدة بيانات المبيعات إنشاء سجل تنفيذ في قاعدة بيانات منفصلة للعمليات، أو يمكن لسير عمل التقارير جمع بيانات من عدة قواعد بيانات للمشاريع في ملخص واحد.
+على سبيل المثال، يمكن لأتمتة مشروع المبيعات إنشاء سجل تنفيذ في مشروع منفصل للعمليات، أو يمكن لسير عمل التقارير جمع بيانات من عدة مشاريع في ملخص واحد.
## الإجراءات المدعومة
-| الإجراء | دعم الوصول عبر قواعد البيانات |
+| الإجراء | دعم الوصول عبر المشاريع |
|---|---|
| إنشاء سجل | نعم |
| تحديث سجل | نعم |
| جلب السجلات | نعم |
-هذه هي الإجراءات الثلاثة الموجهة إلى السجلات. أما الإجراءات الأخرى (إرسال بريد إلكتروني وطلب HTTP وغيرهما) فلا تحتاج إلى الوصول عبر قواعد البيانات لأنها لا تستهدف جدولًا محددًا.
+هذه هي الإجراءات الثلاثة الموجهة إلى السجلات. أما الإجراءات الأخرى (إرسال بريد إلكتروني وطلب HTTP وغيرهما) فلا تحتاج إلى الوصول عبر المشاريع لأنها لا تستهدف جدولًا محددًا.
## كيفية الإعداد
1. افتح إجراءً مدعومًا (إنشاء سجل أو تحديث سجل أو جلب السجلات) في سير العمل.
-2. بجوار منتقي **الجدول**، انقر على **الوصول عبر قواعد البيانات**.
-3. ستفتح لوحة تعرض جميع المساحات وقواعد البيانات التي يستطيع حسابك الوصول إليها. اختر **المساحة** المستهدفة، ثم **قاعدة البيانات** المستهدفة.
-4. اختر **الجدول** داخل قاعدة البيانات. وإذا كان الإجراء يدعم ذلك، فيمكنك أيضًا اختيار **طريقة عرض** محددة.
-5. اربط الحقول وهيّئ الإجراء كالمعتاد. تعكس قائمة الحقول الآن حقول الجدول المستهدف، لا حقول قاعدة البيانات الحالية.
+2. بجوار منتقي **الجدول**، انقر على **الوصول عبر المشاريع**.
+3. ستفتح لوحة تعرض جميع المساحات والمشاريع التي يستطيع حسابك الوصول إليها. اختر **المساحة** المستهدفة، ثم **المشروع** المستهدف.
+4. اختر **الجدول** داخل المشروع. وإذا كان الإجراء يدعم ذلك، فيمكنك أيضًا اختيار **طريقة عرض** محددة.
+5. اربط الحقول وهيّئ الإجراء كالمعتاد. تعكس قائمة الحقول الآن حقول الجدول المستهدف، لا حقول المشروع الحالي.
6. احفظ الإجراء.
## مثال عملي: من المبيعات إلى التنفيذ
-لنفترض أن لديك قاعدتي بيانات:
+لنفترض أن لديك مشروعين:
-- **قاعدة بيانات المبيعات** — تتضمن جدول "الصفقات" الذي يتابع فيه فريق المبيعات الصفقات المغلقة.
-- **قاعدة بيانات العمليات** — تتضمن جدول "التنفيذ" الذي يدير فيه فريق العمليات الشحن.
+- **مشروع المبيعات** — يتضمن جدول "الصفقات" الذي يتابع فيه فريق المبيعات الصفقات المغلقة.
+- **مشروع العمليات** — يتضمن جدول "التنفيذ" الذي يدير فيه فريق العمليات الشحن.
تريد إنشاء سجل تنفيذ تلقائيًا عند إغلاق صفقة:
-1. **المشغّل:** في قاعدة بيانات المبيعات، استخدم "عند مطابقة السجل للشروط" مع عامل التصفية: `المرحلة` تساوي `مغلقة بنجاح`.
-2. **الإجراء:** إنشاء سجل مع توجيه الوصول عبر قواعد البيانات إلى قاعدة بيانات العمليات > جدول التنفيذ.
+1. **المشغّل:** في مشروع المبيعات، استخدم "عند مطابقة السجل للشروط" مع عامل التصفية: `المرحلة` تساوي `مغلقة بنجاح`.
+2. **الإجراء:** إنشاء سجل مع توجيه الوصول عبر المشاريع إلى مشروع العمليات > جدول التنفيذ.
3. **ربط الحقول:** اربط اسم العميل والمنتج والكمية وعنوان الشحن في الصفقة بالحقول المقابلة في جدول التنفيذ.
-الآن، كلما أُغلقت صفقة، يُنشأ سجل تنفيذ تلقائيًا في قاعدة بيانات العمليات دون حاجة إلى تسليم يدوي.
+الآن، كلما أُغلقت صفقة، يُنشأ سجل تنفيذ تلقائيًا في مشروع العمليات دون حاجة إلى تسليم يدوي.
## نموذج الصلاحيات
-عند إنشاء تحديثات سير العمل أو تحريرها أو تطبيقها، يتحقق Teable من كل إجراء عابر لقواعد البيانات وفق صلاحيات المحرر الحالي:
+عند إنشاء تحديثات سير العمل أو تحريرها أو تطبيقها، يتحقق Teable من كل إجراء عابر للمشاريع وفق صلاحيات المحرر الحالي:
-| الإجراء | الصلاحية المطلوبة في قاعدة البيانات المستهدفة |
+| الإجراء | الصلاحية المطلوبة في المشروع المستهدف |
|---|---|
| جلب السجلات | قراءة الحقول والسجلات |
| إنشاء سجل | قراءة الحقول والسجلات، بالإضافة إلى إنشاء السجلات |
| تحديث سجل | قراءة الحقول والسجلات، بالإضافة إلى تحديث السجلات |
-تستخدم عمليات تشغيل سير العمل النشط هوية وقت تشغيل أتمتة Teable لقاعدة البيانات المستهدفة. وتظهر السجلات التي ينشئها أو يحدّثها إجراء عابر لقواعد البيانات باسم **روبوت الأتمتة** في بيانات السجل الوصفية وواجهات التدقيق.
+تستخدم عمليات تشغيل سير العمل النشط هوية وقت تشغيل أتمتة Teable للمشروع المستهدف. وتظهر السجلات التي ينشئها أو يحدّثها إجراء عابر للمشاريع باسم **روبوت الأتمتة** في بيانات السجل الوصفية وواجهات التدقيق.
### ما يحدث عند تغير الوصول
-إذا لم يملك المحرر الحالي الصلاحية المطلوبة في قاعدة البيانات المستهدفة، يمنعه Teable من إضافة إجراءات عابرة لقواعد البيانات تشير إلى تلك القاعدة أو تغييرها. وإذا كانت المسودة تتضمن بالفعل إجراءات لا يستطيع المحرر الوصول إليها، يمنع Teable أيضًا تطبيق المسودة. ويستمر الإصدار النشط في العمل؛ ويتحقق Teable من الصلاحيات مجددًا في المرة التالية التي يحرر فيها شخص سير العمل أو يطبقه.
+إذا لم يملك المحرر الحالي الصلاحية المطلوبة في المشروع المستهدف، يمنعه Teable من إضافة إجراءات عابرة للمشاريع تشير إلى ذلك المشروع أو تغييرها. وإذا كانت المسودة تتضمن بالفعل إجراءات لا يستطيع المحرر الوصول إليها، يمنع Teable أيضًا تطبيق المسودة. ويستمر الإصدار النشط في العمل؛ ويتحقق Teable من الصلاحيات مجددًا في المرة التالية التي يحرر فيها شخص سير العمل أو يطبقه.
لإصلاح خطأ في الصلاحيات أثناء تحرير سير عمل أو تطبيقه:
-1. اطلب من شخص يملك حق الوصول إلى قاعدتي البيانات تحرير سير العمل وتطبيقه.
-2. أو استعد الصلاحيات المطلوبة في قاعدة البيانات المستهدفة، ثم طبّق سير العمل مجددًا.
+1. اطلب من شخص يملك حق الوصول إلى المشروعين تحرير سير العمل وتطبيقه.
+2. أو استعد الصلاحيات المطلوبة في المشروع المستهدف، ثم طبّق سير العمل مجددًا.
## نصائح
-- يمكن للوصول عبر قواعد البيانات الوصول إلى قواعد بيانات في **مساحات** مختلفة. ويجب أن يملك المحرر الذي يهيئ سير العمل أو يطبقه الصلاحيات المطلوبة في قاعدة البيانات المستهدفة.
-- عند ربط الحقول عبر قواعد البيانات، يجب أن تكون أنواع الحقول متوافقة. فلا يمكنك، مثلًا، ربط حقل نصي بحقل مرفقات.
-- إذا أعدت هيكلة قاعدة بيانات مستهدفة (مثل إعادة تسمية الجداول أو حذف الحقول)، فستتعطل الإجراءات التي تشير إلى تلك الجداول والحقول. حدّث سير العمل بعد إجراء تغييرات بنيوية.
-- في تدفقات العمل المعقدة العابرة لقواعد البيانات، فكّر في تجميع عمليات الأتمتة في قاعدة بيانات "مركزية" واحدة للحفاظ على تنظيمها.
+- يمكن للوصول عبر المشاريع الوصول إلى مشاريع في **مساحات** مختلفة. ويجب أن يملك المحرر الذي يهيئ سير العمل أو يطبقه الصلاحيات المطلوبة في المشروع المستهدف.
+- عند ربط الحقول عبر المشاريع، يجب أن تكون أنواع الحقول متوافقة. فلا يمكنك، مثلًا، ربط حقل نصي بحقل مرفقات.
+- إذا أعدت هيكلة مشروع مستهدف (مثل إعادة تسمية الجداول أو حذف الحقول)، فستتعطل الإجراءات التي تشير إلى تلك الجداول والحقول. حدّث سير العمل بعد إجراء تغييرات بنيوية.
+- في تدفقات العمل المعقدة العابرة للمشاريع، فكّر في تجميع عمليات الأتمتة في مشروع "مركزي" واحد للحفاظ على تنظيمها.
## موضوعات ذات صلة
-- [إنشاء سجل](/ar/basic/automation/actions/records/create-record) — إنشاء سجلات في قاعدة البيانات الحالية أو قاعدة أخرى
-- [تحديث سجل](/ar/basic/automation/actions/records/update-record) — تحديث سجلات في قاعدة البيانات الحالية أو قاعدة أخرى
-- [جلب السجلات](/ar/basic/automation/actions/records/get-records) — استرداد سجلات من قاعدة البيانات الحالية أو قاعدة أخرى
+- [إنشاء سجل](/ar/basic/automation/actions/records/create-record) — إنشاء سجلات في المشروع الحالي أو مشروع آخر
+- [تحديث سجل](/ar/basic/automation/actions/records/update-record) — تحديث سجلات في المشروع الحالي أو مشروع آخر
+- [جلب السجلات](/ar/basic/automation/actions/records/get-records) — استرداد سجلات من المشروع الحالي أو مشروع آخر
diff --git a/ar/basic/automation/actions/records/get-records.mdx b/ar/basic/automation/actions/records/get-records.mdx
index 68e4e513..b613af83 100644
--- a/ar/basic/automation/actions/records/get-records.mdx
+++ b/ar/basic/automation/actions/records/get-records.mdx
@@ -33,7 +33,7 @@ description: "استرد السجلات من جدول باستخدام عوام
## كيفية الإعداد
1. أضف إجراء **جلب السجلات** إلى سير العمل.
-2. اختر **الجدول** المطلوب الاستعلام منه. استخدم [الوصول عبر قواعد البيانات](/ar/basic/automation/actions/records/cross-base) إذا كان الجدول في قاعدة بيانات مختلفة.
+2. اختر **الجدول** المطلوب الاستعلام منه. استخدم [الوصول عبر المشاريع](/ar/basic/automation/actions/records/cross-base) إذا كان الجدول في مشروع مختلف.
3. (اختياري) اختر **طريقة عرض** لوراثة إعداداتها لعوامل التصفية والفرز ورؤية الحقول.
4. (اختياري) أضف شروط **عامل التصفية** لتضييق النتائج. مثلًا، `الحالة` تساوي `نشط` و`تاريخ الاستحقاق` قبل اليوم.
5. (اختياري) اضبط **التخطي** و**الأخذ** لترقيم الصفحات. مثلًا، اضبط التخطي على 0 والأخذ على 100 لجلب أول 100 سجل.
@@ -80,11 +80,11 @@ description: "استرد السجلات من جدول باستخدام عوام
- لا يعدّل جلب السجلات أي بيانات — فهو للقراءة فقط.
- إذا أعاد الاستعلام صفرًا من السجلات، فستتلقى الخطوات اللاحقة التي تشير إلى النتائج مصفوفة فارغة. تأكد من أن سير العمل يعالج ذلك بسلاسة (مثل عدم إرسال رسالة تقول "إليك نتائجك" عندما لا توجد نتائج).
- تعمل عوامل التصفية في جلب السجلات مثل عوامل تصفية طرق العرض: يمكنك دمج الشروط بمنطق AND/OR.
-- عند استخدام الوصول عبر قواعد البيانات، يُنفذ الاستعلام بصلاحيات منشئ سير العمل. وإذا فقد المنشئ الوصول إلى قاعدة البيانات المستهدفة، فستفشل الخطوة.
+- عند استخدام الوصول عبر المشاريع، يُنفذ الاستعلام بصلاحيات منشئ سير العمل. وإذا فقد المنشئ الوصول إلى المشروع المستهدف، فستفشل الخطوة.
## موضوعات ذات صلة
-- [الوصول عبر قواعد البيانات](/ar/basic/automation/actions/records/cross-base) — الاستعلام من جداول في قواعد بيانات أخرى
+- [الوصول عبر المشاريع](/ar/basic/automation/actions/records/cross-base) — الاستعلام من جداول في مشاريع أخرى
- [الحلقة (دفعة)](../logic/loop-run) — التكرار على مصفوفة النتائج
- [إنشاء سجل](/ar/basic/automation/actions/records/create-record) — إنشاء سجلات استنادًا إلى البيانات المستردة
- [تحديث سجل](/ar/basic/automation/actions/records/update-record) — تحديث السجلات التي عثر عليها جلب السجلات
diff --git a/ar/basic/automation/actions/records/update-record.mdx b/ar/basic/automation/actions/records/update-record.mdx
index 493469e5..97ffca0c 100644
--- a/ar/basic/automation/actions/records/update-record.mdx
+++ b/ar/basic/automation/actions/records/update-record.mdx
@@ -93,11 +93,11 @@ description: "عدّل حقول سجل موجود ضمن سير عمل"
- قد يؤدي تحديث سجل إلى تشغيل عمليات أتمتة أخرى تراقب الجدول نفسه. انتبه إلى التأثيرات المتسلسلة.
- عند تحديث عدة سجلات بمعرّفات مفصولة بفواصل، تتلقى جميع السجلات قيم الحقول نفسها. استخدم خطوة [حلقة](../logic/loop-run) بدلًا من ذلك إذا كانت لكل سجل قيم مختلفة.
- إذا أردت مسح حقل، فاربطه بقيمة فارغة. أما تركه دون ربط فلن يمسحه.
-- استخدم [الوصول عبر قواعد البيانات](/ar/basic/automation/actions/records/cross-base) لتحديث سجلات في جدول موجود بقاعدة بيانات مختلفة.
+- استخدم [الوصول عبر المشاريع](/ar/basic/automation/actions/records/cross-base) لتحديث سجلات في جدول موجود بمشروع مختلف.
## موضوعات ذات صلة
- [إنشاء سجل](/ar/basic/automation/actions/records/create-record) — إضافة سجلات جديدة بدلًا من تعديل الموجودة
- [جلب السجلات](/ar/basic/automation/actions/records/get-records) — استرداد السجلات للعثور على معرّفاتها قبل التحديث
-- [الوصول عبر قواعد البيانات](/ar/basic/automation/actions/records/cross-base) — تحديث سجلات في جداول خارج قاعدة البيانات الحالية
+- [الوصول عبر المشاريع](/ar/basic/automation/actions/records/cross-base) — تحديث سجلات في جداول خارج المشروع الحالي
- [الحلقة (دفعة)](../logic/loop-run) — تحديث عدة سجلات بقيم مختلفة
diff --git a/ar/basic/automation/ai/scripting/runscript.mdx b/ar/basic/automation/ai/scripting/runscript.mdx
index 3ae09e44..fd5940d3 100644
--- a/ar/basic/automation/ai/scripting/runscript.mdx
+++ b/ar/basic/automation/ai/scripting/runscript.mdx
@@ -210,7 +210,7 @@ output.set("records", data);
### استدعاء الذكاء الاصطناعي من برنامج نصي
-يرسل `POST /api/automation/runtime/ai` مطالبة إلى نموذج الذكاء الاصطناعي في قاعدة بياناتك. تُستمد قاعدة البيانات من سياق الأتمتة، ولذلك لا يلزم معرّف قاعدة بيانات. يتلقى النص `prompt`، بالإضافة إلى `attachments` و`modelKey` و`temperature` و`outputType` الاختيارية؛ وتكون الاستجابة `{ "message": ... }`.
+يرسل `POST /api/automation/runtime/ai` مطالبة إلى نموذج الذكاء الاصطناعي في مشروعك. يُحدَّد المشروع من سياق الأتمتة، ولذلك لا يلزم معرّف مشروع. يتلقى النص `prompt`، بالإضافة إلى `attachments` و`modelKey` و`temperature` و`outputType` الاختيارية؛ وتكون الاستجابة `{ "message": ... }`.
المرفقات هي عناصر `{ url, mimetype, name }`، بحد أقصى 10 عناصر لكل استدعاء، وحجم أقل من 20MB لكل عنصر، ومدة تنزيل لا تتجاوز 30 ثانية، وتشمل الصور وملفات PDF ومستندات Office. قد لا يتمكن نموذج الدردشة الافتراضي من قراءة الصور والمرفقات المشابهة، لذا مرر `modelKey` عند إرسال الملفات. يستهلك كل استدعاء رصيدًا.
diff --git a/ar/basic/automation/examples/api-automation.mdx b/ar/basic/automation/examples/api-automation.mdx
index b49a0a79..5428a462 100644
--- a/ar/basic/automation/examples/api-automation.mdx
+++ b/ar/basic/automation/examples/api-automation.mdx
@@ -17,7 +17,7 @@ description: "أنشئ تدفقات العمل وهيّئها باستخدام
## المتطلبات الأساسية
- رمز وصول شخصي (PAT). راجع [رمز الوصول](/ar/api-doc/token).
-- معرّف قاعدة البيانات ومعرّف الجدول ومعرّفات الحقول. راجع [الحصول على المعرّفات](/ar/api-doc/get-id).
+- معرّف المشروع ومعرّف الجدول ومعرّفات الحقول. راجع [الحصول على المعرّفات](/ar/api-doc/get-id).
## الدوال المساعدة
@@ -74,7 +74,7 @@ await api("PUT", `/base/${baseId}/workflow/${wf.id}/active`, {
## أفضل الممارسات
-- استخدم رمز PAT بأقل قدر من الصلاحيات، واقصره على المساحات وقواعد البيانات التي يحتاج إليها.
+- استخدم رمز PAT بأقل قدر من الصلاحيات، واقصره على المساحات والمشاريع التي يحتاج إليها.
- خزّن الرموز في متغيرات البيئة، ولا تثبتها أبدًا في الشيفرة.
- استخدم **اختبار العقدة** للتحقق قبل التمكين.
- راجع [مرجع API الكامل للأتمتة](/ar/api-reference/automation/put-base-workflow-action).
diff --git a/ar/basic/automation/examples/cross-base-sync.mdx b/ar/basic/automation/examples/cross-base-sync.mdx
index db421ba9..a47c1844 100644
--- a/ar/basic/automation/examples/cross-base-sync.mdx
+++ b/ar/basic/automation/examples/cross-base-sync.mdx
@@ -1,6 +1,6 @@
---
-title: "مزامنة السجلات عبر عدة قواعد بيانات"
-description: "انسخ السجلات الجديدة أو المحدّثة تلقائيًا إلى قاعدة بيانات أخرى باستخدام الوصول عبر قواعد البيانات"
+title: "مزامنة السجلات عبر عدة مشاريع"
+description: "انسخ السجلات الجديدة أو المحدّثة تلقائيًا إلى مشروع آخر باستخدام الوصول عبر المشاريع"
---
نوصي بإنشاء أمثلة الأتمتة مباشرةً في دردشة الذكاء الاصطناعي. ما عليك سوى وصف سير العمل الذي تريده، وسيتولى الذكاء الاصطناعي الإعداد كاملًا، بما في ذلك المشغّل والإجراءات والبرنامج النصي والتهيئة.
@@ -9,18 +9,18 @@ description: "انسخ السجلات الجديدة أو المحدّثة تل
افتح دردشة الذكاء الاصطناعي في الشريط الجانبي الأيمن للجدول وأخبره بما تريده. يمكنك مثلًا أن تقول:
-*"عند إنشاء طلب جديد في قاعدة بيانات المبيعات، أنشئ سجلًا مطابقًا في قاعدة بيانات التنفيذ يتضمن معرّف الطلب واسم العميل والمبلغ، واضبط الحالة على بانتظار التنفيذ"*
+*"عند إنشاء طلب جديد في مشروع المبيعات، أنشئ سجلًا مطابقًا في مشروع التنفيذ يتضمن معرّف الطلب واسم العميل والمبلغ، واضبط الحالة على بانتظار التنفيذ"*
سينشئ الذكاء الاصطناعي سير العمل كاملًا تلقائيًا. يمكنك مراجعة البرنامج النصي الذي أنشأه، واختباره ببيانات حقيقية، وتمكين سير العمل عندما يصبح جاهزًا.
## الإعداد اليدوي
-1. **أنشئ سير عمل** في قاعدة بيانات **المبيعات** باستخدام المشغّل **عند إنشاء سجل**.
+1. **أنشئ سير عمل** في مشروع **المبيعات** باستخدام المشغّل **عند إنشاء سجل**.
2. اختر جدول **الطلبات**.
3. انقر على **اختبار**.
4. **أضف إجراءً** ← **إنشاء سجل**.
-5. انقر على **الوصول عبر قواعد البيانات** بجوار منتقي الجدول.
-6. انتقل إلى قاعدة بيانات **التنفيذ** واختر جدول **الطلبات**.
+5. انقر على **الوصول عبر المشاريع** بجوار منتقي الجدول.
+6. انتقل إلى مشروع **التنفيذ** واختر جدول **الطلبات**.
7. اربط الحقول:
- معرّف الطلب ← معرّف الطلب من المشغّل (عبر **+**)
- العميل ← العميل من المشغّل
@@ -31,6 +31,6 @@ description: "انسخ السجلات الجديدة أو المحدّثة تل
## المزامنة ثنائية الاتجاه
لمزامنة التحديثات في الاتجاهين:
-1. أنشئ سير عمل ثانيًا في قاعدة بيانات **التنفيذ**.
-2. استخدم **عند تحديث سجل** ← **تحديث سجل** مع توجيه الوصول عبر قواعد البيانات إلى قاعدة بيانات المبيعات.
+1. أنشئ سير عمل ثانيًا في مشروع **التنفيذ**.
+2. استخدم **عند تحديث سجل** ← **تحديث سجل** مع توجيه الوصول عبر المشاريع إلى مشروع المبيعات.
3. استخدم عامل تصفية لتجنب الحلقات اللانهائية، مثل التشغيل فقط عند تغير حقول محددة، والتحقق من اختلاف القيمة فعلًا قبل التحديث.
diff --git a/ar/basic/automation/trigger/external/webhook-received.mdx b/ar/basic/automation/trigger/external/webhook-received.mdx
index b2c11503..36e83017 100644
--- a/ar/basic/automation/trigger/external/webhook-received.mdx
+++ b/ar/basic/automation/trigger/external/webhook-received.mdx
@@ -78,7 +78,7 @@ description: "شغّل سير عمل باستلام طلب HTTP من أي نظا
## اختبار خطاف الويب
-أسهل طريقة للاختبار هي استخدام `curl` من سطر الأوامر. انسخ عنوان URL الحقيقي من لوحة المشغّل بدلًا من كتابته؛ فهو يتضمن معرّفي قاعدة البيانات وسير العمل.
+أسهل طريقة للاختبار هي استخدام `curl` من سطر الأوامر. انسخ عنوان URL الحقيقي من لوحة المشغّل بدلًا من كتابته؛ فهو يتضمن معرّفي المشروع وسير العمل.
**دون تفويض:**
@@ -120,7 +120,7 @@ curl -X POST https://your-teable-instance.com/api/webhook/base/bseXXXXXXXXXXXX/w
| النطاق | الحد |
|---|---|
-| لكل قاعدة بيانات | 50 طلبًا / ثانية |
+| لكل مشروع | 50 طلبًا / ثانية |
| لكل سير عمل | طلبان / ثانية |
ستتلقى الطلبات التي تتجاوز حد المعدل استجابة HTTP 429. وإذا كان نظامك الخارجي يرسل دفعات مفاجئة من الطلبات، ففكّر في تنفيذ منطق لإعادة المحاولة مع تراجع أُسّي.
diff --git a/ar/basic/base.mdx b/ar/basic/base.mdx
index f3995920..2841dc61 100644
--- a/ar/basic/base.mdx
+++ b/ar/basic/base.mdx
@@ -1,42 +1,44 @@
---
title: "نظرة عامة"
-description: "أنشئ قواعد البيانات وأدرها واستوردها وصدّرها. انقل البيانات بين مساحات Teable Cloud أو رحّلها بين النسخ السحابية وذاتية الاستضافة باستخدام ملفات .tea."
+description: "أنشئ المشاريع وأدرها واستوردها وصدّرها. انقل البيانات بين مساحات Teable Cloud أو رحّلها بين النسخ السحابية وذاتية الاستضافة باستخدام ملفات .tea."
---
{/* mintlify-resync: 2026-05-26 */}
-قاعدة البيانات أداة لتخزين جميع معلومات مشروع محدد ومعالجتها. يمكن أن تضم كل مساحة عدة قواعد بيانات، وأن تعمل كل قاعدة بصورة مستقلة، مما يوفر بنية معلومات واضحة لمشاريع أو مجموعات جداول محددة.
+يجمع المشروع الجداول والتطبيقات وعمليات الأتمتة المرتبطة في مكان واحد. يمكن أن تضم كل مساحة عدة مشاريع، ولكل مشروع موارده وصلاحيات التعاون الخاصة به.
-إذا لم تكن معتادًا على قواعد البيانات، فيمكنك تصورها كمصنفات Excel، حيث قد يحتوي كل مصنف على عدة أوراق.
+المشروع هو الاسم الظاهر للمورد `base` في API وCLI. تبقى حقول API مثل `baseId` وبادئة المعرّف `bse` وعناوين URL من نوع `/base/...` كما هي.
-## إنشاء قواعد البيانات وإدارتها
+إذا لم تكن معتادًا على المشاريع، فيمكنك تصورها كمصنفات Excel، حيث قد يحتوي كل مصنف على عدة أوراق.
-### إضافة قاعدة بيانات
+## إنشاء المشاريع وإدارتها {#إنشاء-قواعد-البيانات-وإدارتها}
+
+### إضافة مشروع {#إضافة-قاعدة-بيانات}
1. ادخل إلى مساحة
-2. انقر على "إنشاء قاعدة بيانات" في الزاوية العلوية اليمنى
+2. انقر على "إنشاء مشروع" في الزاوية العلوية اليمنى
-### إعادة تسمية قاعدة بيانات أو حذفها
+### إعادة تسمية مشروع أو حذفه {#إعادة-تسمية-قاعدة-بيانات-أو-حذفها}
1. ادخل إلى مساحة
-2. مرّر فوق قاعدة بيانات
+2. مرّر فوق مشروع
3. انقر على زر "···" لفتح القائمة
4. انقر على "إعادة تسمية" أو "حذف"
-### تنظيم الموارد في قاعدة بيانات
+### تنظيم الموارد في مشروع {#تنظيم-الموارد-في-قاعدة-بيانات}
-بعد الدخول إلى قاعدة بيانات، يعرض الشريط الجانبي الأيسر مواردها، مثل الجداول والتطبيقات وعمليات الأتمتة. يمكنك استخدام المجلدات لتنظيم هذه الموارد وتسهيل تصفح قواعد البيانات الكبيرة.
+بعد الدخول إلى مشروع، يعرض الشريط الجانبي الأيسر موارده، مثل الجداول والتطبيقات وعمليات الأتمتة. يمكنك استخدام المجلدات لتنظيم هذه الموارد وتسهيل تصفح المشاريع الكبيرة.
تشمل العمليات الشائعة:
@@ -46,40 +48,40 @@ description: "أنشئ قواعد البيانات وأدرها واستورده
- **إضافة أوصاف**: بالنسبة إلى الجداول والتطبيقات وعمليات الأتمتة، انقر على **إضافة وصف** أسفل اسم المورد في الرأس. استخدم الأوصاف لتسجيل الغرض أو المالك أو ملاحظات التسليم أو قواعد الاستخدام. يفتح Teable الوصف عند فتح مورده لأول مرة، ومرة أخرى بعد تغييره.
- **التحقق من معلومات العقدة**: افتح قائمة `...` للمورد واختر **معلومات العقدة** لعرض معرّف المجلد أو الجدول أو الأتمتة أو التطبيق، إلى جانب معلومات الإنشاء والتعديل.
-### تكرار قاعدة بيانات إلى مساحة أخرى {#duplicate-a-base-to-another-space}
+### تكرار مشروع إلى مساحة أخرى {#duplicate-a-base-to-another-space}
-الخطوة 1: اختر في المساحة قاعدة البيانات التي تريد تكرارها؛
+الخطوة 1: اختر في المساحة المشروع الذي تريد تكراره؛
-الخطوة 2: انقر على أيقونة القائمة واختر خيار نسخ قاعدة البيانات؛
+الخطوة 2: انقر على أيقونة القائمة واختر خيار نسخ المشروع؛
الخطوة 3: اختر المساحة المستهدفة في النافذة المنبثقة. تحتاج إلى صلاحيات المنشئ في تلك المساحة.
-بالنسبة إلى قواعد البيانات الكبيرة، يعرض Teable التقدم في مربع حوار التكرار أثناء نسخ بنية قاعدة البيانات وسجلاتها ومرفقاتها. أبقِ مربع الحوار مفتوحًا حتى يكتمل النسخ. ولا يُنسخ سجل المراجعات أو المتعاونون.
+بالنسبة إلى المشاريع الكبيرة، يعرض Teable التقدم في مربع حوار التكرار أثناء نسخ بنية المشروع وسجلاته ومرفقاته. أبقِ مربع الحوار مفتوحًا حتى يكتمل النسخ. ولا يُنسخ سجل المراجعات أو المتعاونون.
-إذا كانت قاعدة البيانات تحتوي على حقول رابط أو بحث أو تجميع أو بحث شرطي أو تجميع شرطي تشير إلى مساحة أخرى، يعرض Teable الحقول المتأثرة قبل التكرار. وإذا تابعت، يحوّل Teable تلك الحقول إلى **نص من سطر واحد** في قاعدة البيانات المكررة.
+إذا كان المشروع يحتوي على حقول رابط أو بحث أو تجميع أو بحث شرطي أو تجميع شرطي تشير إلى مساحة أخرى، يعرض Teable الحقول المتأثرة قبل التكرار. وإذا تابعت، يحوّل Teable تلك الحقول إلى **نص من سطر واحد** في المشروع المكرر.
-### نقل قاعدة بيانات بين المساحات
+### نقل مشروع بين المساحات {#نقل-قاعدة-بيانات-بين-المساحات}
-إذا كنت تملك صلاحيات المساحة المطلوبة، فيمكنك نقل قاعدة بيانات إلى مساحة أخرى. وإذا كان النقل سيترك حقولًا قائمة على العلاقات تشير عبر المساحات، يحذّرك Teable ويسرد الحقول المتأثرة. وعند التأكيد، يحوّل Teable تلك الحقول إلى **نص من سطر واحد** ضمن عملية النقل.
+إذا كنت تملك صلاحيات المساحة المطلوبة، فيمكنك نقل مشروع إلى مساحة أخرى. وإذا كان النقل سيترك حقولًا قائمة على العلاقات تشير عبر المساحات، يحذّرك Teable ويسرد الحقول المتأثرة. وعند التأكيد، يحوّل Teable تلك الحقول إلى **نص من سطر واحد** ضمن عملية النقل.
-## استيراد قواعد البيانات وتصديرها
+## استيراد المشاريع وتصديرها {#استيراد-قواعد-البيانات-وتصديرها}
استخدم دردشة الذكاء الاصطناعي لترحيل Airtable وBaserow وNocoDB وSmartSuite وأنظمة أخرى إلى Teable.
-### استيراد قاعدة بيانات (ترحيل البيانات)
+### استيراد مشروع (ترحيل البيانات) {#استيراد-قاعدة-بيانات-ترحيل-البيانات}
-يستورد تنسيق ملف `.tea` قاعدة بيانات كاملة بجميع جداولها وحقولها وبياناتها وتهيئاتها. يفيد ذلك في:
-- **ترحيل البيانات**: نقل قواعد البيانات بين نسخ Teable المختلفة (مثلًا من السحابة إلى الاستضافة الذاتية)
-- **استعادة النسخ الاحتياطية**: استعادة قاعدة بيانات سبق تصديرها
-- **مشاركة القوالب**: مشاركة بنى قواعد بيانات كاملة مع فرق أخرى
+يستورد تنسيق ملف `.tea` مشروعًا كاملًا بجميع جداوله وحقوله وبياناته وتهيئاته. يفيد ذلك في:
+- **ترحيل البيانات**: نقل المشاريع بين نسخ Teable المختلفة (مثلًا من السحابة إلى الاستضافة الذاتية)
+- **استعادة النسخ الاحتياطية**: استعادة مشروع سبق تصديره
+- **مشاركة القوالب**: مشاركة بنى مشاريع كاملة مع فرق أخرى
**الخطوات:**
1. ادخل إلى المساحة
@@ -89,19 +91,19 @@ description: "أنشئ قواعد البيانات وأدرها واستورده
-إذا أردت إنشاء قاعدة بيانات من Airtable، فاختر **استيراد من Airtable** في مربع حوار الاستيراد نفسه.
+إذا أردت إنشاء مشروع من Airtable، فاختر **استيراد من Airtable** في مربع حوار الاستيراد نفسه.
-### تصدير قاعدة بيانات (النسخ الاحتياطي والترحيل) {#export-base-backup-&-migration}
+### تصدير مشروع (النسخ الاحتياطي والترحيل) {#export-base-backup-&-migration}
-صدّر قاعدة بياناتك إلى ملف `.tea` لأغراض النسخ الاحتياطي أو الترحيل. يحتوي الملف المصدّر على جميع الجداول والحقول والبيانات وطرق العرض والتهيئات.
+صدّر مشروعك إلى ملف `.tea` لأغراض النسخ الاحتياطي أو الترحيل. يحتوي الملف المصدّر على جميع الجداول والحقول والبيانات وطرق العرض والتهيئات.
**الخطوات:**
1. ادخل إلى المساحة
-2. مرّر مؤشر الفأرة فوق قاعدة البيانات المطلوب تصديرها
+2. مرّر مؤشر الفأرة فوق المشروع المطلوب تصديره
3. انقر على زر 「···」 لفتح القائمة
4. انقر على 「تصدير」
5. أبقِ **تضمين السجلات** مفعّلًا لتصدير بيانات السجلات. عطّله لتصدير البنية والتهيئة فقط.
@@ -110,28 +112,28 @@ description: "أنشئ قواعد البيانات وأدرها واستورده
-- لترحيل البيانات بين نسخ Teable، صدّر قاعدة البيانات من النسخة المصدر، ثم استورد ملف `.tea` إلى النسخة المستهدفة. ستُحفظ جميع البيانات والتهيئات.
-- يحوّل Teable حقول العلاقات العابرة لقواعد البيانات إلى حقول **نص من سطر واحد** في الملف المصدّر.
-- عند تكرار قاعدة بيانات أو نقلها بين المساحات، تُحوّل حقول العلاقات العابرة للمساحات إلى **نص من سطر واحد**.
+- لترحيل البيانات بين نسخ Teable، صدّر المشروع من النسخة المصدر، ثم استورد ملف `.tea` إلى النسخة المستهدفة. ستُحفظ جميع البيانات والتهيئات.
+- يحوّل Teable حقول العلاقات العابرة للمشاريع إلى حقول **نص من سطر واحد** في الملف المصدّر.
+- عند تكرار مشروع أو نقله بين المساحات، تُحوّل حقول العلاقات العابرة للمساحات إلى **نص من سطر واحد**.
-## مشاركة قاعدة بيانات
+## مشاركة مشروع {#مشاركة-قاعدة-بيانات}
-يمكن مشاركة قواعد البيانات عبر روابط عامة. وقد يكون نطاق المشاركة قاعدة البيانات كاملةً أو العنصر المحدد حاليًا.
+يمكن مشاركة المشاريع عبر روابط عامة. وقد يكون نطاق المشاركة المشروع كاملًا أو العنصر المحدد حاليًا.
-1. ادخل إلى قاعدة البيانات المستهدفة
-2. افتح قائمة المشاركة لقاعدة البيانات أو العنصر المحدد
+1. ادخل إلى المشروع المستهدف
+2. افتح قائمة المشاركة للمشروع أو العنصر المحدد
3. فعّل **المشاركة على الويب**
4. انسخ رابط المشاركة أو رمز QR
@@ -139,29 +141,29 @@ description: "أنشئ قواعد البيانات وأدرها واستورده
| النطاق | الوصف |
|------|------|
-| **مشاركة قاعدة البيانات كاملةً** | يشارك جميع العناصر في قاعدة البيانات الحالية. وتُضمّن تلقائيًا الجداول والمجلدات الجديدة المضافة لاحقًا. |
+| **مشاركة المشروع كاملًا** | يشارك جميع العناصر في المشروع الحالي. وتُضمّن تلقائيًا الجداول والمجلدات الجديدة المضافة لاحقًا. |
| **مشاركة العنصر المحدد** | يشارك العنصر المحدد حاليًا. وعند مشاركة مجلد، تُضمّن عناصره الفرعية. |
في إعدادات المشاركة، يمكنك تهيئة صلاحيات الرابط، و**السماح للمشاهدين بنسخ البيانات**، والوصول بكلمة مرور، وإعادة إنشاء الرابط، وحذف رابط المشاركة، أو نسخ تهيئة التضمين.
إذا تضمن نطاق المشاركة تطبيقًا، فيجب نشر التطبيق قبل أن يمكن الوصول إليه عبر الرابط العام.
-## الميزات داخل قاعدة بيانات
+## الميزات داخل مشروع {#الميزات-داخل-قاعدة-بيانات}
-يمكن أن تحتوي قاعدة البيانات على عدة جداول لتسجيل المعلومات المتعلقة بالعمل أو الأعمال وتنظيمها.
+يمكن أن يحتوي المشروع على عدة جداول لتسجيل المعلومات المتعلقة بالعمل أو الأعمال وتنظيمها.
-مثلًا، قد تتضمن قاعدة بيانات إدارة العملاء جداول منفصلة لـ"شركات العملاء" و"جهات اتصال العملاء" و"سجلات متابعة العملاء"، بينما قد تتضمن قاعدة بيانات إدارة غرف الاجتماعات جداول منفصلة لـ"إدارة غرف الاجتماعات" و"معدات غرف الاجتماعات" و"حجوزات غرف الاجتماعات".
+مثلًا، قد يتضمن مشروع إدارة العملاء جداول منفصلة لـ"شركات العملاء" و"جهات اتصال العملاء" و"سجلات متابعة العملاء"، بينما قد يتضمن مشروع إدارة غرف الاجتماعات جداول منفصلة لـ"إدارة غرف الاجتماعات" و"معدات غرف الاجتماعات" و"حجوزات غرف الاجتماعات".
-لذلك، ترتبط معظم الميزات داخل قاعدة البيانات بالجداول:
+لذلك، ترتبط معظم الميزات داخل المشروع بالجداول:
-* **إنشاء الجداول**: تتيح قواعد البيانات للمستخدمين إنشاء جداول جديدة وفق احتياجات المشروع، مع تحديد بنية الجدول وحقوله وأنواع بياناته.
-* **تحرير الجداول**: يمكن للمستخدمين تحرير الجداول الموجودة داخل قاعدة البيانات، بما في ذلك إضافة السجلات وحذفها وتعديلها.
-* **تصدير البيانات واستيرادها**: تدعم قواعد البيانات تصدير البيانات إلى CSV واستيرادها بتنسيقي CSV وXLSX.
+* **إنشاء الجداول**: تتيح المشاريع للمستخدمين إنشاء جداول جديدة وفق احتياجات المشروع، مع تحديد بنية الجدول وحقوله وأنواع بياناته.
+* **تحرير الجداول**: يمكن للمستخدمين تحرير الجداول الموجودة داخل المشروع، بما في ذلك إضافة السجلات وحذفها وتعديلها.
+* **تصدير البيانات واستيرادها**: تدعم المشاريع تصدير البيانات إلى CSV واستيرادها بتنسيقي CSV وXLSX.
راجع [قسم الجداول](/ar/basic/table) لمزيد من المعلومات عنها.
diff --git a/ar/basic/credential.mdx b/ar/basic/credential.mdx
index 3a330fc5..6d7a06f4 100644
--- a/ar/basic/credential.mdx
+++ b/ar/basic/credential.mdx
@@ -39,7 +39,7 @@ description: أدر اتصالاتك وأسرارك وامنحها للتطبي
يحتاج كل تفويض إلى **اسم متغير**، وهو الاسم المستعار لبيانات الاعتماد داخل ذلك التطبيق أو تلك الأتمتة. وتنطبق عليه قواعد تسمية مفتاح السرّ نفسها، وهو الاسم الذي تقرؤه الشيفرة.
-قد تظهر في اللوحة عناصر نائبة عليها **لم يُربط بعد**. فنسخ تطبيق أو تكرار سير عمل أو استيراد قاعدة بيانات أو تكرارها ينقل الأسماء المستعارة التي تتوقعها الشيفرة دون بيانات الاعتماد. انقر على **ربط بيانات اعتمادي** لتزويده ببياناتك حتى يعمل التطبيق أو الأتمتة.
+قد تظهر في اللوحة عناصر نائبة عليها **لم يُربط بعد**. فنسخ تطبيق أو تكرار سير عمل أو استيراد مشروع أو تكراره ينقل الأسماء المستعارة التي تتوقعها الشيفرة دون بيانات الاعتماد. انقر على **ربط بيانات اعتمادي** لتزويده ببياناتك حتى يعمل التطبيق أو الأتمتة.
وإذا كان الاسم المستعار مرتبطًا حاليًا ببيانات اعتماد شخص آخر، فزر **استبداله بحسابي** ينقله إليك. أما **إزالة الترخيص فقط (إبقاء العنصر النائب)** فيفك الارتباط ويُبقي العنصر النائب، فلا تحتاج الشيفرة إلى تعديل.
diff --git a/ar/basic/security.mdx b/ar/basic/security.mdx
index 130618f7..51a83133 100644
--- a/ar/basic/security.mdx
+++ b/ar/basic/security.mdx
@@ -112,13 +112,13 @@ description: "تعرّف إلى بنية أمان Teable وحماية البيا
| الطريقة | الوصف | حالة الاستخدام |
|--------|-------------|----------|
-| **[تصدير قاعدة البيانات](/ar/basic/base#export-base-backup-&-migration)** | تنزيل قاعدة البيانات كاملة كملف `.tea` (البنية والبيانات وعمليات الأتمتة) | النسخ الاحتياطي الكامل والترحيل |
-| **[تكرار قاعدة البيانات](/ar/basic/base#duplicate-a-base-to-another-space)** | إنشاء نسخة من قاعدة البيانات داخل Teable | لقطة سريعة |
+| **[تصدير المشروع](/ar/basic/base#export-base-backup-&-migration)** | تنزيل المشروع كاملًا كملف `.tea` (البنية والبيانات وعمليات الأتمتة) | النسخ الاحتياطي الكامل والترحيل |
+| **[تكرار المشروع](/ar/basic/base#duplicate-a-base-to-another-space)** | إنشاء نسخة من المشروع داخل Teable | لقطة سريعة |
| **[تصدير CSV](/ar/basic/table/export)** | تصدير بيانات جدول منفرد | قابلية نقل البيانات |
| **[التصدير عبر API](/ar/api-doc/record/get)** | تصدير السجلات برمجيًا عبر REST API | النسخ الاحتياطية المؤتمتة |
-يمكنك نسخ قواعد بياناتك احتياطيًا يدويًا بتصدير قاعدة البيانات كاملة كملف `.tea`، أو تصدير الجداول منفردة كملفات CSV، أو جلب بياناتك عبر Teable API.
+يمكنك نسخ مشاريعك احتياطيًا يدويًا بتصدير المشروع كاملًا كملف `.tea`، أو تصدير الجداول منفردة كملفات CSV، أو جلب بياناتك عبر Teable API.
## تسجيل الدخول الموحّد (SSO)
diff --git a/ar/basic/space.mdx b/ar/basic/space.mdx
index bca8ef98..d314008a 100644
--- a/ar/basic/space.mdx
+++ b/ar/basic/space.mdx
@@ -64,15 +64,15 @@ description: "أنشئ المساحات في Teable وأعد تسميتها وا
## تمت مشاركتها معي
-عندما يشارك شخص قاعدة بيانات معك بصفتك متعاونًا، تظهر قاعدة البيانات ضمن **تمت مشاركتها معي** في الشريط الجانبي للمساحة.
+عندما يشارك شخص مشروعًا معك بصفتك متعاونًا، يظهر المشروع ضمن **تمت مشاركتها معي** في الشريط الجانبي للمساحة.
-تختلف قواعد البيانات التي تمت مشاركتها معك عن قواعد البيانات الموجودة في مساحاتك:
+تختلف المشاريع التي تمت مشاركتها معك عن المشاريع الموجودة في مساحاتك:
- يتحكم المشارك في الوصول.
-- تعتمد الإجراءات المتاحة على صلاحية قاعدة البيانات التي مُنحت لك.
-- إذا أزال المشارك وصولك، فلن تعود قاعدة البيانات ظاهرة.
+- تعتمد الإجراءات المتاحة على صلاحية المشروع التي مُنحت لك.
+- إذا أزال المشارك وصولك، فلن يعود المشروع ظاهرًا.
-لمشاركة قاعدة بيانات علنًا، راجع [قاعدة البيانات](/ar/basic/base).
+لمشاركة مشروع علنًا، راجع [المشروع](/ar/basic/base).
## إعدادات المساحة
@@ -95,7 +95,7 @@ description: "أنشئ المساحات في Teable وأعد تسميتها وا
**الدردشة في المراسلة الفورية**
-في صفحة **الدردشة في المراسلة الفورية**، يستطيع مسؤولو المساحة إنشاء روبوتات وإعداد نموذجها وقواعد البيانات والمهارات والملفات المتاحة لها وتكامل المراسلة الفورية.
+في صفحة **الدردشة في المراسلة الفورية**، يستطيع مسؤولو المساحة إنشاء روبوتات وإعداد نموذجها والمشاريع والمهارات والملفات المتاحة لها وتكامل المراسلة الفورية.
**الخطة**
diff --git a/ar/basic/space/base-invite.mdx b/ar/basic/space/base-invite.mdx
index d6faef4d..c7130b94 100644
--- a/ar/basic/space/base-invite.mdx
+++ b/ar/basic/space/base-invite.mdx
@@ -1,39 +1,39 @@
---
-title: "دعوة إلى قاعدة بيانات"
-description: "أدِر الصلاحيات على مستوى قاعدة البيانات. ادعُ الأعضاء إلى قاعدة بيانات محددة دون منحهم الوصول إلى المساحة كاملة، لتعاون أدق وأكثر أمانًا على البيانات."
+title: "دعوة إلى مشروع"
+description: "أدِر الصلاحيات على مستوى المشروع. ادعُ الأعضاء إلى مشروع محدد دون منحهم الوصول إلى المساحة كاملة، لتعاون أدق وأكثر أمانًا على البيانات."
---
-## ما المتعاون في قاعدة البيانات؟
+## ما المتعاون في المشروع؟ {#ما-المتعاون-في-قاعدة-البيانات}
-المتعاون في قاعدة البيانات هو عضو مدعو إلى قاعدة بيانات محددة فقط. وبخلاف المتعاونين في المساحة، لا يمكنه الوصول إلا إلى قواعد البيانات التي دُعي إليها، ولا يستطيع رؤية قواعد البيانات الأخرى في المساحة.
+المتعاون في المشروع هو عضو مدعو إلى مشروع محدد فقط. وبخلاف المتعاونين في المساحة، لا يمكنه الوصول إلا إلى المشاريع التي دُعي إليها، ولا يستطيع رؤية المشاريع الأخرى في المساحة.
-## إضافة متعاونين إلى قاعدة البيانات
+## إضافة متعاونين إلى المشروع {#إضافة-متعاونين-إلى-قاعدة-البيانات}
-ادخل إلى أي قاعدة بيانات وانقر على زر `دعوة` في الزاوية العلوية اليمنى. تتوفر طريقتان:
+ادخل إلى أي مشروع وانقر على زر `دعوة` في الزاوية العلوية اليمنى. تتوفر طريقتان:
-- **الدعوة عبر البريد الإلكتروني**: أدخل عنوان البريد الإلكتروني للمستلم، وحدّد مستوى صلاحية قاعدة البيانات (مثل "المنشئ")، ثم انقر على **إرسال الدعوة**.
+- **الدعوة عبر البريد الإلكتروني**: أدخل عنوان البريد الإلكتروني للمستلم، وحدّد مستوى صلاحية المشروع (مثل "المنشئ")، ثم انقر على **إرسال الدعوة**.
- **الدعوة عبر رابط**: انتقل إلى علامة تبويب "الدعوة عبر رابط" لإنشاء رابط دعوة مخصص. انسخ الرابط وشاركه، ويمكن للمستلمين الانضمام بالنقر عليه.
-بعد إرسال دعوة بالبريد الإلكتروني، يمكنك نسخ رابط قاعدة البيانات المباشر الظاهر في اللوحة وإرساله منفصلًا. ويتلقى المدعو أيضًا إشعارًا داخل التطبيق يفتح قاعدة البيانات.
+بعد إرسال دعوة بالبريد الإلكتروني، يمكنك نسخ رابط المشروع المباشر الظاهر في اللوحة وإرساله منفصلًا. ويتلقى المدعو أيضًا إشعارًا داخل التطبيق يفتح المشروع.
-يمكنك في لوحة الدعوة عرض جميع المستخدمين الذين يمكنهم حاليًا الوصول إلى قاعدة البيانات:
+يمكنك في لوحة الدعوة عرض جميع المستخدمين الذين يمكنهم حاليًا الوصول إلى المشروع:
-- **المتعاونون في قاعدة البيانات**: أعضاء مدعوون مباشرةً إلى قاعدة البيانات هذه فقط.
-- **المتعاونون في المساحة**: تظهر شارة "المساحة" بجوار أسمائهم، ما يدل على أنهم أعضاء على مستوى المساحة ويرثون تلقائيًا إمكانية الوصول إلى قاعدة البيانات هذه.
+- **المتعاونون في المشروع**: أعضاء مدعوون مباشرةً إلى هذا المشروع فقط.
+- **المتعاونون في المساحة**: تظهر شارة "المساحة" بجوار أسمائهم، ما يدل على أنهم أعضاء على مستوى المساحة ويرثون تلقائيًا إمكانية الوصول إلى هذا المشروع.
-توفر قاعدة البيانات أربعة أدوار للصلاحيات لدعم مستويات مختلفة من التعاون. لمقارنة الصلاحيات بالتفصيل، راجع [تفاصيل الصلاحيات](/ar/basic/space/space-permission).
+يوفر المشروع أربعة أدوار للصلاحيات لدعم مستويات مختلفة من التعاون. لمقارنة الصلاحيات بالتفصيل، راجع [تفاصيل الصلاحيات](/ar/basic/space/space-permission).
للتحكم بدقة أكبر على مستوى الجدول أو الحقل أو السجل، استخدم ميزة [مصفوفة الصلاحيات](/ar/basic/authority-matrix).
@@ -46,11 +46,11 @@ description: "أدِر الصلاحيات على مستوى قاعدة البي
## حالات الاستخدام
-صُممت الدعوة إلى قاعدة البيانات للمتعاونين الخارجيين. فعلى سبيل المثال، يمكن دعوة مصمم مستقل استُعين به لتنظيم مكتبة أصول إلى قاعدة البيانات تلك وحدها بصلاحية **المحرر**، دون أن يرى أي قواعد بيانات أخرى في المساحة.
+صُممت الدعوة إلى المشروع للمتعاونين الخارجيين. فعلى سبيل المثال، يمكن دعوة مصمم مستقل استُعين به لتنظيم مكتبة أصول إلى ذلك المشروع وحده بصلاحية **المحرر**، دون أن يرى أي مشاريع أخرى في المساحة.
## ملاحظات
-- **توريث الصلاحيات**: يتمتع مدير المساحة تلقائيًا بوصول كامل إلى جميع قواعد البيانات في تلك المساحة، ولا يمكن خفض صلاحيته على مستوى قاعدة البيانات.
-- **أمان الرابط**: يمكن لأي شخص يحصل على رابط دعوة محاولة الانضمام إلى قاعدة البيانات. وإذا تسرّب الرابط، يمكنك إبطاله بالنقر على علامة X المجاورة له في لوحة الدعوة.
+- **توريث الصلاحيات**: يتمتع مدير المساحة تلقائيًا بوصول كامل إلى جميع المشاريع في تلك المساحة، ولا يمكن خفض صلاحيته على مستوى المشروع.
+- **أمان الرابط**: يمكن لأي شخص يحصل على رابط دعوة محاولة الانضمام إلى المشروع. وإذا تسرّب الرابط، يمكنك إبطاله بالنقر على علامة X المجاورة له في لوحة الدعوة.
عند استخدام [مصفوفة الصلاحيات](/ar/basic/authority-matrix) و[تفاصيل الصلاحيات](/ar/basic/space/space-permission) معًا، لا يُعفى من قيود مصفوفة الصلاحيات إلا المستخدمون من فئة **المدير**. ويخضع لها جميع المستخدمين الآخرين.
diff --git a/ar/basic/space/billing.mdx b/ar/basic/space/billing.mdx
index a7cbd70d..0e490b90 100644
--- a/ar/basic/space/billing.mdx
+++ b/ar/basic/space/billing.mdx
@@ -41,19 +41,19 @@ description: "تعرّف على كيفية إدارة اشتراكك وعرض ت
| المقياس | الوصف |
|--------|-------------|
-| **إجمالي المتعاونين** | عدد المتعاونين الخاضعين للفوترة في المساحة الحالية وقواعد بياناتها |
+| **إجمالي المتعاونين** | عدد المتعاونين الخاضعين للفوترة في المساحة الحالية ومشاريعها |
| **الحد الأقصى لعمليات تشغيل الأتمتة شهريًا** | حصة تشغيل الأتمتة الشهرية. تستهلك كل عملية تشغيل حصة تشغيل واحدة |
| **إجمالي السجلات** | إجمالي عدد الصفوف في جميع جداول المساحة |
| **مساحة تخزين المرفقات** | إجمالي مساحة التخزين التي تستخدمها المرفقات المرفوعة |
| **إجمالي رسائل البريد الإلكتروني** | رسائل البريد الإلكتروني المرسلة عبر الأتمتة باستخدام خدمة بريد Teable الإلكتروني |
-تُحتسب البيانات الموجودة في مهملات المساحة ومهملات قاعدة البيانات ضمن إحصاءات إجمالي السجلات. لتقليل إجمالي عدد السجلات، نظّف البيانات في "المساحة ← المهملات" أو "قاعدة البيانات ← المهملات".
+تُحتسب البيانات الموجودة في مهملات المساحة ومهملات المشروع ضمن إحصاءات إجمالي السجلات. لتقليل إجمالي عدد السجلات، نظّف البيانات في "المساحة ← المهملات" أو "المشروع ← المهملات".
-انقر على **التفاصيل** في بطاقة **إجمالي السجلات** لعرض استخدام السجلات حسب قاعدة البيانات. يعرض مربع الحوار السجلات النشطة وسجلات المهملات وإجمالي السجلات لكل قاعدة بيانات. ويمكنك فتح صفحة مهملات قاعدة بيانات من مربع الحوار، أو حذف قاعدة بيانات موجودة بالفعل في المهملات نهائيًا.
+انقر على **التفاصيل** في بطاقة **إجمالي السجلات** لعرض استخدام السجلات حسب المشروع. يعرض مربع الحوار السجلات النشطة وسجلات المهملات وإجمالي السجلات لكل مشروع. ويمكنك فتح صفحة مهملات مشروع من مربع الحوار، أو حذف مشروع موجود بالفعل في المهملات نهائيًا.
### عند بلوغ حد
-عندما تبلغ المساحة حدًا من حدود الخطة، يوقف Teable الإجراء قبل تشغيله ويفتح مربع حوار الترقية، الذي يذكر الحد الذي بلغته ويوضح مقدار ما استخدمته منه ويربط بتفاصيل الاستخدام لكل قاعدة بيانات. ينطبق ذلك على اللصق والتعبئة وتكرار الصفوف وإنشاء السجلات جماعيًا والاستيراد ورفع المرفقات.
+عندما تبلغ المساحة حدًا من حدود الخطة، يوقف Teable الإجراء قبل تشغيله ويفتح مربع حوار الترقية، الذي يذكر الحد الذي بلغته ويوضح مقدار ما استخدمته منه ويربط بتفاصيل الاستخدام لكل مشروع. ينطبق ذلك على اللصق والتعبئة وتكرار الصفوف وإنشاء السجلات جماعيًا والاستيراد ورفع المرفقات.
للمتابعة، رقّ الخطة أو وفّر مساحة بحذف سجلات أو مرفقات.
@@ -129,9 +129,9 @@ description: "تعرّف على كيفية إدارة اشتراكك وعرض ت
### المقاعد
-تُشترى المقاعد مقدمًا، ولا بأس بشراء عدد يتجاوز حجم فريقك الحالي. يشغل المقعد المتعاونون ذوو دور **المالك** أو **المنشئ** أو **المحرر** في المساحة وقواعد بياناتها. أما **المعلّق** و**المشاهد** فمجانيان.
+تُشترى المقاعد مقدمًا، ولا بأس بشراء عدد يتجاوز حجم فريقك الحالي. يشغل المقعد المتعاونون ذوو دور **المالك** أو **المنشئ** أو **المحرر** في المساحة ومشاريعها. أما **المعلّق** و**المشاهد** فمجانيان.
-في الخطط السحابية، يمثل عدد المقاعد المشتراة حدًا صارمًا. يحظر Teable أي إجراء قد يتجاوز بالمساحة هذا الحد ويعرض إضافة مقاعد. يشمل ذلك دعوات البريد الإلكتروني، وإنشاء رابط دعوة بدور خاضع للفوترة أو تحويل الرابط إلى هذا الدور، والانضمام عبر هذا الرابط، وإضافة المتعاونين مباشرةً، وترقية شخص إلى دور خاضع للفوترة. ويمكن لمن يشغل مقعدًا بالفعل الانضمام إلى قاعدة بيانات أخرى أو تغيير دوره دون شغل مقعد جديد.
+في الخطط السحابية، يمثل عدد المقاعد المشتراة حدًا صارمًا. يحظر Teable أي إجراء قد يتجاوز بالمساحة هذا الحد ويعرض إضافة مقاعد. يشمل ذلك دعوات البريد الإلكتروني، وإنشاء رابط دعوة بدور خاضع للفوترة أو تحويل الرابط إلى هذا الدور، والانضمام عبر هذا الرابط، وإضافة المتعاونين مباشرةً، وترقية شخص إلى دور خاضع للفوترة. ويمكن لمن يشغل مقعدًا بالفعل الانضمام إلى مشروع آخر أو تغيير دوره دون شغل مقعد جديد.
للمتابعة، أضف مقاعد في صفحة الخطة، أو امنح الشخص دور المعلّق أو المشاهد المجاني. لا يستطيع شراء المقاعد إلا مالك المساحة.
diff --git a/ar/basic/space/space-invite.mdx b/ar/basic/space/space-invite.mdx
index 267ac654..c585aa4c 100644
--- a/ar/basic/space/space-invite.mdx
+++ b/ar/basic/space/space-invite.mdx
@@ -5,7 +5,7 @@ description: "ادعُ الآخرين ليصبحوا متعاونين في ال
## ما المتعاون في المساحة؟
-عندما تشارك مساحة مع مستخدم آخر، يصبح متعاونًا في المساحة ويتمتع بالوصول إلى جميع قواعد البيانات داخلها.
+عندما تشارك مساحة مع مستخدم آخر، يصبح متعاونًا في المساحة ويتمتع بالوصول إلى جميع المشاريع داخلها.
## إضافة متعاونين إلى المساحة
@@ -14,7 +14,7 @@ description: "ادعُ الآخرين ليصبحوا متعاونين في ال
1. انقر على المساحة التي تريد إضافة المتعاونين إليها في الشريط الجانبي الأيسر.
2. انقر على زر "دعوة" بالقرب من أعلى المساحة.
3. يؤدي ذلك إلى فتح نافذة دعوة المساحة، حيث تظهر خيارات الدعوة عبر البريد الإلكتروني أو الرابط. كما ستجد "روابط الدعوة" التي أُعدت سابقًا و"المتعاونين في المساحة" الحاليين في القسم المخصص لكل منهما.
-4. **الدعوة عبر البريد الإلكتروني**: أدخل عنوان بريد إلكتروني أو عدة عناوين (مفصولة بفواصل). ثم حدّد مستوى الصلاحية الذي تريد منحه للمستخدمين في جميع قواعد البيانات في المساحة. وأخيرًا، انقر على إرسال البريد الإلكتروني لدعوة المستخدمين إلى التعاون.
+4. **الدعوة عبر البريد الإلكتروني**: أدخل عنوان بريد إلكتروني أو عدة عناوين (مفصولة بفواصل). ثم حدّد مستوى الصلاحية الذي تريد منحه للمستخدمين في جميع المشاريع في المساحة. وأخيرًا، انقر على إرسال البريد الإلكتروني لدعوة المستخدمين إلى التعاون.
بعد إرسال دعوة بالبريد الإلكتروني، يمكنك نسخ رابط المساحة المباشر الظاهر في اللوحة وإرساله منفصلًا. ويتلقى المدعو أيضًا إشعارًا داخل التطبيق يفتح المساحة.
@@ -24,7 +24,7 @@ description: "ادعُ الآخرين ليصبحوا متعاونين في ال
className="docs-screenshot"
/>
-5. **الدعوة عبر رابط**: انقر على خيار "الدعوة عبر رابط". ثم حدّد مستوى الصلاحية الذي سيمنحه رابط الدعوة لجميع قواعد البيانات في المساحة. وأخيرًا، انقر على إنشاء رابط. ويمكنك الآن النقر على أيقونة الحافظة بجوار الرابط المنشأ لمشاركته بالطريقة التي تناسبك.
+5. **الدعوة عبر رابط**: انقر على خيار "الدعوة عبر رابط". ثم حدّد مستوى الصلاحية الذي سيمنحه رابط الدعوة لجميع المشاريع في المساحة. وأخيرًا، انقر على إنشاء رابط. ويمكنك الآن النقر على أيقونة الحافظة بجوار الرابط المنشأ لمشاركته بالطريقة التي تناسبك.
-يمكن للمتعاونين في المساحة الوصول إلى جميع قواعد البيانات فيها. وإذا كان شخص ما يحتاج إلى العمل على قواعد بيانات محددة فقط، ففكر في إضافته ضمن [المتعاونين في قاعدة البيانات](/ar/basic/space/base-invite).
+يمكن للمتعاونين في المساحة الوصول إلى جميع المشاريع فيها. وإذا كان شخص ما يحتاج إلى العمل على مشاريع محددة فقط، ففكر في إضافته ضمن [المتعاونين في المشروع](/ar/basic/space/base-invite).
## حذف روابط الدعوة
@@ -56,7 +56,7 @@ description: "ادعُ الآخرين ليصبحوا متعاونين في ال
* **قيد الصلاحية**: لا يستطيع إزالة المتعاونين الآخرين إلا المستخدمون الذين لديهم صلاحية المدير أو المنشئ.
* **إزالة وصولك بنفسك**: يمكنك إزالة وصولك إذا كان في المساحة مدير آخر واحد على الأقل.
-* **النطاق**: لا تؤدي إزالة شخص من المساحة إلى إزالة الصلاحيات التي يحملها في قواعد بيانات منفردة.
+* **النطاق**: لا تؤدي إزالة شخص من المساحة إلى إزالة الصلاحيات التي يحملها في مشاريع منفردة.
عند إضافة مستخدمين جدد إلى مساحة، يمكنك تعيين الأدوار التالية (راجع [تفاصيل الصلاحيات](/ar/basic/space/space-permission)):
@@ -68,8 +68,8 @@ description: "ادعُ الآخرين ليصبحوا متعاونين في ال
| المعلّق | يستطيع التعليق على السجلات، لكنه لا يستطيع تعديل البيانات. |
| المشاهد | يستطيع العرض، لكنه لا يستطيع التعليق. |
-## مراجعة الوصول إلى قواعد البيانات
+## مراجعة الوصول إلى المشاريع {#مراجعة-الوصول-إلى-قواعد-البيانات}
-يظهر كل شخص أو قسم مرة واحدة في قائمة المتعاونين في المساحة، حتى عندما يحمل أيضًا صلاحيات في قواعد بيانات منفردة. وتبيّن شارة **صلاحيات قواعد البيانات** بجوار الدور عدد قواعد البيانات التي دُعي إليها. ويُدرج الشخص الذي لم يُضف قط إلى المساحة نفسها بوصفه **لديه وصول إلى قواعد بيانات محددة فقط**.
+يظهر كل شخص أو قسم مرة واحدة في قائمة المتعاونين في المساحة، حتى عندما يحمل أيضًا صلاحيات في مشاريع منفردة. وتبيّن شارة **صلاحيات المشاريع** بجوار الدور عدد المشاريع التي دُعي إليها. ويُدرج الشخص الذي لم يُضف قط إلى المساحة نفسها بوصفه **لديه وصول إلى مشاريع محددة فقط**.
-وسّع صفًا لرؤية قواعد البيانات تلك والدور الذي يحمله في كل منها. ومن هناك، يسحب خيار **إزالة الوصول إلى قاعدة البيانات** صلاحية قاعدة بيانات واحدة، بينما يسحب خيار **إزالة المتعاون** في صف خاص بقواعد البيانات فقط جميع صلاحيات قواعد البيانات التي يحملها ذلك الشخص في هذه المساحة.
+وسّع صفًا لرؤية المشاريع تلك والدور الذي يحمله في كل منها. ومن هناك، يسحب خيار **إزالة الوصول إلى المشروع** صلاحية مشروع واحدة، بينما يسحب خيار **إزالة المتعاون** في صف خاص بالمشاريع فقط جميع صلاحيات المشاريع التي يحملها ذلك الشخص في هذه المساحة.
diff --git a/ar/basic/space/space-permission.mdx b/ar/basic/space/space-permission.mdx
index 4b0ef0e5..1b8cfd98 100644
--- a/ar/basic/space/space-permission.mdx
+++ b/ar/basic/space/space-permission.mdx
@@ -1,20 +1,20 @@
---
title: "تفاصيل صلاحيات التعاون"
-description: "يوضح هذا القسم نطاق العمليات لأربعة مستويات مختلفة من الصلاحيات في المساحات وقواعد البيانات."
+description: "يوضح هذا القسم نطاق العمليات لأربعة مستويات مختلفة من الصلاحيات في المساحات والمشاريع."
---
يوفر Teable تحكمًا أدق في الصلاحيات على مستوى الجدول والحقل والسجل. يُرجى الرجوع إلى قسم [مصفوفة الصلاحيات](/ar/basic/authority-matrix).
-### عمليات قاعدة البيانات
+### عمليات المشروع {#عمليات-قاعدة-البيانات}
| الوصف | المنشئ/المدير | المحرر | المعلّق | المشاهد |
| ----------- | :------------: | :----: | :-------: | :----: |
-| عرض البيانات داخل قاعدة البيانات | ✅ | ✅ | ✅ | ✅ |
+| عرض البيانات داخل المشروع | ✅ | ✅ | ✅ | ✅ |
| دعوة مستخدمين بصلاحيات مساوية أو أدنى | ✅ | ✅ | ✅ | ✅ |
| إنشاء روابط مشاركة طريقة العرض أو حذفها | ✅ | ✅ | | |
| إنشاء عمليات الأتمتة وتحريرها | ✅ | | | |
| تفعيل مصفوفة الصلاحيات | ✅ | | | |
-| إنشاء روابط دعوة للتعاون في قاعدة البيانات أو حذفها | ✅ | | | |
-| إعادة تسمية قاعدة البيانات | ✅ | | | |
+| إنشاء روابط دعوة للتعاون في المشروع أو حذفها | ✅ | | | |
+| إعادة تسمية المشروع | ✅ | | | |
### عمليات السجلات
@@ -51,12 +51,12 @@ description: "يوضح هذا القسم نطاق العمليات لأربعة
| الوصف | المدير | المنشئ | المحرر | المعلّق | المشاهد |
| ----------- | :-----: | :-----: | :----: | :-------: | :----: |
-| الوصول إلى جميع قواعد البيانات في المساحة | ✅ | ✅ | ✅ | ✅ | ✅ |
+| الوصول إلى جميع المشاريع في المساحة | ✅ | ✅ | ✅ | ✅ | ✅ |
| دعوة مستخدمين بصلاحيات مساوية أو أدنى | ✅ | ✅ | ✅ | ✅ | ✅ |
| إعادة تسمية المساحة | ✅ | ✅ | | | |
-| إضافة قواعد البيانات وإزالتها في المساحة | ✅ | ✅ | | | |
-| إعادة ترتيب قواعد البيانات داخل المساحة | ✅ | ✅ | | | |
-| نقل قواعد البيانات بين المساحات | ✅ | ✅ | | | |
+| إضافة المشاريع وإزالتها في المساحة | ✅ | ✅ | | | |
+| إعادة ترتيب المشاريع داخل المساحة | ✅ | ✅ | | | |
+| نقل المشاريع بين المساحات | ✅ | ✅ | | | |
| ضبط إعدادات الفوترة وترقية المساحة | ✅ | | | | |
| منح صلاحيات المدير | ✅ | | | | |
diff --git a/ar/basic/table.mdx b/ar/basic/table.mdx
index 9b03e052..1d3c5797 100644
--- a/ar/basic/table.mdx
+++ b/ar/basic/table.mdx
@@ -1,16 +1,16 @@
---
title: "نظرة عامة"
-description: "أنشئ الجداول واستوردها وشاركها وأدرها داخل قاعدة بيانات."
+description: "أنشئ الجداول واستوردها وشاركها وأدرها داخل مشروع."
---
{/* mintlify-resync: 2026-05-14 */}
-يمكن أن تحتوي كل قاعدة بيانات على عدة جداول لتخزين البيانات المرتبطة وإدارتها. تعادل جداول Teable جداول قواعد البيانات، وسيساعدك فهم [اختلافها عن جداول البيانات](/ar/compare/teable-vs-excel) على تحقيق أقصى استفادة من Teable.
+يمكن أن يحتوي كل مشروع على عدة جداول لتخزين البيانات المرتبطة وإدارتها. تعادل جداول Teable جداول قواعد البيانات، وسيساعدك فهم [اختلافها عن جداول البيانات](/ar/compare/teable-vs-excel) على تحقيق أقصى استفادة من Teable.
## إنشاء الجداول وإدارتها
### إضافة الجداول
-في قاعدة بيانات، انقر على زر `+` في الدليل واختر:
+في مشروع، انقر على زر `+` في الدليل واختر:
-عندما ترتبط جداول أخرى بالجدول الذي تحذفه، يسرد مربع التأكيد الحقول المتأثرة بالحذف مع قاعدة البيانات والجدول اللذين ينتمي إليهما كل حقل. ويحوّل حذف الجدول حقول الروابط تلك إلى حقول نص من سطر واحد تحتفظ بعناوين السجلات المرتبطة، بينما تتوقف حقول البحث أو التجميع المبنية عليها عن العمل.
+عندما ترتبط جداول أخرى بالجدول الذي تحذفه، يسرد مربع التأكيد الحقول المتأثرة بالحذف مع المشروع والجدول اللذين ينتمي إليهما كل حقل. ويحوّل حذف الجدول حقول الروابط تلك إلى حقول نص من سطر واحد تحتفظ بعناوين السجلات المرتبطة، بينما تتوقف حقول البحث أو التجميع المبنية عليها عن العمل.
### سلة المهملات
-انقر على أيقونة سلة المهملات في الزاوية العلوية اليسرى لقاعدة البيانات لإدارة الجداول المحذوفة.
+انقر على أيقونة سلة المهملات في الزاوية العلوية اليسرى للمشروع لإدارة الجداول المحذوفة.
-- **استعادة**: إعادة الجدول إلى قاعدة البيانات مع سلامة جميع بياناته
+- **استعادة**: إعادة الجدول إلى المشروع مع سلامة جميع بياناته
- **إفراغ سلة المهملات**: حذف جميع الجداول الموجودة فيها نهائيًا
لا تؤدي استعادة جدول إلى التراجع عن تحويل الروابط. تظل حقول الروابط في الجداول الأخرى نصية، لذا أعد إنشاءها إذا كنت تحتاج إلى استعادة الاتصال.
diff --git a/ar/basic/table/import.mdx b/ar/basic/table/import.mdx
index f3151dbd..d1f4cfa0 100644
--- a/ar/basic/table/import.mdx
+++ b/ar/basic/table/import.mdx
@@ -4,7 +4,7 @@ description: "استورد بيانات CSV أو Excel أو Airtable أو Google
---
{/* mintlify-resync: 2026-05-14 */}
-استخدم الاستيراد لتهيئة جدول جديد، أو إلحاق بيانات جديدة بجدول موجود، أو نقل جداول من Airtable أو Google Sheets إلى قاعدة بيانات Teable. ويتوفر Airtable وGoogle Sheets أيضًا عند استيراد قاعدة بيانات كاملة.
+استخدم الاستيراد لتهيئة جدول جديد، أو إلحاق بيانات جديدة بجدول موجود، أو نقل جداول من Airtable أو Google Sheets إلى مشروع Teable. ويتوفر Airtable وGoogle Sheets أيضًا عند استيراد مشروع كامل.
استخدم Connect Everything في دردشة الذكاء الاصطناعي لترحيل Airtable وBaserow وNocoDB وSmartSuite وأنظمة أخرى إلى Teable.
@@ -72,16 +72,16 @@ description: "استورد بيانات CSV أو Excel أو Airtable أو Google
إذا كانت عملية تكامل Airtable مهيأة في نسختك، فيمكنك استخدام استيراد Airtable بطريقتين:
-- لإنشاء قاعدة بيانات Teable جديدة، افتح قائمة المساحة المستهدفة، وانقر على **استيراد**، ثم اختر **استيراد من Airtable**.
-- لاستيراد جداول إلى قاعدة بيانات Teable التي تعرضها، استخدم قائمة موارد قاعدة البيانات:
+- لإنشاء مشروع Teable جديد، افتح قائمة المساحة المستهدفة، وانقر على **استيراد**، ثم اختر **استيراد من Airtable**.
+- لاستيراد جداول إلى مشروع Teable الذي تعرضه، استخدم قائمة موارد المشروع:
-1. افتح قاعدة بيانات Teable المستهدفة.
+1. افتح مشروع Teable المستهدف.
2. انقر على `+` أعلى الدليل الأيسر.
3. ضمن **إضافة من مصادر أخرى**، اختر **Airtable**.
@@ -99,8 +99,8 @@ description: "استورد بيانات CSV أو Excel أو Airtable أو Google
ابدأ من أحد المدخلين:
-- لإنشاء قاعدة بيانات Teable جديدة، افتح قائمة المساحة المستهدفة، وانقر على **استيراد**، ثم اختر **استيراد من Google Sheets**.
-- لإضافة جداول إلى قاعدة البيانات التي تعرضها، انقر على `+` أعلى الدليل الأيسر واختر **Google Sheets** ضمن **إضافة من مصادر أخرى**.
+- لإنشاء مشروع Teable جديد، افتح قائمة المساحة المستهدفة، وانقر على **استيراد**، ثم اختر **استيراد من Google Sheets**.
+- لإضافة جداول إلى المشروع الذي تعرضه، انقر على `+` أعلى الدليل الأيسر واختر **Google Sheets** ضمن **إضافة من مصادر أخرى**.
@@ -113,7 +113,7 @@ description: "استورد بيانات CSV أو Excel أو Airtable أو Google
تظهر كل علامة تبويب كبطاقة تتضمن عدد صفوفها وأعمدتها. اختر علامات التبويب المطلوبة. ألغِ **استيراد السجلات** إذا كنت تريد بنية الحقول فقط دون البيانات.
- انقر على **بدء الاستيراد** وأبقِ مربع الحوار مفتوحًا. يعرض التقدم جدولًا بعد آخر، وعند الانتهاء يعرض عدد السجلات التي استقبلها كل جدول. بعد استيراد قاعدة بيانات جديدة، استخدم **فتح قاعدة البيانات** للانتقال مباشرةً إلى النتيجة.
+ انقر على **بدء الاستيراد** وأبقِ مربع الحوار مفتوحًا. يعرض التقدم جدولًا بعد آخر، وعند الانتهاء يعرض عدد السجلات التي استقبلها كل جدول. بعد استيراد مشروع جديد، استخدم **فتح المشروع** للانتقال مباشرةً إلى النتيجة.
diff --git a/ar/basic/view/toolbar.mdx b/ar/basic/view/toolbar.mdx
index 4546601f..826b7926 100644
--- a/ar/basic/view/toolbar.mdx
+++ b/ar/basic/view/toolbar.mdx
@@ -148,9 +148,9 @@ description: "استخدم عوامل التصفية والمجموعات وال
## مشاركة طريقة العرض
-تنشر ميزة **مشاركة طريقة العرض** طريقة العرض الحالية عبر رابط. يرى الزوار البيانات والتخطيط في طريقة العرض تلك. وهذا يختلف عن دعوتهم بوصفهم متعاونين في قاعدة البيانات.
+تنشر ميزة **مشاركة طريقة العرض** طريقة العرض الحالية عبر رابط. يرى الزوار البيانات والتخطيط في طريقة العرض تلك. وهذا يختلف عن دعوتهم بوصفهم متعاونين في المشروع.
-لمشاركة قاعدة بيانات كاملة أو جدول معيّن أو مجلد، استخدم مشاركة قاعدة البيانات في [قاعدة البيانات](/ar/basic/base).
+لمشاركة مشروع كامل أو جدول معيّن أو مجلد، استخدم مشاركة المشروع في [المشروع](/ar/basic/base).
| خيار المشاركة | الأنسب لـ |
| --- | --- |
@@ -240,5 +240,5 @@ description: "استخدم عوامل التصفية والمجموعات وال
## ملاحظات
- تؤثر تغييرات عوامل التصفية والمجموعات والفرز والحقول الظاهرة وارتفاع الصف في كل من يستخدم طريقة العرض الحالية، ما لم تكن في الوضع الشخصي.
-- تنشر مشاركة طريقة العرض نتيجة طريقة العرض الحالية، وليس صلاحيات قاعدة البيانات كاملة. وللتعاون المستمر، استخدم صلاحيات الأعضاء أو مشاركة قاعدة البيانات.
+- تنشر مشاركة طريقة العرض نتيجة طريقة العرض الحالية، وليس صلاحيات المشروع كاملة. وللتعاون المستمر، استخدم صلاحيات الأعضاء أو مشاركة المشروع.
- في كلا الوضعين، تظل التعديلات على قيم الخلايا متزامنة مع الجميع.
diff --git a/ar/deploy/env.mdx b/ar/deploy/env.mdx
index 05fa986c..64ec830b 100644
--- a/ar/deploy/env.mdx
+++ b/ar/deploy/env.mdx
@@ -71,7 +71,7 @@ mode: "wide"
| BACKEND_MAIL_AUTH_USER | اسم مستخدم المصادقة لخادم البريد الافتراضي | - | - | username |
| BACKEND_MAIL_AUTH_PASS | كلمة مرور المصادقة لخادم البريد الافتراضي | - | - | usertoken |
| BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH | الحد الأقصى لطول اسم الداعي في عناوين رسائل الدعوة. يؤدي تركه فارغًا أو ضبطه على 0 إلى تعطيل الاقتطاع | - | - | 32 |
-| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | الحد الأقصى لطول اسم المساحة أو قاعدة البيانات في عناوين رسائل الدعوة. يؤدي تركه فارغًا أو ضبطه على 0 إلى تعطيل الاقتطاع | - | - | 32 |
+| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | الحد الأقصى لطول اسم المساحة أو المشروع في عناوين رسائل الدعوة. يؤدي تركه فارغًا أو ضبطه على 0 إلى تعطيل الاقتطاع | - | - | 32 |
| **تهيئة الجلسات/JWT** | | | | |
| BACKEND_SESSION_EXPIRES_IN | مدة انتهاء صلاحية الجلسة | 7d | - | 7d |
| BACKEND_SESSION_COOKIE_SECURE | ما إذا كان ملف تعريف ارتباط الجلسة آمنًا | false | - | true |
@@ -93,7 +93,7 @@ mode: "wide"
| TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | الحد الأقصى لعدد السجلات لكل عملية تعديل | 20000 | - | 20000 |
| TABLE_LIMIT_COMPUTED_CELL_VALUE_MAX_BYTES | الحد الأقصى لبايتات قيمة الخلية المحسوبة | 262144 | - | 262144 |
| TABLE_LIMIT_FORMULA_MAX_LENGTH | الحد الأقصى لطول الصيغة | 8192 | - | 8192 |
-| TABLE_LIMIT_TABLES_PER_BASE_MAX | الحد الأقصى لعدد الجداول لكل قاعدة بيانات | 1000 | - | 1000 |
+| TABLE_LIMIT_TABLES_PER_BASE_MAX | الحد الأقصى لعدد الجداول لكل مشروع | 1000 | - | 1000 |
| TABLE_LIMIT_FIELDS_PER_TABLE_MAX | الحد الأقصى لعدد الحقول لكل جدول | 500 | - | 500 |
| TABLE_LIMIT_VIEWS_PER_TABLE_MAX | الحد الأقصى لطرق العرض لكل جدول | 100 | - | 100 |
| TABLE_LIMIT_CREATE_TABLE_FIELDS_MAX | الحد الأقصى للحقول المقبولة عند إنشاء جدول | 1000 | - | 1000 |
@@ -133,10 +133,10 @@ mode: "wide"
| TELEMETRY_REPORT_DISABLED | تعطيل إرسال بيانات القياس عن بُعد للنسخ ذاتية الاستضافة، بما يشمل تقارير الامتثال للترخيص من النسخ المتصلة | false | - | true |
| **تهيئة قاعدة البيانات** | | | | |
| PRISMA_DATABASE_URL | عنوان URL للاتصال بقاعدة البيانات، ويجب تهيئته | - | نعم | postgresql://teable:teable@127.0.0.1:5432/teable |
-| PUBLIC_DATABASE_PROXY | عنوان قاعدة البيانات المتاح خارجيًا (host:port) والمستخدم في بيانات الاعتماد التي تنشئها لوحة `اتصال قاعدة البيانات` في قاعدة البيانات؛ اضبطه لتمكين وصول SQL خارجي للقراءة فقط | - | - | db.example.com:42345 |
+| PUBLIC_DATABASE_PROXY | عنوان قاعدة البيانات المتاح خارجيًا (host:port) والمستخدم في بيانات الاعتماد التي تنشئها لوحة `اتصال قاعدة البيانات` في المشروع؛ اضبطه لتمكين وصول SQL خارجي للقراءة فقط | - | - | db.example.com:42345 |
| PRISMA_TRANSACTION_TIMEOUT | الحد الأقصى للوقت (بالمللي ثانية) الذي يمكن أن تستغرقه المعاملة قبل انتهاء المهلة. زِده للمعاملات طويلة التشغيل (مثل التحديثات المجمعة ذات المفاتيح الخارجية الكثيرة) | 5000 | - | 60000 |
| PRISMA_TRANSACTION_MAX_WAIT | الحد الأقصى للوقت (بالمللي ثانية) لانتظار الحصول على معاملة من التجمع | 2000 | - | 5000 |
-| BIG_TRANSACTION_TIMEOUT | مهلة المعاملات الداخلية الكبيرة (بالمللي ثانية)، مثل تصدير قواعد بيانات كبيرة | 600000 | - | 1200000 |
+| BIG_TRANSACTION_TIMEOUT | مهلة المعاملات الداخلية الكبيرة (بالمللي ثانية)، مثل تصدير مشاريع كبيرة | 600000 | - | 1200000 |
## الأسرار وتدويرها {#secrets-and-rotation}
diff --git a/de/api-doc/get-id.mdx b/de/api-doc/get-id.mdx
index cd218688..de02379a 100644
--- a/de/api-doc/get-id.mdx
+++ b/de/api-doc/get-id.mdx
@@ -14,11 +14,11 @@ Klicken Sie auf den Ziel-Space und kopieren Sie die Zeichenfolge, die in der URL
## BaseId
-Klicken Sie auf die Ziel-Base und kopieren Sie die Zeichenfolge, die in der URL mit „bse“ beginnt, Beispiel: `bseXXXXXXXXXX`
+Klicken Sie auf das Ziel-Projekt und kopieren Sie die Zeichenfolge, die in der URL mit „bse“ beginnt, Beispiel: `bseXXXXXXXXXX`
diff --git a/de/api-doc/oauth.mdx b/de/api-doc/oauth.mdx
index 9fdba91a..9825c1cb 100644
--- a/de/api-doc/oauth.mdx
+++ b/de/api-doc/oauth.mdx
@@ -33,7 +33,7 @@ Scopes legen fest, welche Aktionen Ihre OAuth-App ausführen kann. Die verfügba
| Ressource | Scopes |
|----------|--------|
| **App** | `app\|create`, `app\|read`, `app\|update`, `app\|delete` |
-| **Base** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
+| **Projekt** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
| **Tabelle** | `table\|create`, `table\|delete`, `table\|export`, `table\|import`, `table\|read`, `table\|update`, `table\|trash_read`, `table\|trash_update`, `table\|trash_reset` |
| **Ansicht** | `view\|create`, `view\|delete`, `view\|read`, `view\|update` |
| **Feld** | `field\|create`, `field\|delete`, `field\|read`, `field\|update` |
@@ -296,14 +296,14 @@ curl https://app.teable.ai/api/table/TABLE_ID/record \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-In der Regel besteht der erste Schritt nach dem Abrufen eines Tokens darin, alle Bases abzurufen, auf die der aktuelle Nutzer zugreifen kann:
+In der Regel besteht der erste Schritt nach dem Abrufen eines Tokens darin, alle Projekte abzurufen, auf die der aktuelle Nutzer zugreifen kann:
```bash
curl https://app.teable.ai/api/base/access/all \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Dieser Endpunkt gibt alle Bases zurück, für die der aktuelle Nutzer eine Zugriffsberechtigung hat. Sie können die `baseId` aus der Antwort für nachfolgende API-Aufrufe verwenden.
+Dieser Endpunkt gibt alle Projekte zurück, für die der aktuelle Nutzer eine Zugriffsberechtigung hat. Sie können die `baseId` aus der Antwort für nachfolgende API-Aufrufe verwenden.
## Zugriffstoken aktualisieren
diff --git a/de/api-doc/record/interface.mdx b/de/api-doc/record/interface.mdx
index 1a77c78a..2b232839 100644
--- a/de/api-doc/record/interface.mdx
+++ b/de/api-doc/record/interface.mdx
@@ -2,7 +2,7 @@
title: "Datensatzfeld-Schnittstelle"
---
-Ein Lookup-Feld ist kein spezifischer Feldtyp. Sie können jeden Feldtyp aus einer verknüpften Base nachschlagen. Der Typ eines Lookup-Felds wird durch das ursprüngliche Feld in der verknüpften Base bestimmt und verfügt über die Eigenschaft isLookup. Lookup-Felder können nicht bearbeitet werden.
+Ein Lookup-Feld ist kein spezifischer Feldtyp. Sie können jeden Feldtyp aus einem verknüpften Projekt nachschlagen. Der Typ eines Lookup-Felds wird durch das ursprüngliche Feld in dem verknüpften Projekt bestimmt und verfügt über die Eigenschaft isLookup. Lookup-Felder können nicht bearbeitet werden.
Alle Feldrückgabewerte können in bestimmten Fällen `isMultipleCellValue: true` enthalten:
diff --git a/de/api-doc/sql-query.mdx b/de/api-doc/sql-query.mdx
index 98642cee..6f8b59b2 100644
--- a/de/api-doc/sql-query.mdx
+++ b/de/api-doc/sql-query.mdx
@@ -11,12 +11,12 @@ Teable ermöglicht es Ihnen, über externe Tools für schreibgeschützte Abfrage
### Erstellen einer Datenbankverbindung
-1. **Eine Tabelle öffnen**: Öffnen Sie zunächst eine beliebige Tabelle in der Base, mit der Sie sich verbinden möchten.
-2. **Zur Designseite wechseln**: Klicken Sie auf das ⚙️-Symbol oben rechts, um zur Seite „Base-Design“ zu gelangen.
+1. **Eine Tabelle öffnen**: Öffnen Sie zunächst eine beliebige Tabelle im Projekt, mit dem Sie sich verbinden möchten.
+2. **Zur Designseite wechseln**: Klicken Sie auf das ⚙️-Symbol oben rechts, um zur Seite „Projekt-Design“ zu gelangen.
@@ -50,7 +50,7 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
**Hinweis:** Verwenden Sie in PostgreSQL doppelte Anführungszeichen `"` um Schema- und Tabellennamen, damit die Groß- und Kleinschreibung erhalten bleibt.
Zum Schreiben dieser Abfrage benötigen Sie drei Informationen:
-- **Schemaname (BaseId)**: Die mit `bse` beginnende Kennung der Base
+- **Schemaname (BaseId)**: Die mit `bse` beginnende Kennung des Projekts
- **Tabellenname**: Der physische Tabellenname in PostgreSQL
- **Feldnamen**: Die tatsächlichen Spaltennamen in der Datenbank
@@ -58,27 +58,27 @@ In den folgenden Abschnitten wird erläutert, wie Sie jede dieser Informationen
### Die BaseId (Schemaname) finden
-Jede Base in Teable entspricht einem **Schema** in PostgreSQL. Die BaseId ist der in SQL-Abfragen verwendete Schemaname.
+Jedes Projekt in Teable entspricht einem **Schema** in PostgreSQL. Die BaseId ist der in SQL-Abfragen verwendete Schemaname.
**Methode 1:** Sehen Sie sich die URL an – die mit `bse` beginnende Zeichenfolge ist die BaseId.
-**Methode 2:** In der Oberfläche „Base-Design“ ist der angezeigte Schemaname die BaseId.
+**Methode 2:** In der Oberfläche „Projekt-Design“ ist der angezeigte Schemaname die BaseId.
### Tabellennamen finden
-Tabellennamen in der Teable-Oberfläche werden nicht automatisch mit physischen Datenbanktabellennamen synchronisiert. Prüfen Sie in der Oberfläche „Base-Design“ den tatsächlichen Datenbanktabellennamen.
+Tabellennamen in der Teable-Oberfläche werden nicht automatisch mit physischen Datenbanktabellennamen synchronisiert. Prüfen Sie in der Oberfläche „Projekt-Design“ den tatsächlichen Datenbanktabellennamen.
diff --git a/de/api-doc/token.mdx b/de/api-doc/token.mdx
index 479e24c1..b00c334f 100644
--- a/de/api-doc/token.mdx
+++ b/de/api-doc/token.mdx
@@ -15,7 +15,7 @@ Wenn Sie eine mandantenfähige Integration für externe Nutzer erstellen, verwen
3. Fügen Sie Ihrem Token die passenden Berechtigungsbereiche hinzu.
-4. Legen Sie fest, auf welche Bases und Spaces der Token zugreifen kann.
+4. Legen Sie fest, auf welche Projekte und Spaces der Token zugreifen kann.
Nach der Erstellung wird Ihr Token nur einmal angezeigt. Wir empfehlen, ihn zu kopieren und an einem sicheren Ort aufzubewahren.
diff --git a/de/basic/admin-panel/announcements.mdx b/de/basic/admin-panel/announcements.mdx
index 5aacba6c..a015e776 100644
--- a/de/basic/admin-panel/announcements.mdx
+++ b/de/basic/admin-panel/announcements.mdx
@@ -15,7 +15,7 @@ Klicken Sie auf **Ankündigung veröffentlichen** und füllen Sie das Formular a
| Einstellung | Was sie steuert |
| --- | --- |
-| **Formular** | Wo die Ankündigung angezeigt wird: **Banner** oben in der App, **Toast** als vorübergehende Benachrichtigung, **Modal** als unterbrechender Dialog oder **Seitenleistenkarte** in den Seitenleisten von Space und Base. |
+| **Formular** | Wo die Ankündigung angezeigt wird: **Banner** oben in der App, **Toast** als vorübergehende Benachrichtigung, **Modal** als unterbrechender Dialog oder **Seitenleistenkarte** in den Seitenleisten von Space und Projekt. |
| **Stufe** | Der Ton, den Nutzer sehen: **Info**, **Wartung**, **Kritisch** oder **Behoben**. |
| Titel und **Text** | Der Text der Ankündigung. |
| **Beginnt um** / **Endet um** | Das Zeitfenster, in dem die Ankündigung zugestellt wird. Die Endzeit muss nach der Startzeit liegen. |
diff --git a/de/basic/admin-panel/audit-log.mdx b/de/basic/admin-panel/audit-log.mdx
index 0747e30e..67033f1f 100644
--- a/de/basic/admin-panel/audit-log.mdx
+++ b/de/basic/admin-panel/audit-log.mdx
@@ -11,9 +11,9 @@ Mit **Audit-Protokoll** können Administratoren Aktivitäten in der gesamten Ins
## Was Sie prüfen können
-Das Audit-Protokoll umfasst gängige Verwaltungs- und Kollaborationsaktivitäten, einschließlich Spaces, Bases, Tabellen, Ansichten, Feldern, Datensätzen, Freigaben, Einladungen, Zugriffstokens und der Berechtigungsmatrix.
+Das Audit-Protokoll umfasst gängige Verwaltungs- und Kollaborationsaktivitäten, einschließlich Spaces, Projekte, Tabellen, Ansichten, Feldern, Datensätzen, Freigaben, Einladungen, Zugriffstokens und der Berechtigungsmatrix.
-Jeder Protokolleintrag zeigt Operationszeit, Ausführenden, Aktionstyp, zugehörige Base oder zugehörigen Space sowie die Anfragequelle. Öffnen Sie einen Protokolleintrag, um seine Details anzuzeigen.
+Jeder Protokolleintrag zeigt Operationszeit, Ausführenden, Aktionstyp, zugehöriges Projekt oder zugehörigen Space sowie die Anfragequelle. Öffnen Sie einen Protokolleintrag, um seine Details anzuzeigen.
## Aktion für einen Ausführenden durchführen
@@ -30,10 +30,10 @@ Verwenden Sie die Filter oben auf der Seite, um die Protokollliste einzugrenzen:
- **Ausführenden auswählen**: Aktionen anzeigen, die von einem bestimmten Benutzer durchgeführt wurden.
- **Space auswählen**: Aktivitäten in einem bestimmten Space anzeigen.
-- **Base auswählen**: Aktivitäten für eine bestimmte Base anzeigen.
-- **Aktion auswählen**: Nach Operationstyp filtern, etwa Datensätze, Felder, Ansichten, Tabellen, Bases, Freigaben, Berechtigungsmatrix, Rollen der Berechtigungsmatrix, Spaces, Einladungen, Benutzer und Zugriffstokens.
+- **Projekt auswählen**: Aktivitäten für ein bestimmtes Projekt anzeigen.
+- **Aktion auswählen**: Nach Operationstyp filtern, etwa Datensätze, Felder, Ansichten, Tabellen, Projekte, Freigaben, Berechtigungsmatrix, Rollen der Berechtigungsmatrix, Spaces, Einladungen, Benutzer und Zugriffstokens.
-Wenn ein Benutzer, eine Base oder ein Space gelöscht wurde, bleibt der Eintrag im Protokoll erhalten und die Ressource wird als gelöscht markiert.
+Wenn ein Benutzer, ein Projekt oder ein Space gelöscht wurde, bleibt der Eintrag im Protokoll erhalten und die Ressource wird als gelöscht markiert.
## Große Protokolllisten durchsuchen
diff --git a/de/basic/admin-panel/computed-outbox.mdx b/de/basic/admin-panel/computed-outbox.mdx
index 9b45651f..c4f4a2ac 100644
--- a/de/basic/admin-panel/computed-outbox.mdx
+++ b/de/basic/admin-panel/computed-outbox.mdx
@@ -30,7 +30,7 @@ Standardmäßig ist jede Zeile eine Aufgabe, die beim erneuten Versuch durch Tea
So grenzen Sie die Liste ein:
- Klicken Sie auf die Zustandskacheln über der Tabelle, um nach Zustand zu filtern: **Wartend**, **Aktiv**, **Verzögert**, **Fehlgeschlagen**, **Abgeschlossen (aufbewahrt)** und weitere. Sie können mehrere zugleich auswählen; beim Überfahren einer Kachel wird erklärt, was der Zustand bedeutet.
-- Filtern Sie nach **Space**, **Base**, **Ursache** oder **Ergebnis**, suchen Sie nach einer Aufgabe, Base, einem Space oder Fehler oder legen Sie eine Mindestverarbeitungszeit fest, um langsame Aufgaben anzuzeigen.
+- Filtern Sie nach **Space**, **Projekt**, **Ursache** oder **Ergebnis**, suchen Sie nach einer Aufgabe, einem Projekt, einem Space oder Fehler oder legen Sie eine Mindestverarbeitungszeit fest, um langsame Aufgaben anzuzeigen.
- Klicken Sie auf eine Zeile, um **Berechnete Herkunft** zu öffnen: Zeitstempel der Warteschlange, Zustellungsverzögerung, Verarbeitungszeit, den vollständigen Fehlergrund einschließlich bereinigtem SQL für eine fehlgeschlagene Zustellung sowie die unten beschriebene Ausbreitungsdetailansicht.
**Abgeschlossen** bedeutet nicht, dass die Aufgabe Arbeit ausgeführt hat. Die Ergebnisplakette zeigt, was die Zustellung tatsächlich getan hat: **Verarbeitet** führte die Aufgabe aus, **Keine Aktion** stellte fest, dass nichts mehr zu tun war, **Verschoben** plante sie für später neu ein, und **Geparkt** bedeutet, dass ihr Umfang pausiert ist. Der Filter **Ergebnis** grenzt die Liste nach diesem Resultat ein und zeigt, wie viele Zustellungen jeweils darunter fallen. Wenn Sie **Abgeschlossen (aufbewahrt)** mit **Verarbeitet** kombinieren, bleiben nur die Zustellungen übrig, die die Aufgabe tatsächlich ausgeführt haben.
@@ -58,7 +58,7 @@ Wenn ein berechneter Wert falsch aussieht oder verspätet eingetroffen ist, öff
Die Anzahl **Fehlgeschlagen** und die **Anomaliewartung** zeigen unterschiedliche Arten von Problemen, daher können ihre Zahlen voneinander abweichen.
-**Anomaliewartung** sammelt Anomalien in Problemgruppen, jeweils eine pro Base, Quelltabelle und Fehler, damit eine einzelne Grundursache leicht zu erkennen ist. Prüfen Sie den Fehlergrund und beheben Sie das zugrunde liegende Problem, bevor Sie etwas wiederherstellen. Erweitern Sie eine Gruppe, um ihre Fehlerdetails und die enthaltenen Aufgaben zu lesen; diese Zeilen dienen der Prüfung, und die Wiederherstellung wird immer für die gesamte Gruppe durchgeführt.
+**Anomaliewartung** sammelt Anomalien in Problemgruppen, jeweils eine pro Projekt, Quelltabelle und Fehler, damit eine einzelne Grundursache leicht zu erkennen ist. Prüfen Sie den Fehlergrund und beheben Sie das zugrunde liegende Problem, bevor Sie etwas wiederherstellen. Erweitern Sie eine Gruppe, um ihre Fehlerdetails und die enthaltenen Aufgaben zu lesen; diese Zeilen dienen der Prüfung, und die Wiederherstellung wird immer für die gesamte Gruppe durchgeführt.
Die verfügbaren Aktionen einer Gruppe hängen von ihrem Typ ab:
@@ -70,7 +70,7 @@ Die verfügbaren Aktionen einer Gruppe hängen von ihrem Typ ab:
Nach der Wiederherstellung einer Gruppe meldet Teable, wie viele Aufgaben wiederhergestellt wurden, wie viele neu oder bereits eingereiht waren und wie viele zugestellt oder verschoben wurden. Worker verarbeiten die Gruppe dann unter den aktuellen Gleichzeitigkeits- und Aufgabenteilungslimits.
-Eine als **Base gelöscht** markierte Gruppe gehört zu einer Base, die nicht mehr existiert. Ihre Wiederherstellung würde sofort erneut fehlschlagen, daher ist **Gruppe verwerfen** die einzige angebotene Aktion.
+Eine als **Projekt gelöscht** markierte Gruppe gehört zu einem Projekt, das nicht mehr existiert. Ihre Wiederherstellung würde sofort erneut fehlschlagen, daher ist **Gruppe verwerfen** die einzige angebotene Aktion.
Das Verschieben einer Tabelle in den Papierkorb erzeugt hier keine Anomalien mehr. Eine berechnete Aufgabe, die weiterhin auf eine Tabelle im Papierkorb verweist, überspringt die Schritte, die sie lesen, beendet die Schritte, die auf aktive Tabellen zielen, und wird abgeschlossen.
@@ -101,9 +101,9 @@ Der Warteschlangenabschnitt verfügt über zwei Steuerelemente für Gleichzeitig
| Steuerelement | Was es begrenzt |
| --- | --- |
| **Gleichzeitigkeit pro Prozess** | Wie viele berechnete Aufgaben jeder Worker-Prozess gleichzeitig verarbeitet. |
-| **Beanspruchungslimits pro Base** | Wie viele berechnete Aufgaben gleichzeitig für eine Base (**Pro Base**) und für eine Quelltabelle darin (**Pro Seed-Tabelle**) ausgeführt werden. Beide haben standardmäßig den Wert 2 und akzeptieren Werte von 1 bis 16. |
+| **Beanspruchungslimits pro Projekt** | Wie viele berechnete Aufgaben gleichzeitig für ein Projekt (**Pro Projekt**) und für eine Quelltabelle darin (**Pro Seed-Tabelle**) ausgeführt werden. Beide haben standardmäßig den Wert 2 und akzeptieren Werte von 1 bis 16. |
-Erhöhen Sie die Beanspruchungslimits, wenn eine ausgelastete Base den Engpass bildet, und die Gleichzeitigkeit pro Prozess, wenn viele Bases gleichzeitig in die Warteschlange eingereiht sind.
+Erhöhen Sie die Beanspruchungslimits, wenn ein ausgelastetes Projekt den Engpass bildet, und die Gleichzeitigkeit pro Prozess, wenn viele Projekte gleichzeitig in die Warteschlange eingereiht sind.
Höhere Gleichzeitigkeit belastet Ihre Datenbank stärker. Spaces, die ihre Daten in einem [Datenbank-Mandanten](/de/basic/admin-panel/database-tenant) speichern, behalten die Umgebungsstandardwerte für die Beanspruchungslimits bei, da ihre Verbindungspools auf diese Werte ausgelegt sind.
diff --git a/de/basic/admin-panel/database-tenant.mdx b/de/basic/admin-panel/database-tenant.mdx
index 3af8bf95..8e322a8a 100644
--- a/de/basic/admin-panel/database-tenant.mdx
+++ b/de/basic/admin-panel/database-tenant.mdx
@@ -26,7 +26,7 @@ Ein Datenbank-Tenant ist nützlich, wenn ein bestimmter Kunde oder geschäftlich
Nein. Gemeint ist der Teable-Space, dessen Daten in dieser Datenbank gespeichert sind.
- Nein. Es ändert, wo Teable seine eigenen Space-Daten speichert und verwaltet. Sie stellen eine anderswo gehostete PostgreSQL-Datenbank bereit, und Teable erstellt und verwaltet dort seine eigenen Daten. Vorhandene Tabellen und Datensätze in dieser Datenbank werden nicht mit Teable verbunden oder automatisch als Bases importiert.
+ Nein. Es ändert, wo Teable seine eigenen Space-Daten speichert und verwaltet. Sie stellen eine anderswo gehostete PostgreSQL-Datenbank bereit, und Teable erstellt und verwaltet dort seine eigenen Daten. Vorhandene Tabellen und Datensätze in dieser Datenbank werden nicht mit Teable verbunden oder automatisch als Projekte importiert.
diff --git a/de/basic/admin-panel/multitenancy.mdx b/de/basic/admin-panel/multitenancy.mdx
index 5e02be61..d346ef7d 100644
--- a/de/basic/admin-panel/multitenancy.mdx
+++ b/de/basic/admin-panel/multitenancy.mdx
@@ -16,10 +16,10 @@ Eine Teable-Instanz kann mehrere Organisationstenants enthalten, jeweils mit sep
Teable-Instanz
├── Organisationstenant A
│ ├── Organisationsadministratoren, Mitglieder und Abteilungen
-│ └── Spaces, Bases und Einstellungen auf Organisationsebene
+│ └── Spaces, Projekte und Einstellungen auf Organisationsebene
├── Organisationstenant B
│ ├── Organisationsadministratoren, Mitglieder und Abteilungen
-│ └── Spaces, Bases und Einstellungen auf Organisationsebene
+│ └── Spaces, Projekte und Einstellungen auf Organisationsebene
└── Organisationstenant C
```
@@ -107,7 +107,7 @@ Jeder Instanznutzer außer einem gelöschten Nutzer kann als Organisationsadmini
| --- | --- |
| **Nutzer** | Nutzer in der aktuellen Organisation anzeigen und verwalten |
| **Organisation** | Abteilungen erstellen, verschieben, umbenennen und löschen sowie Abteilungsmitglieder verwalten |
-| **Space-Verwaltung** | Spaces zur Organisation hinzufügen oder daraus entfernen sowie die Anzahl der Spaces und Bases anzeigen |
+| **Space-Verwaltung** | Spaces zur Organisation hinzufügen oder daraus entfernen sowie die Anzahl der Spaces und Projekte anzeigen |
| **Authentifizierungseinstellungen** | Authentifizierungsanbieter von Drittanbietern für die Organisation konfigurieren |
| **Sicherheitseinstellungen** | E-Mail-Domains verifizieren, damit neue Nutzer mit diesen Domains der Organisation automatisch beitreten |
| **Instanzeinstellungen** | Organisationsname, automatischen Space-Zugriff und Abteilungsbereich ändern |
diff --git a/de/basic/admin-panel/skills.mdx b/de/basic/admin-panel/skills.mdx
index 25063360..fcf5b93c 100644
--- a/de/basic/admin-panel/skills.mdx
+++ b/de/basic/admin-panel/skills.mdx
@@ -9,7 +9,7 @@ Pfad: Admin-Panel → Skills
Verwenden Sie **Skills**, um Skills für die gesamte Instanz zu veröffentlichen. Ein hier hinzugefügter Skill ist in jeder Unterhaltung mit KI-Chat, App Builder und Bots verfügbar. Verwenden Sie ihn daher für Arbeitsweisen, die Ihre Organisation standardmäßig teilen sollte, etwa einen einheitlichen Schreibstil, eine Berichtskonvention oder einen gemeinsamen Integrationsprozess.
-Skills, die Benutzer an anderer Stelle hinzufügen, bleiben in ihrem eigenen Geltungsbereich. Siehe [KI-Chat](/de/basic/ai/ai-chat) für persönliche Skills sowie Skills auf Base- und Space-Ebene.
+Skills, die Benutzer an anderer Stelle hinzufügen, bleiben in ihrem eigenen Geltungsbereich. Siehe [KI-Chat](/de/basic/ai/ai-chat) für persönliche Skills sowie Skills auf Projekt- und Space-Ebene.
## Einen Skill hinzufügen
@@ -34,5 +34,5 @@ Die Liste gruppiert Skills nach Geltungsbereich und zeigt, woher jeder einzelne
## Wenn ein Name zweimal verwendet wird
-Ein hier veröffentlichter Skill ist der Instanzstandard. Wenn ein Skill auf Base-, Space-, persönlicher, App- oder Bot-Ebene denselben Namen verwendet, gilt für diese Unterhaltung der spezifischere Skill und der Instanz-Skill wird dort ignoriert.
+Ein hier veröffentlichter Skill ist der Instanzstandard. Wenn ein Skill auf Projekt-, Space-, persönlicher, App- oder Bot-Ebene denselben Namen verwendet, gilt für diese Unterhaltung der spezifischere Skill und der Instanz-Skill wird dort ignoriert.
diff --git a/de/basic/admin-panel/spaces.mdx b/de/basic/admin-panel/spaces.mdx
index b2f17345..eca8b30b 100644
--- a/de/basic/admin-panel/spaces.mdx
+++ b/de/basic/admin-panel/spaces.mdx
@@ -8,7 +8,7 @@ description: "Verwalten Sie alle Spaces in Ihrer Instanz über das Admin-Panel,
### Space-Informationen
* **Name des Space**: Der Anzeigename des Space
-* **Bases**: Die Gesamtzahl der im Space enthaltenen Bases
+* **Projekte**: Die Gesamtzahl der im Space enthaltenen Projekte
* **Mitwirkende**: Die Gesamtzahl der Benutzer mit Zugriff auf den Space
* **Erstellungszeit**: Wann der Space erstellt wurde
* **Automatischer Beitritt**: Ob der Space neuen Benutzern den automatischen Beitritt erlaubt
@@ -26,7 +26,7 @@ description: "Verwalten Sie alle Spaces in Ihrer Instanz über das Admin-Panel,
Wenn Sie einen Space über das Admin-Panel löschen:
* Wird der Space sofort als gelöscht markiert
-* Werden alle Bases und Daten im Space unzugänglich
+* Werden alle Projekte und Daten im Space unzugänglich
* Verlieren Mitwirkende den Zugriff auf den Space
* Kann dieser Vorgang nicht rückgängig gemacht werden
diff --git a/de/basic/admin-panel/table-query-ops.mdx b/de/basic/admin-panel/table-query-ops.mdx
index 0ce2c6ee..b89be24b 100644
--- a/de/basic/admin-panel/table-query-ops.mdx
+++ b/de/basic/admin-panel/table-query-ops.mdx
@@ -26,7 +26,7 @@ Die Seite öffnet sich mit der Tabellenliste. Die Statusschaltflächen oben trag
| **Nicht konfiguriert** | Tabellen ohne Suchabdeckung. |
| **Nicht verfügbar** | Tabellen, die derzeit keine indizierte Suche nutzen können. Die Zeile nennt den Grund. |
-Das Suchfeld akzeptiert Namen oder IDs von Tabellen, Bases und Spaces. Sortiert wird nach **Meiste langsame Abfragen** oder **Tabellenname**. Das **Beobachtungsfenster** umfasst die letzte Stunde oder 24 Stunden, und alle Beobachtungswerte der Liste folgen diesem Fenster. Beobachtungen werden 2 Tage aufbewahrt; ältere Daten erscheinen nicht mehr in der Liste.
+Das Suchfeld akzeptiert Namen oder IDs von Tabellen, Projekten und Spaces. Sortiert wird nach **Meiste langsame Abfragen** oder **Tabellenname**. Das **Beobachtungsfenster** umfasst die letzte Stunde oder 24 Stunden, und alle Beobachtungswerte der Liste folgen diesem Fenster. Beobachtungen werden 2 Tage aufbewahrt; ältere Daten erscheinen nicht mehr in der Liste.
Jede Zeile nennt geschätzte Zeilenzahl und Größe der Tabelle, Anfragen und langsame Abfragen im Fenster, die aktuelle Suchmethode samt Feldabdeckung, die Anzahl der Filter-/Sortierindizes sowie offene Empfehlungen und aktive Aufgaben. Ein Klick auf den Tabellennamen öffnet die Detailansicht.
diff --git a/de/basic/admin-panel/template-admin.mdx b/de/basic/admin-panel/template-admin.mdx
index 5f908abe..fbc2b58d 100644
--- a/de/basic/admin-panel/template-admin.mdx
+++ b/de/basic/admin-panel/template-admin.mdx
@@ -1,6 +1,6 @@
---
title: "Vorlagenverwaltung"
-description: "Verwalten Sie Workflow-Vorlagen für Ihre Organisation, damit Benutzer schnell mit vorkonfigurierten Bases starten können."
+description: "Verwalten Sie Workflow-Vorlagen für Ihre Organisation, damit Benutzer schnell mit vorkonfigurierten Projekte starten können."
---
Verfügbar ab dem selbst gehosteten Business-Plan
@@ -16,12 +16,12 @@ In der Oberfläche zur Vorlagenverwaltung können Sie Vorlagen erstellen und kon
* **Markdown-Beschreibung**: Detaillierte Beschreibung mit Unterstützung für Rich-Text-Formatierung
* **Kategorie**: Gruppieren Sie Vorlagen nach Geschäftsszenarien (z. B. Personalwesen, Vertrieb, Entwicklung)
* **System**: Gibt an, ob die Vorlage eine offizielle Systemvorlage ist
-* **Quelle**: Die ursprüngliche Base, die zum Erstellen dieser Vorlage verwendet wurde
+* **Quelle**: Die ursprüngliche Projekt, die zum Erstellen dieser Vorlage verwendet wurde
#### Vorlagenoperationen
* **Neue Vorlage**: Eine neue Vorlagenkonfiguration erstellen
-* **Snapshot veröffentlichen**: Den aktuellen Zustand der Quell-Base erfassen. Sie müssen einen Snapshot veröffentlichen, bevor Sie die Vorlage auflisten können.
+* **Snapshot veröffentlichen**: Den aktuellen Zustand der Quell-Projekt erfassen. Sie müssen einen Snapshot veröffentlichen, bevor Sie die Vorlage auflisten können.
* **Status (Veröffentlichen)**: Umschalten, um die Vorlage im Vorlagencenter aufzulisten bzw. aus der Liste zu entfernen. Erfordert einen Namen, eine Beschreibung und einen Snapshot.
* **Anheften**: Wichtige Vorlagen oben in der Liste anheften
* **Löschen**: Die Vorlagenkonfiguration entfernen
@@ -31,8 +31,8 @@ In der Oberfläche zur Vorlagenverwaltung können Sie Vorlagen erstellen und kon
Selbst gehostete Benutzer können Vorlagen aus der offiziellen Teable Cloud importieren:
1. **Herunterladen**: Laden Sie die `.tea`-Datei aus dem [offiziellen Vorlagencenter](https://teable.ai/templates) herunter
-2. **Importieren**: Importieren Sie die `.tea`-Datei als neue Base in Ihren Space
+2. **Importieren**: Importieren Sie die `.tea`-Datei als neue Projekt in Ihren Space
3. **Vorlage erstellen**: Gehen Sie zu Vorlagenverwaltung > Neue Vorlage
-4. **Quelle auswählen**: Wählen Sie die importierte Base als Quelle aus
+4. **Quelle auswählen**: Wählen Sie die importierte Projekt als Quelle aus
5. **Veröffentlichen**: Konfigurieren Sie die Details, veröffentlichen Sie den Snapshot und aktivieren Sie den Status
diff --git a/de/basic/ai/ai-chat.mdx b/de/basic/ai/ai-chat.mdx
index 4b6c6b59..5e0f412a 100644
--- a/de/basic/ai/ai-chat.mdx
+++ b/de/basic/ai/ai-chat.mdx
@@ -35,7 +35,7 @@ Wenn Sie einen langen Block mit Klartext einfügen, wandelt Teable ihn in einen
- **Meine Secrets**: Öffnen Sie **+** → **Mehr** → **Meine Secrets**, um API-Schlüssel oder andere Anmeldedaten unter **Einstellungen** → **Integrationen** zu hinterlegen. Die Werte gehören Ihnen, der KI-Chat kann sie zur Laufzeit als Umgebungsvariablen lesen, und Sie können sie einzelnen Apps und Automatisierungen freigeben. Siehe [Zugangsdaten und Integrationen](/de/basic/credential).
- **Anfragen nach Zugangsdaten**: Wenn die KI ein Drittanbieterkonto oder ein Secret benötigt, heftet sie eine entsprechende Karte an die Unterhaltung. Wählen Sie **Mein Konto verbinden** für einen OAuth-Vorgang oder geben Sie vorhandene Zugangsdaten frei. Mit **Überspringen** stellen Sie sie nicht bereit; die KI fährt mit den Teilen fort, die sie auch ohne erledigen kann.
- **Scraper**: Öffnen Sie das Menü **+** und wählen Sie **Scraper**, dann eine Plattform und einen Datentyp. Es gibt zwei Arten von Einträgen: Die einen scrapen einen eingefügten Link, etwa **Persönliches Profil** bei LinkedIn oder **Produktbewertungen** bei Amazon; die anderen suchen nach Stichwort, Hashtag oder Name, etwa **Videosuche** bei TikTok oder **Beiträge eines Subreddits** bei Reddit. Teable füllt die passende Anweisung in der Chat-Eingabe vor und lässt den zu ergänzenden Teil am Ende offen. **Beliebige Webseite** nimmt einen eingefügten Link direkt entgegen.
-- **Skills**: Öffnen Sie das Menü **+** und wählen Sie **Skills**, um Skills im aktuellen Chat zu importieren, zu aktivieren, zu deaktivieren oder auszuprobieren. Wählen Sie beim Import aus, wer ihn verwenden kann: **Persönlich** beschränkt ihn auf Sie selbst, **Base** gibt ihn Mitarbeitenden in dieser Base und **Space** allen Personen in diesem Space. Geben Sie `/` im Eingabefeld ein, um einen aktivierten Skill auszuwählen. Informationen zum Verbinden oder Migrieren eines externen Systems finden Sie unter [Alles verbinden und migrieren](/de/basic/ai/connect-everything).
+- **Skills**: Öffnen Sie das Menü **+** und wählen Sie **Skills**, um Skills im aktuellen Chat zu importieren, zu aktivieren, zu deaktivieren oder auszuprobieren. Wählen Sie beim Import aus, wer ihn verwenden kann: **Persönlich** beschränkt ihn auf Sie selbst, **Projekt** gibt ihn Mitarbeitenden in diesem Projekt und **Space** allen Personen in diesem Space. Geben Sie `/` im Eingabefeld ein, um einen aktivierten Skill auszuwählen. Informationen zum Verbinden oder Migrieren eines externen Systems finden Sie unter [Alles verbinden und migrieren](/de/basic/ai/connect-everything).
- **Kontextnutzung**: Der Ring neben dem Eingabefeld zeigt, wie viel des Kontextfensters des Modells die Unterhaltung derzeit nutzt. Klicken Sie darauf, um den Prozentsatz und die Token-Anzahlen anzuzeigen. Wenn der Kontext voll ist, verdichtet Teable die Unterhaltung; starten Sie stattdessen einen neuen Chat, wenn Sie einen sauberen Kontext wünschen.
- **Dateien verwalten**: Öffnen Sie **+** → **Mehr** → **Dateien verwalten**, um Dateien in der Sandbox des aktuellen Chats anzuzeigen. Sie können unterstützte Dateien in der Vorschau anzeigen, Dateien herunterladen oder nicht mehr benötigte Dateien und Ordner löschen. Eine Unterhaltung muss bestehen, bevor ihre Dateien verwaltet werden können.
- **Nachrichtenwarteschlange**: Das Senden einer weiteren Nachricht, während die KI arbeitet, unterbricht sie nicht. Die Nachricht wartet in einer Warteschlange über dem Eingabefeld und wird gesendet, wenn der aktuelle Durchlauf endet. Elemente in der Warteschlange behalten dieselben Chips für Tabelle, Ansicht, Anhang und Auswahl wie die Chat-Eingabe; **Entfernen** verwirft eines, **...** → **Nachricht bearbeiten** legt es zurück in das Eingabefeld, und ein reines Textelement bietet zusätzlich **Steuern**, um seinen Text an den laufenden Durchlauf zu übergeben, statt zu warten.
@@ -129,9 +129,9 @@ Wenn eine Antwort mehrere Dateien gleichzeitig enthält, verwenden Sie unter den
### Erinnerung
-Die Erinnerung speichert Informationen, an deren Speicherung Sie Cuppy ausdrücklich bitten. Die Erinnerung ist nach Benutzer und Base abgegrenzt: Jede Person hat in jeder Base einen unabhängigen Erinnerungskontext, und eine in einer anderen Base gespeicherte Erinnerung erscheint nicht automatisch in der aktuellen.
+Die Erinnerung speichert Informationen, an deren Speicherung Sie Cuppy ausdrücklich bitten. Die Erinnerung ist nach Benutzer und Projekt abgegrenzt: Jede Person hat in jedem Projekt einen unabhängigen Erinnerungskontext, und eine in einem anderen Projekt gespeicherte Erinnerung erscheint nicht automatisch im aktuellen Projekt.
-- Erinnerung in der aktuellen Base speichern
+- Erinnerung in dem aktuellen Projekt speichern
Sagen Sie in der Unterhaltung, woran Cuppy sich erinnern soll:
@@ -139,12 +139,12 @@ Sagen Sie in der Unterhaltung, woran Cuppy sich erinnern soll:
Bitte merke dir xxx.
```
-- Erinnerung aus einer anderen Base wiederverwenden
+- Erinnerung aus einem anderen Projekt wiederverwenden
-Bitten Sie Cuppy, eine andere Base zu lesen und die relevanten Teile in der aktuellen Base zu speichern:
+Bitten Sie Cuppy, ein anderes Projekt zu lesen und die relevanten Teile in dem aktuellen Projekt zu speichern:
```text
-Cuppy, bitte lies die Erinnerung für die Base-ID bsexxxxxxxxxxxx und speichere die relevante Erinnerung in dieser aktuellen Base.
+Cuppy, bitte lies die Erinnerung für die Projekt-ID bsexxxxxxxxxxxx und speichere die relevante Erinnerung in diesem aktuellen Projekt.
```
### Lange Aufgaben bearbeiten
@@ -228,8 +228,8 @@ Artefakte sind für die Person, die sie erstellt hat, privat. Verwenden Sie dahe
Geben Sie `@` in das Eingabefeld ein und wählen Sie den Knoten aus, auf den der KI-Chat verweisen soll. Bei Auswahlen in der Rasteransicht können Sie auch Zeilen, Spalten, eine einzelne Zelle oder einen Zellbereich auswählen und dann im Kontextmenü **Zum Chat hinzufügen** verwenden.
-
- Ja. Die KI ist nicht auf die Base beschränkt, zu der der Chat gehört; sie kann andere Bases, auf die Sie Zugriff haben, suchen und darin arbeiten. Nennen Sie die Base in Ihrer Anfrage, zum Beispiel „Vergleiche diese Tabelle mit der Bestelltabelle in der Sales-Base“. `@` listet nur Knoten in der aktuellen Base auf, und alles, worauf Sie nicht anders verweisen, geschieht weiterhin in der eigenen Base des Chats.
+
+ Ja. Die KI ist nicht auf das Projekt beschränkt, zu dem der Chat gehört; sie kann andere Projekte, auf die Sie Zugriff haben, suchen und darin arbeiten. Nennen Sie das Projekt in Ihrer Anfrage, zum Beispiel „Vergleiche diese Tabelle mit der Bestelltabelle im Sales-Projekt“. `@` listet nur Knoten in dem aktuellen Projekt auf, und alles, worauf Sie nicht anders verweisen, geschieht weiterhin in dem eigenen Projekt des Chats.
@@ -239,8 +239,8 @@ Artefakte sind für die Person, die sie erstellt hat, privat. Verwenden Sie dahe
Standardmäßig nicht. Nur Sie können Ihre eigenen Artefakte öffnen. Aktivieren Sie in der Ansicht **Freigabe aktivieren** und senden Sie den Link. Wählen Sie **Space-Mitglieder**, wenn das Artefakt innerhalb des Space bleiben soll.
-
- Nein. Die Erinnerung ist nach Benutzer und Base abgegrenzt. Wenn Sie eine Erinnerung aus einer anderen Base wiederverwenden möchten, bitten Sie Cuppy, die Erinnerung dieser Base zu lesen und die relevanten Teile in der aktuellen Base zu speichern.
+
+ Nein. Die Erinnerung ist nach Benutzer und Projekt abgegrenzt. Wenn Sie eine Erinnerung aus einem anderen Projekt wiederverwenden möchten, bitten Sie Cuppy, die Erinnerung dieses Projekts zu lesen und die relevanten Teile in dem aktuellen Projekt zu speichern.
@@ -268,11 +268,11 @@ Artefakte sind für die Person, die sie erstellt hat, privat. Verwenden Sie dahe
- Öffnen Sie das Menü **+** und wählen Sie **Skills**, um Skills zu importieren oder zu verwalten, oder geben Sie `/` in das Eingabefeld ein, um einen aktivierten Skill auszuwählen. Wählen Sie beim Import aus, wer den Skill verwenden kann: persönlich für Ihre eigenen Chats, Base, wenn Mitarbeitende in derselben Base ihn benötigen, und Space, wenn ihn alle Personen im Space verwenden sollen. Personen, die die Base verwalten können, können Base-Skills hinzufügen; Space-Eigentümer und -Ersteller können Space-Skills hinzufügen. Wenn der KI-Chat eine `.skill`-Datei zeigt, verwenden Sie auf der Dateikarte **Installieren**, um sie hinzuzufügen.
+ Öffnen Sie das Menü **+** und wählen Sie **Skills**, um Skills zu importieren oder zu verwalten, oder geben Sie `/` in das Eingabefeld ein, um einen aktivierten Skill auszuwählen. Wählen Sie beim Import aus, wer den Skill verwenden kann: persönlich für Ihre eigenen Chats, Projekt, wenn Mitarbeitende in demselben Projekt ihn benötigen, und Space, wenn ihn alle Personen im Space verwenden sollen. Personen, die das Projekt verwalten können, können Projekt-Skills hinzufügen; Space-Eigentümer und -Ersteller können Space-Skills hinzufügen. Wenn der KI-Chat eine `.skill`-Datei zeigt, verwenden Sie auf der Dateikarte **Installieren**, um sie hinzuzufügen.
- Es ist immer nur eine Version wirksam, und die gemeinsam genutzte Teamversion hat Vorrang vor einer persönlichen Kopie: Ein Base-Skill schlägt einen Space-Skill, und ein Space-Skill schlägt einen persönlichen. In einer App- oder Bot-Unterhaltung hat der für diese App oder diesen Bot hinzugefügte Skill Vorrang. Um alle auf eine neue Version umzustellen, aktualisieren Sie die Kopie in der Base oder im Space.
+ Es ist immer nur eine Version wirksam, und die gemeinsam genutzte Teamversion hat Vorrang vor einer persönlichen Kopie: Ein Projekt-Skill schlägt einen Space-Skill, und ein Space-Skill schlägt einen persönlichen. In einer App- oder Bot-Unterhaltung hat der für diese App oder diesen Bot hinzugefügte Skill Vorrang. Um alle auf eine neue Version umzustellen, aktualisieren Sie die Kopie in dem Projekt oder im Space.
diff --git a/de/basic/ai/app-builder.mdx b/de/basic/ai/app-builder.mdx
index 892f68b8..306dbfb2 100644
--- a/de/basic/ai/app-builder.mdx
+++ b/de/basic/ai/app-builder.mdx
@@ -5,21 +5,21 @@ description: Verwandeln Sie Ihre Daten mit KI in individuelle Webanwendungen.
In allen Cloud-Plänen verfügbar; für Self-Hosted ist Business oder höher erforderlich.
-Mit dem Teable App-Builder können Sie Ihre Datenbanken ohne Programmierung in voll funktionsfähige, individuelle Webanwendungen verwandeln. Durch die Kombination der Leistungsfähigkeit Ihrer Datenstruktur mit KI-gestütztem Design können Sie in wenigen Minuten interne Tools, Kundenportale und Daten-Dashboards erstellen.
+Mit dem Teable App-Builder können Sie Ihre Projekte ohne Programmierung in voll funktionsfähige, individuelle Webanwendungen verwandeln. Durch die Kombination der Leistungsfähigkeit Ihrer Datenstruktur mit KI-gestütztem Design können Sie in wenigen Minuten interne Tools, Kundenportale und Daten-Dashboards erstellen.
## Überblick
Der App-Builder folgt einem „Prompt-zu-App“-Workflow. Sie beschreiben, was Sie möchten, und die KI erstellt die Anwendungsstruktur, Seiten und Logik für Sie. Anschließend können Sie jedes Detail mit dem visuellen Editor oder Code optimieren.
-Verwenden Sie den App-Builder, um individuelle Oberflächen und eigenständige Apps zu erstellen. Für interaktive Datenanalysen und Ad-hoc-Fragen innerhalb der Datenbank verwenden Sie [KI-Chat](/de/basic/ai/ai-chat).
+Verwenden Sie den App-Builder, um individuelle Oberflächen und eigenständige Apps zu erstellen. Für interaktive Datenanalysen und Ad-hoc-Fragen innerhalb des Projekts verwenden Sie [KI-Chat](/de/basic/ai/ai-chat).
## Eine App erstellen
Es gibt zwei Hauptwege, eine App zu erstellen:
-1. **Aus einer Base**: Klicken Sie in einer beliebigen Base auf „App erstellen“, um eine mit Ihren aktuellen Daten verknüpfte Anwendung zu generieren.
+1. **Aus einem Projekt**: Klicken Sie in einem beliebigen Projekt auf „App erstellen“, um eine mit Ihren aktuellen Daten verknüpfte Anwendung zu generieren.
2. **Aus dem Chat**: Öffnen Sie KI-Chat und sagen Sie „Erstelle eine CRM-App für diese Kundentabelle“.
## Die Oberfläche des App-Editors
@@ -37,7 +37,7 @@ Die Kommandozentrale für Ihre App.
- **Bearbeitung in natürlicher Sprache**: Beschreiben Sie Änderungen wie *„Mache die Kopfzeile blau“* oder *„Füge ein Übermittlungsformular für neue Datensätze hinzu“*.
- **Automatisches Routing**: Die KI versteht, auf welche Komponente oder Seite Sie sich beziehen, und ändert sie direkt.
- **Integrationen**: Wenn die App-Aufgabe Zugriff auf ein Drittanbieter-Konto benötigt, kann der App-Builder im Chat-Bereich eine Karte wie **Slack verbinden** anzeigen. Klicken Sie auf **Verbinden**, um sich per OAuth zu autorisieren. Klicken Sie auf **Überspringen**, um diese Autorisierung abzubrechen; die KI fährt mit den Teilen fort, die sie ohne diese Verbindung abschließen kann.
-- **Skills**: Öffnen Sie das Menü **+** und wählen Sie **Skills**, um Skills für diese App-Unterhaltung zu verwalten. Ein hier hinzugefügter Skill ist nur für die aktuelle App verfügbar; die mit der Base und dem Space der App geteilten Skills können hier ebenfalls verwendet werden. Geben Sie `/` in das Eingabefeld ein, um einen aktivierten Skill auszuwählen.
+- **Skills**: Öffnen Sie das Menü **+** und wählen Sie **Skills**, um Skills für diese App-Unterhaltung zu verwalten. Ein hier hinzugefügter Skill ist nur für die aktuelle App verfügbar; die mit dem Projekt und dem Space der App geteilten Skills können hier ebenfalls verwendet werden. Geben Sie `/` in das Eingabefeld ein, um einen aktivierten Skill auszuwählen.
- **Dateien verwalten**: Öffnen Sie **+** → **Mehr** → **Dateien verwalten**, um Dateien in der App-Sandbox anzuzeigen. Verwenden Sie dies, um unterstützte Dateien in der Vorschau anzuzeigen, generierte Dateien herunterzuladen oder nicht mehr benötigte Dateien und Ordner zu löschen.
- **Unterhaltung löschen**: Wenn die aktuelle Unterhaltung vom Thema abgekommen ist, klicken Sie unten rechts im Bereich auf **Chat löschen**, um eine neue Sitzung zu beginnen. Dadurch wird der Chatverlauf der aktuellen Unterhaltung gelöscht, nicht jedoch die App selbst. Bei der ersten Verwendung wird eine Bestätigung angezeigt, und Sie können festlegen, dass sie beim nächsten Mal nicht wieder angezeigt wird.
diff --git a/de/basic/ai/connect-everything/migrate-airtable.mdx b/de/basic/ai/connect-everything/migrate-airtable.mdx
index 58ec5575..d4aa0f03 100644
--- a/de/basic/ai/connect-everything/migrate-airtable.mdx
+++ b/de/basic/ai/connect-everything/migrate-airtable.mdx
@@ -13,7 +13,7 @@ Geben Sie im [**Teable KI-Chat**](/de/basic/ai/ai-chat) `/` ein, wählen Sie die
## Migration starten
1. Erstellen Sie ein [persönliches Airtable-Zugriffstoken](https://airtable.com/create/tokens) mit Zugriff auf die Bases, die Sie migrieren möchten.
-2. Öffnen Sie die Ziel-Base in Teable und starten Sie den KI-Chat.
+2. Öffnen Sie das Ziel-Projekt in Teable und starten Sie den KI-Chat.
3. Geben Sie `/` ein, wählen Sie **Alles verbinden** aus und geben Sie das Token an.
4. Bitten Sie die Teable KI, die Airtable-Base zu migrieren, und prüfen Sie anschließend das Ergebnis.
diff --git a/de/basic/ai/connect-everything/migrate-baserow.mdx b/de/basic/ai/connect-everything/migrate-baserow.mdx
index 06eb74f8..1094de0e 100644
--- a/de/basic/ai/connect-everything/migrate-baserow.mdx
+++ b/de/basic/ai/connect-everything/migrate-baserow.mdx
@@ -13,7 +13,7 @@ Verwenden Sie **Alles verbinden** im [Teable KI-Chat](/de/basic/ai/ai-chat), um
## Migration starten
1. Kopieren Sie die URL der Baserow-Instanz und erstellen Sie ein [Baserow-Datenbanktoken](https://baserow.io/user-docs/personal-api-tokens) mit Lesezugriff auf die Quelltabellen.
-2. Öffnen Sie die Ziel-Base in Teable und starten Sie den KI-Chat.
+2. Öffnen Sie das Ziel-Projekt in Teable und starten Sie den KI-Chat.
3. Geben Sie `/` ein, wählen Sie **Alles verbinden** aus und geben Sie die Instanz-URL sowie das Datenbanktoken an.
4. Bitten Sie die Teable KI, die Baserow-Datenbank zu migrieren, und prüfen Sie anschließend das Ergebnis.
diff --git a/de/basic/ai/connect-everything/migrate-clickup.mdx b/de/basic/ai/connect-everything/migrate-clickup.mdx
index a9c6f9ac..47169274 100644
--- a/de/basic/ai/connect-everything/migrate-clickup.mdx
+++ b/de/basic/ai/connect-everything/migrate-clickup.mdx
@@ -16,7 +16,7 @@ Geben Sie im [**Teable KI-Chat**](/de/basic/ai/ai-chat) `/` ein, wählen Sie **A
## Migration starten
1. Öffnen Sie in ClickUp **Einstellungen → Apps** und kopieren Sie anschließend Ihr persönliches API-Token. Weitere Informationen finden Sie im ClickUp-[Leitfaden zur Authentifizierung](https://developer.clickup.com/docs/authentication).
-2. Öffnen Sie die Ziel-Base in Teable und starten Sie den KI-Chat.
+2. Öffnen Sie das Ziel-Projekt in Teable und starten Sie den KI-Chat.
3. Geben Sie `/` ein, wählen Sie **Alles verbinden** aus und geben Sie das persönliche API-Token an.
4. Bitten Sie die Teable KI, die zugänglichen ClickUp-Workspaces zu migrieren und die Projektansichten, Dashboards und Automatisierungen zu erstellen, die Ihr Team benötigt.
diff --git a/de/basic/ai/connect-everything/migrate-jira.mdx b/de/basic/ai/connect-everything/migrate-jira.mdx
index c9bdbfc4..1769153a 100644
--- a/de/basic/ai/connect-everything/migrate-jira.mdx
+++ b/de/basic/ai/connect-everything/migrate-jira.mdx
@@ -16,7 +16,7 @@ Geben Sie im [**Teable KI-Chat**](/de/basic/ai/ai-chat) `/` ein, wählen Sie **A
## Migration starten
1. Erstellen Sie ein [Atlassian-API-Token](https://id.atlassian.com/manage-profile/security/api-tokens) für ein Konto mit Zugriff auf die Jira-Projekte, die Sie migrieren möchten. Weitere Informationen finden Sie bei Atlassian unter [Basic Auth für REST-APIs](https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/).
-2. Öffnen Sie die Ziel-Base in Teable und starten Sie den KI-Chat.
+2. Öffnen Sie das Ziel-Projekt in Teable und starten Sie den KI-Chat.
3. Geben Sie `/` ein, wählen Sie **Alles verbinden** aus und geben Sie die URL der Jira-Cloud-Website, die Konto-E-Mail-Adresse und das API-Token an.
4. Bitten Sie die Teable KI, die zugänglichen Jira-Projekte zu migrieren und die Projektansichten, Dashboards und Automatisierungen zu erstellen, die Ihr Team benötigt.
diff --git a/de/basic/ai/connect-everything/migrate-monday.mdx b/de/basic/ai/connect-everything/migrate-monday.mdx
index c19cfe33..d9c81100 100644
--- a/de/basic/ai/connect-everything/migrate-monday.mdx
+++ b/de/basic/ai/connect-everything/migrate-monday.mdx
@@ -16,7 +16,7 @@ Geben Sie im [**Teable KI-Chat**](/de/basic/ai/ai-chat) `/` ein, wählen Sie **A
## Migration starten
1. Öffnen Sie in monday.com Ihr Profilmenü, wählen Sie **Entwickler** und kopieren Sie Ihr persönliches API-Token. Weitere Informationen finden Sie im monday.com-[Leitfaden zur API-Authentifizierung](https://developer.monday.com/api-reference/docs/authentication).
-2. Öffnen Sie die Ziel-Base in Teable und starten Sie den KI-Chat.
+2. Öffnen Sie das Ziel-Projekt in Teable und starten Sie den KI-Chat.
3. Geben Sie `/` ein, wählen Sie **Alles verbinden** aus und geben Sie das persönliche API-Token an.
4. Bitten Sie die Teable KI, die zugänglichen monday.com-Workspaces zu migrieren und die Projektansichten, Dashboards und Automatisierungen zu erstellen, die Ihr Team benötigt.
diff --git a/de/basic/ai/connect-everything/migrate-nocodb.mdx b/de/basic/ai/connect-everything/migrate-nocodb.mdx
index d2bbc3b4..9a3b719b 100644
--- a/de/basic/ai/connect-everything/migrate-nocodb.mdx
+++ b/de/basic/ai/connect-everything/migrate-nocodb.mdx
@@ -13,7 +13,7 @@ Verwenden Sie **Alles verbinden** im [Teable KI-Chat](/de/basic/ai/ai-chat), um
## Migration starten
1. Kopieren Sie die URL der NocoDB-Instanz und erstellen Sie ein [NocoDB-API-Token](https://nocodb.com/docs/product-docs/account-settings/api-tokens) mit Zugriff auf die Quell-Base.
-2. Öffnen Sie die Ziel-Base in Teable und starten Sie den KI-Chat.
+2. Öffnen Sie das Ziel-Projekt in Teable und starten Sie den KI-Chat.
3. Geben Sie `/` ein, wählen Sie **Alles verbinden** aus und geben Sie die Instanz-URL sowie das API-Token an.
4. Bitten Sie die Teable KI, die NocoDB-Base zu migrieren, und prüfen Sie anschließend das Ergebnis.
diff --git a/de/basic/ai/connect-everything/migrate-smartsheet.mdx b/de/basic/ai/connect-everything/migrate-smartsheet.mdx
index 07893b5d..6229d50f 100644
--- a/de/basic/ai/connect-everything/migrate-smartsheet.mdx
+++ b/de/basic/ai/connect-everything/migrate-smartsheet.mdx
@@ -16,7 +16,7 @@ Geben Sie im [**Teable KI-Chat**](/de/basic/ai/ai-chat) `/` ein, wählen Sie **A
## Migration starten
1. Öffnen Sie in Smartsheet **Konto → Persönliche Einstellungen → API-Zugriff** und generieren Sie anschließend ein Zugriffstoken. Weitere Informationen finden Sie im Smartsheet-[Leitfaden für den Einstieg in die API](https://developers.smartsheet.com/api/smartsheet/guides/getting-started).
-2. Öffnen Sie die Ziel-Base in Teable und starten Sie den KI-Chat.
+2. Öffnen Sie das Ziel-Projekt in Teable und starten Sie den KI-Chat.
3. Geben Sie `/` ein, wählen Sie **Alles verbinden** aus und geben Sie das Zugriffstoken sowie die Kontoumgebung an: Standard, Regions Europe oder Gov.
4. Bitten Sie die Teable KI, die zugänglichen Smartsheet-Workspaces zu migrieren und die Projektansichten, Dashboards und Automatisierungen zu erstellen, die Ihr Team benötigt.
diff --git a/de/basic/ai/connect-everything/migrate-smartsuite.mdx b/de/basic/ai/connect-everything/migrate-smartsuite.mdx
index f198a218..1d9755a7 100644
--- a/de/basic/ai/connect-everything/migrate-smartsuite.mdx
+++ b/de/basic/ai/connect-everything/migrate-smartsuite.mdx
@@ -13,7 +13,7 @@ Verwenden Sie **Alles verbinden** im [Teable KI-Chat](/de/basic/ai/ai-chat), um
## Migration starten
1. Rufen Sie Ihren [SmartSuite-API-Schlüssel und Ihre Workspace-ID](https://help.smartsuite.com/en/articles/6096587-retrieving-your-api-key-and-workspace-id) ab.
-2. Öffnen Sie die Ziel-Base in Teable und starten Sie den KI-Chat.
+2. Öffnen Sie das Ziel-Projekt in Teable und starten Sie den KI-Chat.
3. Geben Sie `/` ein, wählen Sie **Alles verbinden** aus und geben Sie den API-Schlüssel sowie die Workspace-ID an.
4. Bitten Sie die Teable KI, die SmartSuite-Lösung zu migrieren, und prüfen Sie anschließend das Ergebnis.
diff --git a/de/basic/ai/overview.mdx b/de/basic/ai/overview.mdx
index 4a8ea2d8..7078f2ac 100644
--- a/de/basic/ai/overview.mdx
+++ b/de/basic/ai/overview.mdx
@@ -45,7 +45,7 @@ Teable integriert leistungsstarke KI-Funktionen in die gesamte Plattform, damit
1. **KI aktivieren** (nur Self-Hosted) – Teable Cloud enthält einsatzbereite integrierte KI. Nutzer selbst gehosteter Instanzen sollten zuerst die [KI-Einstellungen](/de/basic/admin-panel/ai-setting) abschließen. Wenn Sie eigene Modelle verbinden möchten, fahren Sie mit [Benutzerdefiniertes KI-Modell](/de/basic/ai/custom-model) fort.
2. **KI-Chat verwenden** – Stellen Sie Fragen zu Ihren Daten oder generieren Sie Diagramme.
-3. **Apps erstellen** – Verwandeln Sie Ihre Base mit einem einfachen Prompt in eine Web-App.
+3. **Apps erstellen** – Verwandeln Sie Ihr Projekt mit einem einfachen Prompt in eine Web-App.
4. **KI-Felder erstellen** – Fügen Sie KI-gestützte Felder hinzu, um Ihre Daten automatisch zu verarbeiten.
5. **Automatisierungen erstellen** – Verwenden Sie die Aktionen „KI generieren“ und „Skript ausführen“ in Ihren Workflows.
diff --git a/de/basic/ai/teable-skill.mdx b/de/basic/ai/teable-skill.mdx
index b16755bf..62eec1ee 100644
--- a/de/basic/ai/teable-skill.mdx
+++ b/de/basic/ai/teable-skill.mdx
@@ -24,7 +24,7 @@ Probieren Sie nach der Installation des Skills diese Prompts aus.
```text Einfache Einstiegs-Prompts wrap
-Erstelle eine einfache CRM-Tabelle in {Base-URL einfügen}.
+Erstelle eine einfache CRM-Tabelle in {Projekt-URL einfügen}.
```
```text Lokale Dateien → Teable wrap
diff --git a/de/basic/authority-matrix.mdx b/de/basic/authority-matrix.mdx
index 2ea11e95..4a6e3b5d 100644
--- a/de/basic/authority-matrix.mdx
+++ b/de/basic/authority-matrix.mdx
@@ -1,12 +1,12 @@
---
title: "Übersicht"
-description: "Legen Sie Zugriffsbereiche für verschiedene Teams in derselben Base fest, damit Mitglieder nur die benötigten Daten sehen, bearbeiten oder exportieren können."
+description: "Legen Sie Zugriffsbereiche für verschiedene Teams in demselben Projekt fest, damit Mitglieder nur die benötigten Daten sehen, bearbeiten oder exportieren können."
---
{/* mintlify-resync: 2026-05-28 */}
Verfügbar ab dem Business-Plan
-Wenn Vertrieb, Finanzen, Betrieb und Führung dieselbe Base nutzen, bestimmen Berechtigungen, wer die Base betreten kann, welche Daten angezeigt oder bearbeitet werden können und ob Daten importiert oder exportiert werden dürfen. Die Authority Matrix hilft Teams, Daten an einem Ort zu halten und den Zugriff gleichzeitig nach Verantwortlichkeiten zu trennen.
+Wenn Vertrieb, Finanzen, Betrieb und Führung dasselbe Projekt nutzen, bestimmen Berechtigungen, wer das Projekt betreten kann, welche Daten angezeigt oder bearbeitet werden können und ob Daten importiert oder exportiert werden dürfen. Die Authority Matrix hilft Teams, Daten an einem Ort zu halten und den Zugriff gleichzeitig nach Verantwortlichkeiten zu trennen.
Sie können Mitgliedern oder Abteilungen benutzerdefinierte Rollen zuweisen und jeder Rolle Zugriff nur auf die benötigten Tabellen, Apps und Workflows geben. Für Tabellen können Sie außerdem sichtbare Ansichten, sichtbare Datensätze, bearbeitbare Felder sowie Import- oder Exportberechtigungen einschränken. So kann beispielsweise der Vertrieb seine eigenen Kunden verwalten, die Finanzabteilung kann Abrechnungsfelder anzeigen und die Führung kann den vollständigen Datensatz anzeigen.
@@ -17,7 +17,7 @@ Sie können Mitgliedern oder Abteilungen benutzerdefinierte Rollen zuweisen und
| Zugriff auf Abteilungsebene | Der Vertrieb kann Kundendatensätze verwalten, während die Finanzabteilung nur Abrechnungsfelder sieht. |
| Zugewiesene Datensätze | Vertriebsmitarbeitende können nur ihnen zugewiesene Datensätze anzeigen und aktualisieren. |
| Eingeschränkte Dateneingabe | Mitglieder können neue Datensätze erstellen, ohne vorhandene Datensätze zu bearbeiten oder zu löschen. |
-| Sensible Felder in einer gemeinsam genutzten Base | Mitglieder können Bestelldatensätze anzeigen, ohne Zahlungs- oder Kostenfelder zu sehen. |
+| Sensible Felder in einem gemeinsam genutzten Projekt | Mitglieder können Bestelldatensätze anzeigen, ohne Zahlungs- oder Kostenfelder zu sehen. |
| Gesteuerte Apps und Workflows | Rollen können ausgewählte Apps oder Workflows öffnen, während nicht autorisierte Knoten ausgeblendet bleiben. |
## So funktionieren Berechtigungen
@@ -34,7 +34,7 @@ Die Rollenliste enthält einen Abschnitt `Administratoren` und einen Abschnitt `
className="docs-screenshot"
/>
-Verwenden Sie `Rolle hinzufügen`, um eine benutzerdefinierte Rolle zu erstellen. Weisen Sie auf der Detailseite der Rolle Mitarbeitende zu, verfassen Sie eine kurze Beschreibung und konfigurieren Sie den Zugriff für jeden Knoten in der Base:
+Verwenden Sie `Rolle hinzufügen`, um eine benutzerdefinierte Rolle zu erstellen. Weisen Sie auf der Detailseite der Rolle Mitarbeitende zu, verfassen Sie eine kurze Beschreibung und konfigurieren Sie den Zugriff für jeden Knoten in dem Projekt:
Informationen zu grundlegenden Berechtigungsebenen für Spaces und Bases finden Sie unter [Berechtigungen für die Zusammenarbeit](/de/basic/space/space-permission).
+Informationen zu grundlegenden Berechtigungsebenen für Spaces und Projekte finden Sie unter [Berechtigungen für die Zusammenarbeit](/de/basic/space/space-permission).
diff --git a/de/basic/authority-matrix/authority-matrix-practical-guide.mdx b/de/basic/authority-matrix/authority-matrix-practical-guide.mdx
index c5e655ae..e27646bb 100644
--- a/de/basic/authority-matrix/authority-matrix-practical-guide.mdx
+++ b/de/basic/authority-matrix/authority-matrix-practical-guide.mdx
@@ -4,7 +4,7 @@ description: "Konfigurieren Sie Rollen der Authority Matrix für ein Vertriebste
---
{/* mintlify-resync: 2026-05-28 */}
-Dieser Leitfaden verwendet eine Vertriebs-Base mit drei Tabellen: `Kunden`, `Verkaufsaufträge` und `Produkte`. Ziel ist es, jeder Rolle die Arbeit mit den benötigten Daten zu ermöglichen, ohne die gesamte Base offenzulegen.
+Dieser Leitfaden verwendet ein Vertriebs-Projekt mit drei Tabellen: `Kunden`, `Verkaufsaufträge` und `Produkte`. Ziel ist es, jeder Rolle die Arbeit mit den benötigten Daten zu ermöglichen, ohne das gesamte Projekt offenzulegen.
| Rolle | Zugriffsziele |
| --- | --- |
@@ -24,7 +24,7 @@ Dieser Leitfaden verwendet eine Vertriebs-Base mit drei Tabellen: `Kunden`, `Ver
- Öffnen Sie die Seite der Authority Matrix in der Base und aktivieren Sie den Hauptschalter. Der Nutzer, der sie aktiviert, wird als Administrator hinzugefügt.
+ Öffnen Sie die Seite der Authority Matrix in dem Projekt und aktivieren Sie den Hauptschalter. Der Nutzer, der sie aktiviert, wird als Administrator hinzugefügt.
Klicken Sie auf `Rolle hinzufügen` und erstellen Sie `Vertriebsleitung`, `Vertriebsmitarbeitende` und `Datenerfassung`.
diff --git a/de/basic/automation.mdx b/de/basic/automation.mdx
index c74179aa..9b69c206 100644
--- a/de/basic/automation.mdx
+++ b/de/basic/automation.mdx
@@ -65,8 +65,8 @@ Wiederholungsversuche werden als Wiederholungen markiert und mit der ursprüngli
| Element | Limit |
|---|---|
-| E-Mail-Senderate | 5 / Sekunde / Base |
-| Webhook-Empfangsrate | 50 / Sekunde / Base, 2 / Sekunde / Workflow |
+| E-Mail-Senderate | 5 / Sekunde / Projekt |
+| Webhook-Empfangsrate | 50 / Sekunde / Projekt, 2 / Sekunde / Workflow |
| Größe der Webhook-Nutzlast | 4 MB |
| Ausführungskontingent & Aufbewahrung der Historie | Variiert je nach Plan |
@@ -82,7 +82,7 @@ Wiederholungsversuche werden als Wiederholungen markiert und mit der ursprüngli
Teable Cloud kann auch kritische Benachrichtigungen bei ungewöhnlicher Nutzung senden, beispielsweise bei einem starken täglichen Anstieg oder einem plötzlichen Schub in kurzer Zeit. Das System verwendet aktuelle tägliche und stündliche Ausführungsmuster; die genauen Schwellenwerte können sich ändern.
- Die Benachrichtigung öffnet **Space-Einstellungen** → **Abrechnung**. Wenn verfügbar, zeigt sie, welcher Workflow und welche Base die meisten Ausführungen verursacht haben. Kontingenterinnerungen basieren auf Ausführungen, die auf Ihr Planlimit angerechnet werden; Prüfungen auf ungewöhnliche Nutzung können auch aktuelle Ausführungen mit dem Status **success**, **failed** oder **pending** berücksichtigen.
+ Die Benachrichtigung öffnet **Space-Einstellungen** → **Abrechnung**. Wenn verfügbar, zeigt sie, welcher Workflow und welches Projekt die meisten Ausführungen verursacht haben. Kontingenterinnerungen basieren auf Ausführungen, die auf Ihr Planlimit angerechnet werden; Prüfungen auf ungewöhnliche Nutzung können auch aktuelle Ausführungen mit dem Status **success**, **failed** oder **pending** berücksichtigen.
Wenn die Nutzung erwartet wird, sollten Sie zusätzliches Automatisierungskontingent kaufen oder Ihren Plan ändern. Wenn sie unerwartet ist, prüfen Sie den wichtigsten Workflow und passen Sie die zugehörige Automatisierung an oder pausieren Sie sie.
diff --git a/de/basic/automation/actions/communication/send-email-overview.mdx b/de/basic/automation/actions/communication/send-email-overview.mdx
index 7dd59047..aaf7e329 100644
--- a/de/basic/automation/actions/communication/send-email-overview.mdx
+++ b/de/basic/automation/actions/communication/send-email-overview.mdx
@@ -37,7 +37,7 @@ Standardmäßig werden E-Mails über den integrierten E-Mail-Dienst von Teable g
\* Mindestens eines der Felder **An** oder **BCC** ist erforderlich.
-**Ratenbegrenzung:** 5 E-Mails/Sekunde/Base.
+**Ratenbegrenzung:** 5 E-Mails/Sekunde/Projekt.
## Einrichtung
diff --git a/de/basic/automation/actions/records/create-record.mdx b/de/basic/automation/actions/records/create-record.mdx
index 94c32c22..d3159803 100644
--- a/de/basic/automation/actions/records/create-record.mdx
+++ b/de/basic/automation/actions/records/create-record.mdx
@@ -30,7 +30,7 @@ Erstellt einen neuen Datensatz in einer angegebenen Tabelle. Sie können Daten a
## Einrichtung
1. Fügen Sie Ihrem Workflow die Aktion **Datensatz erstellen** hinzu.
-2. Wählen Sie die **Tabelle**, in der der Datensatz erstellt werden soll. Standardmäßig handelt es sich um eine Tabelle in derselben Base. Mit [Base-übergreifendem Zugriff](/de/basic/automation/actions/records/cross-base) können Sie jedoch eine Tabelle in einer anderen Base als Ziel festlegen.
+2. Wählen Sie die **Tabelle**, in der der Datensatz erstellt werden soll. Standardmäßig handelt es sich um eine Tabelle in demselben Projekt. Mit [Projekt-übergreifendem Zugriff](/de/basic/automation/actions/records/cross-base) können Sie jedoch eine Tabelle in einem anderen Projekt als Ziel festlegen.
3. Im Bereich für die Feldzuordnung werden alle Felder der Zieltabelle angezeigt. Für jedes auszufüllende Feld:
- **Statischer Wert:** Geben Sie einen Wert direkt in das Feld ein (z. B. „Neu“ für ein Statusfeld).
- **Dynamischer Wert:** Klicken Sie neben dem Feld auf die Schaltfläche **+**, um eine Variable aus einem vorherigen Schritt einzufügen. Fügen Sie beispielsweise das Feld „Name“ des Auslösers ein, um den Namen aus dem auslösenden Datensatz zu kopieren.
@@ -68,11 +68,11 @@ Dies ist nützlich, wenn Sie Aktionen verketten möchten. Sie können beispielsw
- Sie können Datensätze massenhaft erstellen, indem Sie diese Aktion mit [Schleife (Stapelverarbeitung)](../logic/loop-run) kombinieren. Rufen Sie beispielsweise 50 Datensätze aus einer Tabelle ab und erstellen Sie 50 entsprechende Datensätze in einer anderen.
- Felder, denen Sie keinen Wert zuordnen, verwenden die Standardwerte der Tabelle (falls vorhanden) oder bleiben leer.
- Felder für verknüpfte Datensätze erwarten Datensatz-IDs, keine Anzeigewerte. Wenn Sie einen Datensatz verknüpfen möchten, müssen Sie die Datensatz-ID und nicht den Namen des Datensatzes übergeben.
-- Verwenden Sie [Base-übergreifenden Zugriff](/de/basic/automation/actions/records/cross-base), wenn sich die Zieltabelle in einer anderen Base als die Automatisierung befindet.
+- Verwenden Sie [Projekt-übergreifenden Zugriff](/de/basic/automation/actions/records/cross-base), wenn sich die Zieltabelle in einem anderen Projekt als die Automatisierung befindet.
## Verwandte Themen
- [Datensatz aktualisieren](/de/basic/automation/actions/records/update-record) – vorhandene Datensätze ändern, statt neue zu erstellen
- [Datensätze abrufen](/de/basic/automation/actions/records/get-records) – Datensätze abrufen, um sie als Eingabe beim Erstellen neuer Datensätze zu verwenden
-- [Base-übergreifender Zugriff](/de/basic/automation/actions/records/cross-base) – Datensätze in Tabellen außerhalb der aktuellen Base erstellen
+- [Projekt-übergreifender Zugriff](/de/basic/automation/actions/records/cross-base) – Datensätze in Tabellen außerhalb des aktuellen Projekts erstellen
- [Schleife (Stapelverarbeitung)](../logic/loop-run) – mehrere Datensätze in einem einzigen Aktionsschritt erstellen
diff --git a/de/basic/automation/actions/records/cross-base.mdx b/de/basic/automation/actions/records/cross-base.mdx
index aae73ea6..bd92b35a 100644
--- a/de/basic/automation/actions/records/cross-base.mdx
+++ b/de/basic/automation/actions/records/cross-base.mdx
@@ -1,6 +1,6 @@
---
-title: "Base-übergreifender Zugriff"
-description: "Lesen und schreiben Sie Daten aus verschiedenen Bases in einem einzigen Workflow"
+title: "Projekt-übergreifender Zugriff"
+description: "Lesen und schreiben Sie Daten aus verschiedenen Projekten in einem einzigen Workflow"
---
{/* mintlify-resync: 2026-05-26 */}
@@ -10,74 +10,74 @@ Wir empfehlen dringend, Automatisierungen mit „Skript ausführen“ zu erstell
Bitte beachten Sie: Wenn Sie Aktionen manuell hinzufügen, kann die KI sie später weder erkennen noch ändern.
-Standardmäßig arbeiten Automatisierungsaktionen mit Tabellen innerhalb der Base des Workflows. Der Base-übergreifende Zugriff ermöglicht einem Workflow, Daten aus einer anderen Base zu lesen und dorthin zu schreiben. Verwenden Sie ihn für Workflows, die sich über Abteilungen, Projekte oder Datensätze erstrecken.
+Standardmäßig arbeiten Automatisierungsaktionen mit Tabellen innerhalb des Projekts des Workflows. Der Projekt-übergreifende Zugriff ermöglicht einem Workflow, Daten aus einem anderen Projekt zu lesen und dorthin zu schreiben. Verwenden Sie ihn für Workflows, die sich über Abteilungen, Projekte oder Datensätze erstrecken.
-Eine Automatisierung in einer Vertriebs-Base kann beispielsweise einen Abwicklungsdatensatz in einer separaten Betriebs-Base erstellen. Ebenso kann ein Berichts-Workflow Daten aus mehreren Projekt-Bases in einer Zusammenfassung bündeln.
+Eine Automatisierung in einem Vertriebs-Projekt kann beispielsweise einen Abwicklungsdatensatz in einem separaten Betriebs-Projekt erstellen. Ebenso kann ein Berichts-Workflow Daten aus mehreren Projekten in einer Zusammenfassung bündeln.
## Unterstützte Aktionen
-| Aktion | Base-übergreifende Unterstützung |
+| Aktion | Projekt-übergreifende Unterstützung |
|---|---|
| Datensatz erstellen | Ja |
| Datensatz aktualisieren | Ja |
| Datensätze abrufen | Ja |
-Dies sind die drei datensatzbezogenen Aktionen. Andere Aktionen („E-Mail senden“, „HTTP-Anfrage“ usw.) benötigen keinen Base-übergreifenden Zugriff, da sie nicht auf eine bestimmte Tabelle abzielen.
+Dies sind die drei datensatzbezogenen Aktionen. Andere Aktionen („E-Mail senden“, „HTTP-Anfrage“ usw.) benötigen keinen Projekt-übergreifenden Zugriff, da sie nicht auf eine bestimmte Tabelle abzielen.
## Einrichtung
1. Öffnen Sie in Ihrem Workflow eine unterstützte Aktion („Datensatz erstellen“, „Datensatz aktualisieren“ oder „Datensätze abrufen“).
-2. Klicken Sie neben der Auswahl **Tabelle** auf **Base-übergreifender Zugriff**.
-3. Ein Bereich mit allen Spaces und Bases, auf die Ihr Konto zugreifen kann, wird geöffnet. Wählen Sie zuerst den Ziel-**Space** und dann die Ziel-**Base** aus.
-4. Wählen Sie die **Tabelle** in dieser Base aus. Wenn die Aktion dies unterstützt, können Sie auch eine bestimmte **Ansicht** auswählen.
-5. Ordnen Sie die Felder zu und konfigurieren Sie die Aktion wie gewohnt. Die Feldliste zeigt nun die Felder der Zieltabelle an, nicht die Felder der aktuellen Base.
+2. Klicken Sie neben der Auswahl **Tabelle** auf **Projekt-übergreifender Zugriff**.
+3. Ein Bereich mit allen Spaces und Projekten, auf die Ihr Konto zugreifen kann, wird geöffnet. Wählen Sie zuerst den Ziel-**Space** und dann das Ziel-**Projekt** aus.
+4. Wählen Sie die **Tabelle** in diesem Projekt aus. Wenn die Aktion dies unterstützt, können Sie auch eine bestimmte **Ansicht** auswählen.
+5. Ordnen Sie die Felder zu und konfigurieren Sie die Aktion wie gewohnt. Die Feldliste zeigt nun die Felder der Zieltabelle an, nicht die Felder des aktuellen Projekts.
6. Speichern Sie die Aktion.
## Konkretes Beispiel: Vom Vertrieb zur Abwicklung
-Angenommen, Sie haben zwei Bases:
+Angenommen, Sie haben zwei Projekte:
-- **Vertriebs-Base** – enthält eine Tabelle „Abschlüsse“, in der das Vertriebsteam abgeschlossene Geschäfte verfolgt.
-- **Betriebs-Base** – enthält eine Tabelle „Abwicklung“, in der das Betriebsteam den Versand verwaltet.
+- **Vertriebs-Projekt** – enthält eine Tabelle „Abschlüsse“, in der das Vertriebsteam abgeschlossene Geschäfte verfolgt.
+- **Betriebs-Projekt** – enthält eine Tabelle „Abwicklung“, in der das Betriebsteam den Versand verwaltet.
Wenn ein Geschäft abgeschlossen wird, möchten Sie automatisch einen Abwicklungsdatensatz erstellen:
-1. **Auslöser:** Verwenden Sie in der Vertriebs-Base „Wenn Datensatz Bedingungen erfüllt“ mit dem Filter: `Phase` entspricht `Erfolgreich abgeschlossen`.
-2. **Aktion:** „Datensatz erstellen“ mit Base-übergreifendem Zugriff auf die Betriebs-Base > Tabelle „Abwicklung“.
+1. **Auslöser:** Verwenden Sie im Vertriebs-Projekt „Wenn Datensatz Bedingungen erfüllt“ mit dem Filter: `Phase` entspricht `Erfolgreich abgeschlossen`.
+2. **Aktion:** „Datensatz erstellen“ mit Projekt-übergreifendem Zugriff auf das Betriebs-Projekt > Tabelle „Abwicklung“.
3. **Feldzuordnung:** Ordnen Sie Kundenname, Produkt, Menge und Versandadresse des Geschäfts den entsprechenden Feldern in der Tabelle „Abwicklung“ zu.
-Bei jedem Geschäftsabschluss wird nun automatisch ein Abwicklungsdatensatz in der Betriebs-Base erstellt – eine manuelle Übergabe ist nicht erforderlich.
+Bei jedem Geschäftsabschluss wird nun automatisch ein Abwicklungsdatensatz im Betriebs-Projekt erstellt – eine manuelle Übergabe ist nicht erforderlich.
## Berechtigungsmodell
-Wenn Sie Workflow-Aktualisierungen erstellen, bearbeiten oder anwenden, prüft Teable jede Base-übergreifende Aktion anhand der Berechtigungen der Person, die sie gerade bearbeitet:
+Wenn Sie Workflow-Aktualisierungen erstellen, bearbeiten oder anwenden, prüft Teable jede Projekt-übergreifende Aktion anhand der Berechtigungen der Person, die sie gerade bearbeitet:
-| Aktion | Erforderliche Berechtigung für die Ziel-Base |
+| Aktion | Erforderliche Berechtigung für das Ziel-Projekt |
|---|---|
| Datensätze abrufen | Felder und Datensätze lesen |
| Datensatz erstellen | Felder und Datensätze lesen sowie Datensätze erstellen |
| Datensatz aktualisieren | Felder und Datensätze lesen sowie Datensätze aktualisieren |
-Aktive Workflow-Ausführungen verwenden für die Ziel-Base die Laufzeitidentität der Teable-Automatisierung. Datensätze, die durch eine Base-übergreifende Aktion erstellt oder aktualisiert werden, erscheinen in Datensatzmetadaten und Überwachungsansichten als **Automatisierungsroboter**.
+Aktive Workflow-Ausführungen verwenden für das Ziel-Projekt die Laufzeitidentität der Teable-Automatisierung. Datensätze, die durch eine Projekt-übergreifende Aktion erstellt oder aktualisiert werden, erscheinen in Datensatzmetadaten und Überwachungsansichten als **Automatisierungsroboter**.
### Was bei Zugriffsänderungen geschieht
-Verfügt die aktuell bearbeitende Person nicht über die erforderliche Berechtigung für die Ziel-Base, hindert Teable sie daran, Base-übergreifende Aktionen hinzuzufügen oder zu ändern, die auf diese Base verweisen. Enthält ein Entwurf bereits Base-übergreifende Aktionen, auf die diese Person nicht zugreifen kann, verhindert Teable außerdem das Anwenden des Entwurfs. Die bereits aktive Version wird weiter ausgeführt. Teable prüft die Berechtigungen erneut, sobald jemand den Workflow wieder bearbeitet oder anwendet.
+Verfügt die aktuell bearbeitende Person nicht über die erforderliche Berechtigung für das Ziel-Projekt, hindert Teable sie daran, Projekt-übergreifende Aktionen hinzuzufügen oder zu ändern, die auf dieses Projekt verweisen. Enthält ein Entwurf bereits Projekt-übergreifende Aktionen, auf die diese Person nicht zugreifen kann, verhindert Teable außerdem das Anwenden des Entwurfs. Die bereits aktive Version wird weiter ausgeführt. Teable prüft die Berechtigungen erneut, sobald jemand den Workflow wieder bearbeitet oder anwendet.
So beheben Sie beim Bearbeiten oder Anwenden eines Workflows einen Berechtigungsfehler:
-1. Bitten Sie eine Person mit Zugriff auf beide Bases, den Workflow zu bearbeiten und anzuwenden.
-2. Oder stellen Sie die erforderlichen Berechtigungen für die Ziel-Base wieder her und wenden Sie den Workflow erneut an.
+1. Bitten Sie eine Person mit Zugriff auf beide Projekte, den Workflow zu bearbeiten und anzuwenden.
+2. Oder stellen Sie die erforderlichen Berechtigungen für das Ziel-Projekt wieder her und wenden Sie den Workflow erneut an.
## Tipps
-- Base-übergreifender Zugriff kann Bases in verschiedenen **Spaces** erreichen. Die Person, die den Workflow konfiguriert oder anwendet, muss über die erforderlichen Berechtigungen für die Ziel-Base verfügen.
-- Bei der Zuordnung von Feldern über Bases hinweg müssen die Feldtypen kompatibel sein. Beispielsweise können Sie einem Anhangsfeld kein Textfeld zuordnen.
-- Wenn Sie eine Ziel-Base umstrukturieren (Tabellen umbenennen oder Felder löschen), funktionieren Base-übergreifende Aktionen nicht mehr, die auf diese Tabellen und Felder verweisen. Aktualisieren Sie Ihren Workflow nach strukturellen Änderungen.
-- Erwägen Sie bei komplexen Base-übergreifenden Workflows, Ihre Automatisierungen in einer zentralen „Hub“-Base zu bündeln, um sie übersichtlich zu organisieren.
+- Projekt-übergreifender Zugriff kann Projekte in verschiedenen **Spaces** erreichen. Die Person, die den Workflow konfiguriert oder anwendet, muss über die erforderlichen Berechtigungen für das Ziel-Projekt verfügen.
+- Bei der Zuordnung von Feldern über Projekte hinweg müssen die Feldtypen kompatibel sein. Beispielsweise können Sie einem Anhangsfeld kein Textfeld zuordnen.
+- Wenn Sie ein Ziel-Projekt umstrukturieren (Tabellen umbenennen oder Felder löschen), funktionieren Projekt-übergreifende Aktionen nicht mehr, die auf diese Tabellen und Felder verweisen. Aktualisieren Sie Ihren Workflow nach strukturellen Änderungen.
+- Erwägen Sie bei komplexen Projekt-übergreifenden Workflows, Ihre Automatisierungen in einem zentralen „Hub“-Projekt zu bündeln, um sie übersichtlich zu organisieren.
## Verwandte Themen
-- [Datensatz erstellen](/de/basic/automation/actions/records/create-record) – Datensätze in der aktuellen oder einer anderen Base erstellen
-- [Datensatz aktualisieren](/de/basic/automation/actions/records/update-record) – Datensätze in der aktuellen oder einer anderen Base aktualisieren
-- [Datensätze abrufen](/de/basic/automation/actions/records/get-records) – Datensätze aus der aktuellen oder einer anderen Base abrufen
+- [Datensatz erstellen](/de/basic/automation/actions/records/create-record) – Datensätze im aktuellen oder einem anderen Projekt erstellen
+- [Datensatz aktualisieren](/de/basic/automation/actions/records/update-record) – Datensätze im aktuellen oder einem anderen Projekt aktualisieren
+- [Datensätze abrufen](/de/basic/automation/actions/records/get-records) – Datensätze aus dem aktuellen oder einem anderen Projekt abrufen
diff --git a/de/basic/automation/actions/records/get-records.mdx b/de/basic/automation/actions/records/get-records.mdx
index cfe9b991..5b6b2834 100644
--- a/de/basic/automation/actions/records/get-records.mdx
+++ b/de/basic/automation/actions/records/get-records.mdx
@@ -33,7 +33,7 @@ Ruft Datensätze aus einer Tabelle ab und gibt sie als Array zurück. Verwenden
## Einrichtung
1. Fügen Sie Ihrem Workflow die Aktion **Datensätze abrufen** hinzu.
-2. Wählen Sie die abzufragende **Tabelle**. Verwenden Sie [Base-übergreifenden Zugriff](/de/basic/automation/actions/records/cross-base), wenn sich die Tabelle in einer anderen Base befindet.
+2. Wählen Sie die abzufragende **Tabelle**. Verwenden Sie [Projekt-übergreifenden Zugriff](/de/basic/automation/actions/records/cross-base), wenn sich die Tabelle in einem anderen Projekt befindet.
3. (Optional) Wählen Sie eine **Ansicht** aus, um deren Filter-, Sortier- und Feldsichtbarkeitseinstellungen zu übernehmen.
4. (Optional) Fügen Sie **Filterbedingungen** hinzu, um die Ergebnisse einzugrenzen. Beispiel: `Status` entspricht `Aktiv` und `Fälligkeitsdatum` liegt vor heute.
5. (Optional) Legen Sie **Skip** und **Take** für die Paginierung fest. Mit Skip 0 und Take 100 erhalten Sie beispielsweise die ersten 100 Datensätze.
@@ -80,11 +80,11 @@ Um eine gesamte große Tabelle zu verarbeiten, können Sie mehrere Schritte „D
- „Datensätze abrufen“ ändert keine Daten – die Aktion ist schreibgeschützt.
- Gibt die Abfrage keine Datensätze zurück, erhalten nachfolgende Schritte, die auf die Ergebnisse verweisen, ein leeres Array. Stellen Sie sicher, dass Ihr Workflow dies angemessen behandelt (senden Sie beispielsweise keine E-Mail mit dem Text „Hier sind Ihre Ergebnisse“, wenn keine Ergebnisse vorliegen).
- Filter in „Datensätze abrufen“ funktionieren genauso wie Ansichtsfilter: Sie können Bedingungen mit UND-/ODER-Logik kombinieren.
-- Bei Base-übergreifendem Zugriff wird die Abfrage mit den Berechtigungen des Workflow-Erstellers ausgeführt. Verliert dieser den Zugriff auf die Ziel-Base, schlägt der Schritt fehl.
+- Bei Projekt-übergreifendem Zugriff wird die Abfrage mit den Berechtigungen des Workflow-Erstellers ausgeführt. Verliert dieser den Zugriff auf das Ziel-Projekt, schlägt der Schritt fehl.
## Verwandte Themen
-- [Base-übergreifender Zugriff](/de/basic/automation/actions/records/cross-base) – Tabellen in anderen Bases abfragen
+- [Projekt-übergreifender Zugriff](/de/basic/automation/actions/records/cross-base) – Tabellen in anderen Projekten abfragen
- [Schleife (Stapelverarbeitung)](../logic/loop-run) – das Ergebnis-Array durchlaufen
- [Datensatz erstellen](/de/basic/automation/actions/records/create-record) – Datensätze auf Grundlage abgerufener Daten erstellen
- [Datensatz aktualisieren](/de/basic/automation/actions/records/update-record) – von „Datensätze abrufen“ gefundene Datensätze aktualisieren
diff --git a/de/basic/automation/actions/records/update-record.mdx b/de/basic/automation/actions/records/update-record.mdx
index 2f35fcfa..08d4b29a 100644
--- a/de/basic/automation/actions/records/update-record.mdx
+++ b/de/basic/automation/actions/records/update-record.mdx
@@ -93,11 +93,11 @@ Wenn Ihre Automatisierung durch **Wenn Datensatz aktualisiert wird** ausgelöst
- Das Aktualisieren eines Datensatzes kann weitere Automatisierungen auslösen, die dieselbe Tabelle überwachen. Beachten Sie mögliche Kaskadeneffekte.
- Wenn Sie mehrere Datensätze über durch Kommas getrennte IDs aktualisieren, erhalten alle Datensätze dieselben Feldwerte. Verwenden Sie für unterschiedliche Werte pro Datensatz stattdessen einen Schritt [Schleife](../logic/loop-run).
- Um ein Feld zu leeren, ordnen Sie ihm einen leeren Wert zu. Wenn Sie es lediglich ohne Zuordnung lassen, wird es *nicht* geleert.
-- Verwenden Sie [Base-übergreifenden Zugriff](/de/basic/automation/actions/records/cross-base), um Datensätze in einer Tabelle zu aktualisieren, die sich in einer anderen Base befindet.
+- Verwenden Sie [Projekt-übergreifenden Zugriff](/de/basic/automation/actions/records/cross-base), um Datensätze in einer Tabelle zu aktualisieren, die sich in einem anderen Projekt befindet.
## Verwandte Themen
- [Datensatz erstellen](/de/basic/automation/actions/records/create-record) – neue Datensätze hinzufügen, statt vorhandene zu ändern
- [Datensätze abrufen](/de/basic/automation/actions/records/get-records) – Datensätze abrufen, um deren IDs vor der Aktualisierung zu ermitteln
-- [Base-übergreifender Zugriff](/de/basic/automation/actions/records/cross-base) – Datensätze in Tabellen außerhalb der aktuellen Base aktualisieren
+- [Projekt-übergreifender Zugriff](/de/basic/automation/actions/records/cross-base) – Datensätze in Tabellen außerhalb des aktuellen Projekts aktualisieren
- [Schleife (Stapelverarbeitung)](../logic/loop-run) – mehrere Datensätze mit unterschiedlichen Werten aktualisieren
diff --git a/de/basic/automation/ai/scripting/runscript.mdx b/de/basic/automation/ai/scripting/runscript.mdx
index 2c525f54..8df981fc 100644
--- a/de/basic/automation/ai/scripting/runscript.mdx
+++ b/de/basic/automation/ai/scripting/runscript.mdx
@@ -210,7 +210,7 @@ output.set("records", data);
### KI aus einem Skript aufrufen
-`POST /api/automation/runtime/ai` sendet einen Prompt an das KI-Modell Ihrer Base. Die Base stammt aus dem Kontext der Automatisierung, daher ist keine Base-ID erforderlich. Der Text erwartet `prompt` sowie optional `attachments`, `modelKey`, `temperature` und `outputType`; die Antwort lautet `{ "message": ... }`.
+`POST /api/automation/runtime/ai` sendet einen Prompt an das KI-Modell Ihres Projekts. Das Projekt stammt aus dem Kontext der Automatisierung, daher ist keine Projekt-ID erforderlich. Der Text erwartet `prompt` sowie optional `attachments`, `modelKey`, `temperature` und `outputType`; die Antwort lautet `{ "message": ... }`.
Anhänge sind Elemente des Formats `{ url, mimetype, name }`: bis zu 10 pro Aufruf, jeweils unter 20 MB und mit 30 Sekunden Zeit zum Herunterladen. Unterstützt werden Bilder, PDFs und Office-Dokumente. Das Standard-Chatmodell kann Bilder und ähnliche Anhänge möglicherweise nicht lesen; übergeben Sie daher `modelKey`, wenn Sie Dateien senden. Jeder Aufruf verbraucht Guthaben.
diff --git a/de/basic/automation/examples/api-automation.mdx b/de/basic/automation/examples/api-automation.mdx
index b6373d14..a9a2e870 100644
--- a/de/basic/automation/examples/api-automation.mdx
+++ b/de/basic/automation/examples/api-automation.mdx
@@ -17,7 +17,7 @@ Die KI erstellt automatisch den vollständigen Workflow. Sie können das generie
## Voraussetzungen
- Ein persönliches Zugriffstoken (PAT). Siehe [Zugriffstoken](/de/api-doc/token).
-- Die ID Ihrer Base sowie die Tabellen- und Feld-IDs. Siehe [IDs abrufen](/de/api-doc/get-id).
+- Die ID Ihres Projekts sowie die Tabellen- und Feld-IDs. Siehe [IDs abrufen](/de/api-doc/get-id).
## Hilfsfunktionen
@@ -74,7 +74,7 @@ await api("PUT", `/base/${baseId}/workflow/${wf.id}/active`, {
## Bewährte Vorgehensweisen
-- Verwenden Sie das PAT mit den geringstmöglichen Berechtigungen – beschränken Sie es auf die benötigten Spaces und Bases.
+- Verwenden Sie das PAT mit den geringstmöglichen Berechtigungen – beschränken Sie es auf die benötigten Spaces und Projekte.
- Speichern Sie Tokens in Umgebungsvariablen und schreiben Sie sie niemals fest in den Code.
- Verwenden Sie **Knoten testen**, um alles vor der Aktivierung zu überprüfen.
- Weitere Informationen finden Sie in der vollständigen [Referenz der Automatisierungs-API](/de/api-reference/automation/put-base-workflow-action).
diff --git a/de/basic/automation/examples/cross-base-sync.mdx b/de/basic/automation/examples/cross-base-sync.mdx
index 06e2ad5a..4f42ce1b 100644
--- a/de/basic/automation/examples/cross-base-sync.mdx
+++ b/de/basic/automation/examples/cross-base-sync.mdx
@@ -1,6 +1,6 @@
---
-title: "Datensätze über mehrere Bases hinweg synchron halten"
-description: "Replizieren Sie neue oder aktualisierte Datensätze mithilfe des Base-übergreifenden Zugriffs automatisch in eine andere Base"
+title: "Datensätze über mehrere Projekte hinweg synchron halten"
+description: "Replizieren Sie neue oder aktualisierte Datensätze mithilfe des Projekt-übergreifenden Zugriffs automatisch in ein anderes Projekt"
---
Wir empfehlen, Automatisierungsbeispiele direkt im KI-Chat zu erstellen. Beschreiben Sie einfach den gewünschten Workflow, und die KI übernimmt die vollständige Einrichtung für Sie – einschließlich Auslöser, Aktionen, Skript und Konfiguration.
@@ -9,18 +9,18 @@ description: "Replizieren Sie neue oder aktualisierte Datensätze mithilfe des B
Öffnen Sie den KI-Chat in der rechten Seitenleiste Ihrer Tabelle und teilen Sie der KI mit, was Sie möchten. Sie können zum Beispiel sagen:
-*„Wenn in der Base Vertrieb eine neue Bestellung erstellt wird, erstelle in der Base Auftragsabwicklung einen entsprechenden Datensatz mit Bestell-ID, Kundenname, Betrag und dem Status Ausstehend.“*
+*„Wenn in dem Projekt Vertrieb eine neue Bestellung erstellt wird, erstelle in dem Projekt Auftragsabwicklung einen entsprechenden Datensatz mit Bestell-ID, Kundenname, Betrag und dem Status Ausstehend.“*
Die KI erstellt automatisch den vollständigen Workflow. Sie können das erzeugte Skript überprüfen, mit echten Daten testen und den Workflow aktivieren, sobald er bereit ist.
## Manuelle Einrichtung
-1. **Erstellen Sie einen Workflow** in der Base **Vertrieb** mit dem Auslöser **Wenn Datensatz erstellt wird**.
+1. **Erstellen Sie einen Workflow** im Projekt **Vertrieb** mit dem Auslöser **Wenn Datensatz erstellt wird**.
2. Wählen Sie Ihre Tabelle **Bestellungen** aus.
3. Klicken Sie auf **Testen**.
4. **Fügen Sie eine Aktion hinzu** → **Datensatz erstellen**.
-5. Klicken Sie neben der Tabellenauswahl auf **Base-übergreifender Zugriff**.
-6. Navigieren Sie zur Base **Auftragsabwicklung** und wählen Sie die Tabelle **Bestellungen** aus.
+5. Klicken Sie neben der Tabellenauswahl auf **Projekt-übergreifender Zugriff**.
+6. Navigieren Sie zum Projekt **Auftragsabwicklung** und wählen Sie die Tabelle **Bestellungen** aus.
7. Ordnen Sie die Felder zu:
- Bestell-ID → Bestell-ID des Auslösers (über **+**)
- Kunde → Kunde des Auslösers
@@ -31,6 +31,6 @@ Die KI erstellt automatisch den vollständigen Workflow. Sie können das erzeugt
## Bidirektionale Synchronisierung
So synchronisieren Sie Aktualisierungen in beide Richtungen:
-1. Erstellen Sie einen zweiten Workflow in der Base **Auftragsabwicklung**.
-2. Verwenden Sie **Wenn Datensatz aktualisiert wird** → **Datensatz aktualisieren** mit Base-übergreifendem Zugriff zurück auf die Base Vertrieb.
+1. Erstellen Sie einen zweiten Workflow im Projekt **Auftragsabwicklung**.
+2. Verwenden Sie **Wenn Datensatz aktualisiert wird** → **Datensatz aktualisieren** mit Projekt-übergreifendem Zugriff zurück auf das Projekt Vertrieb.
3. Verwenden Sie einen Filter, um Endlosschleifen zu vermeiden – lösen Sie den Workflow z. B. nur aus, wenn sich bestimmte Felder ändern, und prüfen Sie vor der Aktualisierung, ob der Wert tatsächlich abweicht.
diff --git a/de/basic/automation/trigger/external/webhook-received.mdx b/de/basic/automation/trigger/external/webhook-received.mdx
index c7cbb3df..5da6a5ed 100644
--- a/de/basic/automation/trigger/external/webhook-received.mdx
+++ b/de/basic/automation/trigger/external/webhook-received.mdx
@@ -78,7 +78,7 @@ Stellen Sie **Antwort** jederzeit wieder auf **Standard** um, um zu Teables eige
## Webhook testen
-Am einfachsten testen Sie den Webhook mit `curl` über die Befehlszeile. Kopieren Sie die echte URL aus dem Auslöserbereich, anstatt sie einzutippen; sie enthält die Base- und Workflow-IDs.
+Am einfachsten testen Sie den Webhook mit `curl` über die Befehlszeile. Kopieren Sie die echte URL aus dem Auslöserbereich, anstatt sie einzutippen; sie enthält die Projekt- und Workflow-IDs.
**Ohne Autorisierung:**
@@ -120,7 +120,7 @@ Prüfen Sie nach dem Senden einer Testanfrage den Ausführungsverlauf der Automa
| Umfang | Begrenzung |
|---|---|
-| Pro Base | 50 Anfragen/Sekunde |
+| Pro Projekt | 50 Anfragen/Sekunde |
| Pro Workflow | 2 Anfragen/Sekunde |
Anfragen, die die Ratenbegrenzung überschreiten, erhalten eine HTTP-429-Antwort. Wenn Ihr externes System viele Anfragen in kurzer Zeit sendet, sollten Sie eine Wiederholungslogik mit exponentiellem Backoff implementieren.
diff --git a/de/basic/base.mdx b/de/basic/base.mdx
index a6fa1a91..e590ca36 100644
--- a/de/basic/base.mdx
+++ b/de/basic/base.mdx
@@ -1,42 +1,44 @@
---
title: "Übersicht"
-description: "Bases erstellen, verwalten, importieren und exportieren. Daten zwischen Teable-Cloud-Spaces verschieben oder mithilfe von .tea-Dateien zwischen Cloud- und Self-Hosted-Instanzen migrieren."
+description: "Projekte erstellen, verwalten, importieren und exportieren. Daten zwischen Teable-Cloud-Spaces verschieben oder mithilfe von .tea-Dateien zwischen Cloud- und Self-Hosted-Instanzen migrieren."
---
{/* mintlify-resync: 2026-05-26 */}
-Eine Base ist ein Werkzeug zum Speichern und Verarbeiten aller Informationen für ein bestimmtes Projekt. Jeder Space kann mehrere Bases enthalten, und jede Base kann unabhängig arbeiten und so eine klare Informationsstruktur für bestimmte Projekte oder Tabellensammlungen bieten.
+Ein Projekt bündelt zusammengehörige Tabellen, Apps und Automatisierungen. Jeder Space kann mehrere Projekte enthalten. Jedes Projekt hat eigene Ressourcen und Berechtigungen für die Zusammenarbeit.
-Wenn Sie mit Bases noch nicht vertraut sind, können Sie sie sich wie Arbeitsmappen in Excel vorstellen, wobei jede Arbeitsmappe mehrere Tabellenblätter enthalten kann.
+Projekt ist der Produktname für die Ressource `base` in API und CLI. API-Felder wie `baseId`, das ID-Präfix `bse` und URLs unter `/base/...` bleiben unverändert.
-## Bases erstellen und verwalten
+Wenn Sie mit Projekten noch nicht vertraut sind, können Sie sie sich wie Arbeitsmappen in Excel vorstellen, wobei jede Arbeitsmappe mehrere Tabellenblätter enthalten kann.
-### Eine Base hinzufügen
+## Projekte erstellen und verwalten {#bases-erstellen-und-verwalten}
+
+### Ein Projekt hinzufügen {#eine-base-hinzufügen}
1. Öffnen Sie einen Space.
-2. Klicken Sie oben rechts auf „Base erstellen“.
+2. Klicken Sie oben rechts auf „Projekt erstellen“.
-### Eine Base umbenennen/löschen
+### Ein Projekt umbenennen/löschen {#eine-base-umbenennenlöschen}
1. Öffnen Sie einen Space.
-2. Bewegen Sie den Mauszeiger über eine Base.
+2. Bewegen Sie den Mauszeiger über ein Projekt.
3. Klicken Sie auf die Schaltfläche „···“, um das Menü zu öffnen.
4. Klicken Sie auf „Umbenennen“ oder „Löschen“.
-### Ressourcen in einer Base organisieren
+### Ressourcen in einem Projekt organisieren {#ressourcen-in-einer-base-organisieren}
-Nach dem Öffnen einer Base zeigt die linke Seitenleiste die Ressourcen der aktuellen Base an, etwa Tabellen, Apps und Automatisierungen. Sie können Ordner verwenden, um diese Ressourcen zu organisieren und große Bases einfacher zu durchsuchen.
+Nach dem Öffnen eines Projekts zeigt die linke Seitenleiste die Ressourcen des aktuellen Projekts an, etwa Tabellen, Apps und Automatisierungen. Sie können Ordner verwenden, um diese Ressourcen zu organisieren und große Projekte einfacher zu durchsuchen.
Zu den häufigen Vorgängen gehören:
@@ -46,40 +48,40 @@ Zu den häufigen Vorgängen gehören:
- **Beschreibungen hinzufügen**: Klicken Sie bei Tabellen, Apps und Automatisierungen in der Kopfzeile unter dem Ressourcennamen auf **Beschreibung hinzufügen**. Verwenden Sie Beschreibungen, um Zweck, Verantwortliche, Übergabehinweise oder Nutzungsregeln festzuhalten. Teable öffnet eine Beschreibung beim ersten Öffnen ihrer Ressource und noch einmal, nachdem sie geändert wurde.
- **Knoteninformationen prüfen**: Öffnen Sie das Menü `...` einer Ressource und wählen Sie **Knoteninformationen**, um die Ordner-, Tabellen-, Automatisierungs- oder App-ID sowie Erstellungs- und Änderungsinformationen anzuzeigen.
-### Eine Base in einen anderen Space duplizieren {#duplicate-a-base-to-another-space}
+### Ein Projekt in einen anderen Space duplizieren {#duplicate-a-base-to-another-space}
-Schritt 1: Wählen Sie im Space die Base aus, die Sie duplizieren möchten.
+Schritt 1: Wählen Sie im Space das Projekt aus, das Sie duplizieren möchten.
-Schritt 2: Klicken Sie auf das Menüsymbol und wählen Sie die Option „Base kopieren“.
+Schritt 2: Klicken Sie auf das Menüsymbol und wählen Sie die Option „Projekt kopieren“.
Schritt 3: Wählen Sie im Pop-up den Ziel-Space aus. Sie benötigen in diesem Space Erstellerberechtigungen.
-Bei größeren Bases zeigt Teable im Duplizierungsdialog den Fortschritt an, während die Base-Struktur, Datensätze und Anhänge kopiert werden. Lassen Sie den Dialog geöffnet, bis der Kopiervorgang abgeschlossen ist. Versionsverlauf und Mitwirkende werden nicht kopiert.
+Bei größeren Projekten zeigt Teable im Duplizierungsdialog den Fortschritt an, während die Projekt-Struktur, Datensätze und Anhänge kopiert werden. Lassen Sie den Dialog geöffnet, bis der Kopiervorgang abgeschlossen ist. Versionsverlauf und Mitwirkende werden nicht kopiert.
-Wenn die Base Link-, Lookup-, Rollup-, bedingte Lookup- oder bedingte Rollup-Felder enthält, die auf einen anderen Space verweisen, zeigt Teable die betroffenen Felder vor der Duplizierung an. Wenn Sie fortfahren, wandelt Teable diese Felder in der duplizierten Base in **Einzeiliger Text** um.
+Wenn das Projekt Link-, Lookup-, Rollup-, bedingte Lookup- oder bedingte Rollup-Felder enthält, die auf einen anderen Space verweisen, zeigt Teable die betroffenen Felder vor der Duplizierung an. Wenn Sie fortfahren, wandelt Teable diese Felder in dem duplizierten Projekt in **Einzeiliger Text** um.
-### Eine Base zwischen Spaces verschieben
+### Ein Projekt zwischen Spaces verschieben {#eine-base-zwischen-spaces-verschieben}
-Wenn Sie über die erforderlichen Space-Berechtigungen verfügen, können Sie eine Base in einen anderen Space verschieben. Falls durch das Verschieben beziehungsbasierte Felder über Spaces hinweg verweisen würden, warnt Teable Sie und listet die betroffenen Felder auf. Nach Ihrer Bestätigung wandelt Teable diese Felder beim Verschieben in **Einzeiliger Text** um.
+Wenn Sie über die erforderlichen Space-Berechtigungen verfügen, können Sie ein Projekt in einen anderen Space verschieben. Falls durch das Verschieben beziehungsbasierte Felder über Spaces hinweg verweisen würden, warnt Teable Sie und listet die betroffenen Felder auf. Nach Ihrer Bestätigung wandelt Teable diese Felder beim Verschieben in **Einzeiliger Text** um.
-## Bases importieren und exportieren
+## Projekte importieren und exportieren {#bases-importieren-und-exportieren}
Migrieren Sie Airtable, Baserow, NocoDB, SmartSuite und andere Systeme mit AI Chat zu Teable.
-### Base importieren (Datenmigration)
+### Projekt importieren (Datenmigration) {#base-importieren-datenmigration}
-Das Dateiformat `.tea` importiert eine vollständige Base mit allen Tabellen, Feldern, Daten und Konfigurationen. Dies ist nützlich für:
-- **Datenmigration**: Bases zwischen verschiedenen Teable-Instanzen verschieben (z. B. von Cloud zu Self-Hosted)
-- **Wiederherstellung von Backups**: Eine zuvor exportierte Base wiederherstellen
-- **Vorlagenfreigabe**: Vollständige Base-Strukturen mit anderen Teams teilen
+Das Dateiformat `.tea` importiert ein vollständiges Projekt mit allen Tabellen, Feldern, Daten und Konfigurationen. Dies ist nützlich für:
+- **Datenmigration**: Projekte zwischen verschiedenen Teable-Instanzen verschieben (z. B. von Cloud zu Self-Hosted)
+- **Wiederherstellung von Backups**: Ein zuvor exportiertes Projekt wiederherstellen
+- **Vorlagenfreigabe**: Vollständige Projekt-Strukturen mit anderen Teams teilen
**Schritte:**
1. Öffnen Sie den Space.
@@ -89,19 +91,19 @@ Das Dateiformat `.tea` importiert eine vollständige Base mit allen Tabellen, Fe
-Wenn Sie eine Base aus Airtable erstellen möchten, wählen Sie im selben Importdialog **Aus Airtable importieren**.
+Wenn Sie ein Projekt aus Airtable erstellen möchten, wählen Sie im selben Importdialog **Aus Airtable importieren**.
-### Base exportieren (Backup und Migration) {#export-base-backup-&-migration}
+### Projekt exportieren (Backup und Migration) {#export-base-backup-&-migration}
-Exportieren Sie Ihre Base für Backup- oder Migrationszwecke in eine `.tea`-Datei. Die exportierte Datei enthält alle Tabellen, Felder, Daten, Ansichten und Konfigurationen.
+Exportieren Sie Ihr Projekt für Backup- oder Migrationszwecke in eine `.tea`-Datei. Die exportierte Datei enthält alle Tabellen, Felder, Daten, Ansichten und Konfigurationen.
**Schritte:**
1. Öffnen Sie den Space.
-2. Bewegen Sie den Mauszeiger über die Base, die Sie exportieren möchten.
+2. Bewegen Sie den Mauszeiger über das Projekt, das Sie exportieren möchten.
3. Klicken Sie auf die Schaltfläche „···“, um das Menü zu öffnen.
4. Klicken Sie auf „Exportieren“.
5. Lassen Sie **Datensätze einschließen** aktiviert, um Datensatzdaten zu exportieren. Deaktivieren Sie die Option, um nur Struktur und Konfiguration zu exportieren.
@@ -110,28 +112,28 @@ Exportieren Sie Ihre Base für Backup- oder Migrationszwecke in eine `.tea`-Date
-- Um Daten zwischen Teable-Instanzen zu migrieren, exportieren Sie Ihre Base aus der Quellinstanz und importieren Sie anschließend die `.tea`-Datei in die Zielinstanz. Alle Daten und Konfigurationen bleiben erhalten.
-- Teable wandelt baseübergreifende Beziehungsfelder in der exportierten Datei in Felder vom Typ **Einzeiliger Text** um.
-- Wenn Sie eine Base Spaces-übergreifend duplizieren oder verschieben, werden Space-übergreifende Beziehungsfelder in **Einzeiliger Text** umgewandelt.
+- Um Daten zwischen Teable-Instanzen zu migrieren, exportieren Sie Ihr Projekt aus der Quellinstanz und importieren Sie anschließend die `.tea`-Datei in die Zielinstanz. Alle Daten und Konfigurationen bleiben erhalten.
+- Teable wandelt projektübergreifende Beziehungsfelder in der exportierten Datei in Felder vom Typ **Einzeiliger Text** um.
+- Wenn Sie ein Projekt Spaces-übergreifend duplizieren oder verschieben, werden Space-übergreifende Beziehungsfelder in **Einzeiliger Text** umgewandelt.
-## Eine Base teilen
+## Ein Projekt teilen {#eine-base-teilen}
-Bases können über öffentliche Links geteilt werden. Der Freigabeumfang kann die gesamte Base oder das aktuell ausgewählte Element sein.
+Projekte können über öffentliche Links geteilt werden. Der Freigabeumfang kann das gesamte Projekt oder das aktuell ausgewählte Element sein.
-1. Öffnen Sie die Ziel-Base.
-2. Öffnen Sie das Freigabemenü für die Base oder das ausgewählte Element.
+1. Öffnen Sie das Zielprojekt.
+2. Öffnen Sie das Freigabemenü für das Projekt oder das ausgewählte Element.
3. Aktivieren Sie **Im Web teilen**.
4. Kopieren Sie den Freigabelink oder QR-Code.
@@ -139,29 +141,29 @@ Freigabeumfänge:
| Umfang | Beschreibung |
|------|------|
-| **Gesamte Base teilen** | Teilt alle Elemente der aktuellen Base. Später hinzugefügte Tabellen und Ordner werden automatisch einbezogen. |
+| **Gesamtes Projekt teilen** | Teilt alle Elemente des aktuellen Projekts. Später hinzugefügte Tabellen und Ordner werden automatisch einbezogen. |
| **Ausgewähltes Element teilen** | Teilt das aktuell ausgewählte Element. Wird ein Ordner geteilt, werden seine untergeordneten Elemente einbezogen. |
In den Freigabeeinstellungen können Sie Linkberechtigungen, **Zuschauern das Kopieren von Daten erlauben**, Passwortzugriff, die Neuerstellung oder Löschung des Links sowie das Kopieren der Einbettungskonfiguration festlegen.
Wenn der Freigabeumfang eine App umfasst, muss die App veröffentlicht sein, bevor über den öffentlichen Link darauf zugegriffen werden kann.
-## Funktionen innerhalb einer Base
+## Funktionen innerhalb eines Projekts {#funktionen-innerhalb-einer-base}
-Eine Base kann mehrere Tabellen enthalten, um arbeits- oder geschäftsbezogene Informationen zu erfassen und zu organisieren.
+Ein Projekt kann mehrere Tabellen enthalten, um arbeits- oder geschäftsbezogene Informationen zu erfassen und zu organisieren.
-Beispiel: Eine Base zur Kundenverwaltung kann separate Tabellen für „Kundenunternehmen“, „Kundenkontakte“ und „Kunden-Follow-ups“ enthalten, während eine Base zur Verwaltung von Besprechungsräumen separate Tabellen für „Besprechungsraumverwaltung“, „Besprechungsraumausstattung“ und „Besprechungsraumreservierungen“ enthalten kann.
+Beispiel: Ein Projekt zur Kundenverwaltung kann separate Tabellen für „Kundenunternehmen“, „Kundenkontakte“ und „Kunden-Follow-ups“ enthalten, während ein Projekt zur Verwaltung von Besprechungsräumen separate Tabellen für „Besprechungsraumverwaltung“, „Besprechungsraumausstattung“ und „Besprechungsraumreservierungen“ enthalten kann.
-Daher beziehen sich die meisten Funktionen innerhalb einer Base auf Tabellen:
+Daher beziehen sich die meisten Funktionen innerhalb eines Projekts auf Tabellen:
-* **Tabellen erstellen**: Bases ermöglichen es Benutzern, neue Tabellen anhand projektspezifischer Anforderungen zu erstellen, wobei sie Tabellenstruktur, Felder und Datentypen definieren können.
-* **Tabellen bearbeiten**: Benutzer können vorhandene Tabellen in der Base bearbeiten, einschließlich des Hinzufügens, Löschens und Änderns von Datensätzen.
-* **Daten exportieren und importieren**: Bases unterstützen den Export von Daten nach CSV sowie den Import von Daten im CSV- und XLSX-Format.
+* **Tabellen erstellen**: Projekte ermöglichen es Benutzern, neue Tabellen anhand projektspezifischer Anforderungen zu erstellen, wobei sie Tabellenstruktur, Felder und Datentypen definieren können.
+* **Tabellen bearbeiten**: Benutzer können vorhandene Tabellen in dem Projekt bearbeiten, einschließlich des Hinzufügens, Löschens und Änderns von Datensätzen.
+* **Daten exportieren und importieren**: Projekte unterstützen den Export von Daten nach CSV sowie den Import von Daten im CSV- und XLSX-Format.
Weitere Informationen zu Tabellen finden Sie im Abschnitt [Tabellen](/de/basic/table).
diff --git a/de/basic/credential.mdx b/de/basic/credential.mdx
index 3ad05d03..d862adb0 100644
--- a/de/basic/credential.mdx
+++ b/de/basic/credential.mdx
@@ -39,7 +39,7 @@ Bei jedem Eintrag steht, wie viele Ressourcen ihn derzeit verwenden. **Anzeigen*
Jede Freigabe braucht einen **Variablennamen**, also den Alias, unter dem die Zugangsdaten in dieser App oder Automatisierung stehen. Es gelten dieselben Namensregeln wie für einen Secret-Key, und genau diesen Namen liest der Code.
-Im Bereich können außerdem Platzhalter mit **Noch nicht gebunden** stehen. Beim Kopieren einer App, Duplizieren eines Workflows sowie beim Importieren oder Duplizieren einer Datenbank werden nur die im Code erwarteten Aliase übernommen, nicht die Zugangsdaten. Mit **Meins binden** hinterlegen Sie Ihre eigenen, damit die App oder Automatisierung läuft.
+Im Bereich können außerdem Platzhalter mit **Noch nicht gebunden** stehen. Beim Kopieren einer App, Duplizieren eines Workflows sowie beim Importieren oder Duplizieren eines Projekts werden nur die im Code erwarteten Aliase übernommen, nicht die Zugangsdaten. Mit **Meins binden** hinterlegen Sie Ihre eigenen, damit die App oder Automatisierung läuft.
Gehören die Zugangsdaten hinter einem Alias jemand anderem, übernehmen Sie ihn mit **Durch meins ersetzen**. **Nur Freigabe entfernen (Platzhalter behalten)** löst nur die Bindung und lässt den Platzhalter stehen, sodass der Code unverändert bleibt.
diff --git a/de/basic/security.mdx b/de/basic/security.mdx
index d16b43b1..ac2ca8f6 100644
--- a/de/basic/security.mdx
+++ b/de/basic/security.mdx
@@ -112,13 +112,13 @@ Teable bietet mehrere Möglichkeiten, Ihre Daten zu sichern:
| Methode | Beschreibung | Anwendungsfall |
|--------|-------------|----------|
-| **[Base-Export](/de/basic/base#export-base-backup-&-migration)** | Gesamte Base als `.tea`-Datei herunterladen (Struktur, Daten, Automatisierungen) | Vollständige Sicherung, Migration |
-| **[Base duplizieren](/de/basic/base#duplicate-a-base-to-another-space)** | Eine Kopie der Base innerhalb von Teable erstellen | Schnappschuss |
+| **[Projekt-Export](/de/basic/base#export-base-backup-&-migration)** | Gesamtes Projekt als `.tea`-Datei herunterladen (Struktur, Daten, Automatisierungen) | Vollständige Sicherung, Migration |
+| **[Projekt duplizieren](/de/basic/base#duplicate-a-base-to-another-space)** | Eine Kopie des Projekts innerhalb von Teable erstellen | Schnappschuss |
| **[CSV-Export](/de/basic/table/export)** | Daten einer einzelnen Tabelle exportieren | Datenportabilität |
| **[API-Export](/de/api-doc/record/get)** | Datensätze programmgesteuert über die REST API exportieren | Automatisierte Sicherungen |
-Sie können Ihre Bases manuell sichern, indem Sie die gesamte Base als `.tea`-Datei exportieren, einzelne Tabellen als CSV-Dateien exportieren oder Ihre Daten über die Teable API abrufen.
+Sie können Ihre Projekte manuell sichern, indem Sie das gesamte Projekt als `.tea`-Datei exportieren, einzelne Tabellen als CSV-Dateien exportieren oder Ihre Daten über die Teable API abrufen.
## Einmalanmeldung (SSO)
diff --git a/de/basic/space.mdx b/de/basic/space.mdx
index fae06f58..ec2f11bb 100644
--- a/de/basic/space.mdx
+++ b/de/basic/space.mdx
@@ -64,15 +64,15 @@ Gelöschte Spaces werden in den Papierkorb verschoben. Dort können Sie den Papi
## Mit mir geteilt
-Wenn jemand eine Base als Mitbearbeiter mit Ihnen teilt, wird die Base in der Seitenleiste des Space unter **Mit mir geteilt** angezeigt.
+Wenn jemand ein Projekt als Mitbearbeiter mit Ihnen teilt, wird das Projekt in der Seitenleiste des Space unter **Mit mir geteilt** angezeigt.
-Mit Ihnen geteilte Bases unterscheiden sich von Bases in Ihren eigenen Spaces:
+Mit Ihnen geteilte Projekte unterscheiden sich von Projekten in Ihren eigenen Spaces:
-- Der Zugriff wird von der Person gesteuert, die die Base geteilt hat.
-- Die verfügbaren Aktionen hängen von der Ihnen erteilten Base-Berechtigung ab.
-- Wenn die teilende Person Ihren Zugriff entfernt, wird die Base nicht mehr angezeigt.
+- Der Zugriff wird von der Person gesteuert, die das Projekt geteilt hat.
+- Die verfügbaren Aktionen hängen von der Ihnen erteilten Projekt-Berechtigung ab.
+- Wenn die teilende Person Ihren Zugriff entfernt, wird das Projekt nicht mehr angezeigt.
-Informationen zur öffentlichen Freigabe von Bases finden Sie unter [Base](/de/basic/base).
+Informationen zur öffentlichen Freigabe von Projekten finden Sie unter [Projekt](/de/basic/base).
## Space-Einstellungen
@@ -95,7 +95,7 @@ Auf der Seite „KI-Einstellungen“ können Space-Inhaber benutzerdefinierte Mo
**Chat in IM**
-Auf der Seite **Chat in IM** können Space-Administratoren Bots erstellen und deren Modell, zugängliche Bases, Skills, Dateien und IM-Integration konfigurieren.
+Auf der Seite **Chat in IM** können Space-Administratoren Bots erstellen und deren Modell, zugängliche Projekte, Skills, Dateien und IM-Integration konfigurieren.
**Plan**
diff --git a/de/basic/space/base-invite.mdx b/de/basic/space/base-invite.mdx
index 6381e744..3b7f81ed 100644
--- a/de/basic/space/base-invite.mdx
+++ b/de/basic/space/base-invite.mdx
@@ -1,39 +1,39 @@
---
-title: "Base-Einladung"
-description: "Berechtigungen auf Base-Ebene verwalten. Laden Sie Mitglieder zu einer bestimmten Base ein, ohne Zugriff auf den gesamten Space zu gewähren – für eine detailliertere und sicherere Datenzusammenarbeit."
+title: "Projekt-Einladung"
+description: "Berechtigungen auf Projekt-Ebene verwalten. Laden Sie Mitglieder zu einem bestimmten Projekt ein, ohne Zugriff auf den gesamten Space zu gewähren – für eine detailliertere und sicherere Datenzusammenarbeit."
---
-## Was ist ein Base-Mitbearbeiter?
+## Was ist ein Projekt-Mitbearbeiter? {#was-ist-ein-base-mitbearbeiter}
-Ein Base-Mitbearbeiter ist ein Mitglied, das nur zu einer bestimmten Base eingeladen wurde. Anders als Space-Mitbearbeiter können sie nur auf die Bases zugreifen, zu denen sie eingeladen wurden, und keine anderen Bases im Space sehen.
+Ein Projekt-Mitbearbeiter ist ein Mitglied, das nur zu einem bestimmten Projekt eingeladen wurde. Anders als Space-Mitbearbeiter können sie nur auf die Projekte zugreifen, zu denen sie eingeladen wurden, und keine anderen Projekte im Space sehen.
-## Base-Mitbearbeiter hinzufügen
+## Projekt-Mitbearbeiter hinzufügen {#base-mitbearbeiter-hinzufügen}
-Öffnen Sie eine beliebige Base und klicken Sie oben rechts auf die Schaltfläche `Einladen`. Es werden zwei Methoden unterstützt:
+Öffnen Sie ein beliebiges Projekt und klicken Sie oben rechts auf die Schaltfläche `Einladen`. Es werden zwei Methoden unterstützt:
-- **Per E-Mail einladen**: Geben Sie die E-Mail-Adresse des Empfängers ein, legen Sie die Base-Berechtigungsstufe fest (z. B. „Ersteller“) und klicken Sie auf **Einladung senden**.
+- **Per E-Mail einladen**: Geben Sie die E-Mail-Adresse des Empfängers ein, legen Sie die Projekt-Berechtigungsstufe fest (z. B. „Ersteller“) und klicken Sie auf **Einladung senden**.
- **Per Link einladen**: Wechseln Sie zur Registerkarte „Per Link einladen“, um einen speziellen Einladungslink zu generieren. Kopieren und teilen Sie den Link. Empfänger können durch Klicken auf den Link beitreten.
-Nachdem Sie eine E-Mail-Einladung gesendet haben, können Sie den im Bereich angezeigten direkten Base-Link kopieren und separat senden. Die eingeladene Person erhält außerdem eine In-App-Benachrichtigung, die die Base öffnet.
+Nachdem Sie eine E-Mail-Einladung gesendet haben, können Sie den im Bereich angezeigten direkten Projekt-Link kopieren und separat senden. Die eingeladene Person erhält außerdem eine In-App-Benachrichtigung, die das Projekt öffnet.
-Im Einladungsbereich können Sie alle Benutzer anzeigen, die aktuell Zugriff auf die Base haben:
+Im Einladungsbereich können Sie alle Benutzer anzeigen, die aktuell Zugriff auf das Projekt haben:
-- **Base-Mitbearbeiter**: Mitglieder, die nur direkt zu dieser Base eingeladen wurden.
-- **Space-Mitbearbeiter**: Neben ihrem Namen wird ein Badge „Space“ angezeigt. Dies bedeutet, dass sie Mitglieder auf Space-Ebene sind, die automatisch Zugriff auf diese Base erhalten.
+- **Projekt-Mitbearbeiter**: Mitglieder, die nur direkt zu diesem Projekt eingeladen wurden.
+- **Space-Mitbearbeiter**: Neben ihrem Namen wird ein Badge „Space“ angezeigt. Dies bedeutet, dass sie Mitglieder auf Space-Ebene sind, die automatisch Zugriff auf dieses Projekt erhalten.
-Die Base bietet vier Berechtigungsrollen für unterschiedliche Stufen der Zusammenarbeit. Einen detaillierten Berechtigungsvergleich finden Sie unter [Berechtigungsdetails](/de/basic/space/space-permission).
+Das Projekt bietet vier Berechtigungsrollen für unterschiedliche Stufen der Zusammenarbeit. Einen detaillierten Berechtigungsvergleich finden Sie unter [Berechtigungsdetails](/de/basic/space/space-permission).
Für eine detailliertere Steuerung auf Ebene von Tabelle, Feld oder Datensatz verwenden Sie die Funktion [Berechtigungsmatrix](/de/basic/authority-matrix).
@@ -46,12 +46,12 @@ Die Base bietet vier Berechtigungsrollen für unterschiedliche Stufen der Zusamm
## Anwendungsfälle
-Die Base-Einladung ist für externe Mitbearbeiter vorgesehen. Beispielsweise kann ein freiberuflicher Designer, der zum Organisieren einer Asset-Bibliothek beauftragt wurde, mit der Berechtigung **Bearbeiter** nur zu dieser Base eingeladen werden, ohne andere Bases im Space zu sehen.
+Die Projekt-Einladung ist für externe Mitbearbeiter vorgesehen. Beispielsweise kann ein freiberuflicher Designer, der zum Organisieren einer Asset-Bibliothek beauftragt wurde, mit der Berechtigung **Bearbeiter** nur zu diesem Projekt eingeladen werden, ohne andere Projekte im Space zu sehen.
## Hinweise
-- **Berechtigungsvererbung**: Ein Manager eines Space hat automatisch vollständigen Zugriff auf alle Bases in diesem Space und kann auf Base-Ebene nicht herabgestuft werden.
-- **Linksicherheit**: Jeder, der einen Einladungslink erhält, kann versuchen, der Base beizutreten. Wenn ein Link offengelegt wurde, können Sie ihn durch Klicken auf das X daneben im Einladungsbereich widerrufen.
+- **Berechtigungsvererbung**: Ein Manager eines Space hat automatisch vollständigen Zugriff auf alle Projekte in diesem Space und kann auf Projekt-Ebene nicht herabgestuft werden.
+- **Linksicherheit**: Jeder, der einen Einladungslink erhält, kann versuchen, dem Projekt beizutreten. Wenn ein Link offengelegt wurde, können Sie ihn durch Klicken auf das X daneben im Einladungsbereich widerrufen.
Wenn die [Berechtigungsmatrix](/de/basic/authority-matrix) und [Berechtigungsdetails](/de/basic/space/space-permission) gleichzeitig verwendet werden, sind nur Benutzer mit der Rolle **Manager** von Einschränkungen der Berechtigungsmatrix ausgenommen. Alle anderen Benutzer unterliegen diesen Einschränkungen.
diff --git a/de/basic/space/billing.mdx b/de/basic/space/billing.mdx
index 010db522..f75ab3ac 100644
--- a/de/basic/space/billing.mdx
+++ b/de/basic/space/billing.mdx
@@ -41,19 +41,19 @@ Klicken Sie auf **Plan ändern**, um die Planseite zu öffnen. Dort können Sie
| Kennzahl | Beschreibung |
|--------|-------------|
-| **Mitarbeitende insgesamt** | Anzahl der kostenpflichtigen Mitarbeitenden im aktuellen Space und seinen Bases |
+| **Mitarbeitende insgesamt** | Anzahl der kostenpflichtigen Mitarbeitenden im aktuellen Space und seinen Projekten |
| **Maximale monatliche Ausführungen von Automatisierungen** | Monatliches Kontingent für Ausführungen von Automatisierungen. Jede Ausführung einer Automatisierung verbraucht 1 Einheit des Ausführungskontingents |
| **Datensätze insgesamt** | Gesamtzahl der Zeilen in allen Tabellen im Space |
| **Anhangsspeicher** | Gesamter Speicherplatz, der von hochgeladenen Anhängen verwendet wird |
| **E-Mails insgesamt** | E-Mails, die über eine Automatisierung mit dem Teable-E-Mail-Service gesendet wurden |
-Daten sowohl im Papierkorb des Space als auch im Papierkorb der Base werden in der Gesamtstatistik der Datensätze gezählt. Um die Gesamtzahl der Datensätze zu reduzieren, bereinigen Sie Daten unter „Space → Papierkorb“ oder „Base → Papierkorb“.
+Daten sowohl im Papierkorb des Space als auch im Papierkorb des Projekts werden in der Gesamtstatistik der Datensätze gezählt. Um die Gesamtzahl der Datensätze zu reduzieren, bereinigen Sie Daten unter „Space → Papierkorb“ oder „Projekt → Papierkorb“.
-Klicken Sie auf der Karte **Datensätze insgesamt** auf **Details**, um die Datensatznutzung nach Base anzuzeigen. Der Dialog zeigt aktive Datensätze, Datensätze im Papierkorb und Datensätze insgesamt für jede Base. Sie können über den Dialog eine Papierkorbseite einer Base öffnen oder eine bereits im Papierkorb befindliche Base dauerhaft löschen.
+Klicken Sie auf der Karte **Datensätze insgesamt** auf **Details**, um die Datensatznutzung nach Projekt anzuzeigen. Der Dialog zeigt aktive Datensätze, Datensätze im Papierkorb und Datensätze insgesamt für jedes Projekt. Sie können über den Dialog eine Papierkorbseite eines Projekts öffnen oder ein bereits im Papierkorb befindliches Projekt dauerhaft löschen.
### Wenn ein Limit erreicht wird
-Wenn der Space ein Planlimit erreicht, stoppt Teable die Aktion vor ihrer Ausführung und öffnet den Upgrade-Dialog. Dieser nennt das erreichte Limit, zeigt die bereits verwendete Menge an und verlinkt auf die Nutzung pro Base. Dies gilt für Einfügen, Ausfüllen, Duplizieren von Zeilen, massenhaftes Erstellen von Datensätzen, Importieren und Hochladen von Anhängen.
+Wenn der Space ein Planlimit erreicht, stoppt Teable die Aktion vor ihrer Ausführung und öffnet den Upgrade-Dialog. Dieser nennt das erreichte Limit, zeigt die bereits verwendete Menge an und verlinkt auf die Nutzung pro Projekt. Dies gilt für Einfügen, Ausfüllen, Duplizieren von Zeilen, massenhaftes Erstellen von Datensätzen, Importieren und Hochladen von Anhängen.
Um fortzufahren, führen Sie ein Upgrade des Plans durch oder schaffen Sie Platz, indem Sie Datensätze oder Anhänge löschen.
@@ -129,9 +129,9 @@ Eine Änderung eines bestehenden Abonnements erfolgt über eine Bestätigungssei
### Sitzplätze
-Sitzplätze werden im Voraus gekauft; es ist in Ordnung, mehr Sitzplätze als aktuell für Ihr Team nötig zu erwerben. Ein Sitzplatz wird von Mitarbeitenden mit der Rolle **Eigentümer**, **Ersteller** oder **Bearbeiter** im Space und seinen Bases belegt. **Kommentator** und **Betrachter** sind kostenlos.
+Sitzplätze werden im Voraus gekauft; es ist in Ordnung, mehr Sitzplätze als aktuell für Ihr Team nötig zu erwerben. Ein Sitzplatz wird von Mitarbeitenden mit der Rolle **Eigentümer**, **Ersteller** oder **Bearbeiter** im Space und seinen Projekten belegt. **Kommentator** und **Betrachter** sind kostenlos.
-Bei Cloud-Plänen sind die erworbenen Sitzplätze eine feste Obergrenze. Teable blockiert jede Aktion, die den Space darüber hinausführen würde, und bietet an, Sitzplätze hinzuzufügen. Dies umfasst E-Mail-Einladungen, das Erstellen eines Einladungslinks mit einer kostenpflichtigen Rolle oder das Ändern eines Links zu einem solchen, den Beitritt über einen solchen Link, das direkte Hinzufügen von Mitarbeitenden und die Beförderung einer Person zu einer kostenpflichtigen Rolle. Wer bereits einen Sitzplatz hat, kann einer weiteren Base beitreten oder die Rolle ändern, ohne einen neuen Sitzplatz zu belegen.
+Bei Cloud-Plänen sind die erworbenen Sitzplätze eine feste Obergrenze. Teable blockiert jede Aktion, die den Space darüber hinausführen würde, und bietet an, Sitzplätze hinzuzufügen. Dies umfasst E-Mail-Einladungen, das Erstellen eines Einladungslinks mit einer kostenpflichtigen Rolle oder das Ändern eines Links zu einem solchen, den Beitritt über einen solchen Link, das direkte Hinzufügen von Mitarbeitenden und die Beförderung einer Person zu einer kostenpflichtigen Rolle. Wer bereits einen Sitzplatz hat, kann einem weiteren Projekt beitreten oder die Rolle ändern, ohne einen neuen Sitzplatz zu belegen.
Um fortzufahren, fügen Sie auf der Planseite Sitzplätze hinzu oder weisen Sie der Person die kostenlose Rolle Kommentator oder Betrachter zu. Nur der Space-Eigentümer kann Sitzplätze kaufen.
diff --git a/de/basic/space/space-invite.mdx b/de/basic/space/space-invite.mdx
index 5039524f..85196983 100644
--- a/de/basic/space/space-invite.mdx
+++ b/de/basic/space/space-invite.mdx
@@ -5,7 +5,7 @@ description: "Andere per E-Mail oder Link als Space-Mitbearbeiter einladen"
## Was ist ein Space-Mitbearbeiter?
-Wenn Sie einen Space mit einem anderen Benutzer teilen, wird dieser zu einem Space-Mitbearbeiter mit Zugriff auf alle Bases in diesem Space.
+Wenn Sie einen Space mit einem anderen Benutzer teilen, wird dieser zu einem Space-Mitbearbeiter mit Zugriff auf alle Projekte in diesem Space.
## Space-Mitbearbeiter hinzufügen
@@ -14,7 +14,7 @@ Wenn Sie einen Space mit einem anderen Benutzer teilen, wird dieser zu einem Spa
1. Klicken Sie in der linken Seitenleiste auf den Space, dem Sie Mitbearbeiter hinzufügen möchten.
2. Klicken Sie oben im Space auf die Schaltfläche „Einladen“.
3. Dadurch wird das Space-Einladungsfenster geöffnet. Dort finden Sie Optionen zum Einladen per E-Mail oder Link. Außerdem werden zuvor konfigurierte „Einladungslinks“ und vorhandene „Space-Mitbearbeiter“ in den jeweiligen Bereichen angezeigt.
-4. **E-Mail-Einladung**: Geben Sie eine E-Mail-Adresse oder mehrere durch Kommas getrennte Adressen ein. Legen Sie dann die Berechtigungsstufe fest, die Benutzer für alle Bases im Space erhalten sollen. Klicken Sie abschließend auf „E-Mail senden“, um Benutzer zur Zusammenarbeit einzuladen.
+4. **E-Mail-Einladung**: Geben Sie eine E-Mail-Adresse oder mehrere durch Kommas getrennte Adressen ein. Legen Sie dann die Berechtigungsstufe fest, die Benutzer für alle Projekte im Space erhalten sollen. Klicken Sie abschließend auf „E-Mail senden“, um Benutzer zur Zusammenarbeit einzuladen.
Nachdem Sie eine E-Mail-Einladung gesendet haben, können Sie den im Bereich angezeigten direkten Space-Link kopieren und separat senden. Die eingeladene Person erhält außerdem eine In-App-Benachrichtigung, die den Space öffnet.
@@ -24,7 +24,7 @@ Wenn Sie einen Space mit einem anderen Benutzer teilen, wird dieser zu einem Spa
className="docs-screenshot"
/>
-5. **Link-Einladung**: Klicken Sie auf die Option „Per Link einladen“. Legen Sie dann die Berechtigungsstufe fest, die der Einladungslink für alle Bases im Space gewährt. Klicken Sie abschließend auf „Link erstellen“. Nun können Sie auf das Zwischenablagesymbol neben dem erstellten Link klicken, um ihn nach Belieben zu teilen.
+5. **Link-Einladung**: Klicken Sie auf die Option „Per Link einladen“. Legen Sie dann die Berechtigungsstufe fest, die der Einladungslink für alle Projekte im Space gewährt. Klicken Sie abschließend auf „Link erstellen“. Nun können Sie auf das Zwischenablagesymbol neben dem erstellten Link klicken, um ihn nach Belieben zu teilen.
-Space-Mitbearbeiter haben Zugriff auf alle Bases im Space. Wenn jemand nur an bestimmten Bases arbeiten muss, sollten Sie die Person als [Base-Mitbearbeiter](/de/basic/space/base-invite) hinzufügen.
+Space-Mitbearbeiter haben Zugriff auf alle Projekte im Space. Wenn jemand nur an bestimmten Projekten arbeiten muss, sollten Sie die Person als [Projekt-Mitbearbeiter](/de/basic/space/base-invite) hinzufügen.
## Einladungslinks löschen
@@ -56,7 +56,7 @@ Sie können Space-Mitbearbeiter im Freigabefenster des Space entfernen. Klicken
* **Berechtigungseinschränkung**: Nur Benutzer mit den Berechtigungen Manager oder Ersteller können andere Mitbearbeiter entfernen.
* **Selbstentfernung**: Sie können Ihren eigenen Zugriff entfernen, wenn es mindestens einen weiteren Manager im Space gibt.
-* **Umfang**: Das Entfernen einer Person aus dem Space entfernt nicht die Berechtigungen, die sie für einzelne Bases besitzt.
+* **Umfang**: Das Entfernen einer Person aus dem Space entfernt nicht die Berechtigungen, die sie für einzelne Projekte besitzt.
Beim Hinzufügen neuer Benutzer zu einem Space können Sie folgende Rollen zuweisen (siehe [Berechtigungsdetails](/de/basic/space/space-permission)):
@@ -68,9 +68,9 @@ Beim Hinzufügen neuer Benutzer zu einem Space können Sie folgende Rollen zuwei
| Kommentator | Kann Datensätze kommentieren, aber keine Daten ändern. |
| Betrachter | Kann Daten anzeigen, aber nicht kommentieren. |
-## Base-Zugriff prüfen
+## Projekt-Zugriff prüfen {#base-zugriff-prüfen}
-Jede Person oder Abteilung wird einmal in der Liste der Space-Mitbearbeiter angezeigt, auch wenn sie zusätzlich Berechtigungen für einzelne Bases besitzt. Ein Badge **Base-Berechtigungen** neben der Rolle zeigt, zu wie vielen Bases die Person eingeladen wurde. Personen, die nie zum Space selbst hinzugefügt wurden, werden als **Hat nur Zugriff auf ausgewählte Bases** aufgeführt.
+Jede Person oder Abteilung wird einmal in der Liste der Space-Mitbearbeiter angezeigt, auch wenn sie zusätzlich Berechtigungen für einzelne Projekte besitzt. Ein Badge **Projekt-Berechtigungen** neben der Rolle zeigt, zu wie vielen Projekten die Person eingeladen wurde. Personen, die nie zum Space selbst hinzugefügt wurden, werden als **Hat nur Zugriff auf ausgewählte Projekte** aufgeführt.
-Erweitern Sie eine Zeile, um diese Bases und die jeweilige Rolle anzuzeigen. Dort entzieht **Base-Zugriff entfernen** eine einzelne Base-Berechtigung, und **Mitbearbeiter entfernen** in einer Zeile nur für die Base entzieht alle Base-Berechtigungen, die diese Person in diesem Space besitzt.
+Erweitern Sie eine Zeile, um diese Projekte und die jeweilige Rolle anzuzeigen. Dort entzieht **Projekt-Zugriff entfernen** eine einzelne Projekt-Berechtigung, und **Mitbearbeiter entfernen** in einer Zeile nur für das Projekt entzieht alle Projekt-Berechtigungen, die diese Person in diesem Space besitzt.
diff --git a/de/basic/space/space-permission.mdx b/de/basic/space/space-permission.mdx
index 3dba404e..43a2ea54 100644
--- a/de/basic/space/space-permission.mdx
+++ b/de/basic/space/space-permission.mdx
@@ -1,20 +1,20 @@
---
title: "Details zu Zusammenarbeitsberechtigungen"
-description: "Dieser Abschnitt beschreibt den Funktionsumfang von vier verschiedenen Berechtigungsstufen in Spaces und Bases."
+description: "Dieser Abschnitt beschreibt den Funktionsumfang von vier verschiedenen Berechtigungsstufen in Spaces und Projekten."
---
Teable bietet eine detailliertere Berechtigungssteuerung auf Ebene von Tabelle, Feld und Datensatz. Weitere Informationen finden Sie im Abschnitt [Berechtigungsmatrix](/de/basic/authority-matrix).
-### Base-Operationen
+### Projekt-Operationen {#base-operationen}
| Beschreibung | Ersteller/Manager | Bearbeiter | Kommentator | Betrachter |
| ----------- | :------------: | :----: | :-------: | :-------: |
-| Daten innerhalb der Base anzeigen | ✅ | ✅ | ✅ | ✅ |
+| Daten innerhalb des Projekts anzeigen | ✅ | ✅ | ✅ | ✅ |
| Benutzer mit gleichen oder niedrigeren Berechtigungen einladen | ✅ | ✅ | ✅ | ✅ |
| Freigabelinks für Ansichten erstellen oder löschen | ✅ | ✅ | | |
| Automatisierungen erstellen und bearbeiten | ✅ | | | |
| Berechtigungsmatrix aktivieren | ✅ | | | |
-| Einladungslinks für die Zusammenarbeit an einer Base erstellen oder löschen | ✅ | | | |
-| Base umbenennen | ✅ | | | |
+| Einladungslinks für die Zusammenarbeit an einem Projekt erstellen oder löschen | ✅ | | | |
+| Projekt umbenennen | ✅ | | | |
### Datensatz-Operationen
@@ -51,12 +51,12 @@ description: "Dieser Abschnitt beschreibt den Funktionsumfang von vier verschied
| Beschreibung | Manager | Ersteller | Bearbeiter | Kommentator | Betrachter |
| ----------- | :-----: | :-----: | :----: | :-------: | :-------: |
-| Zugriff auf alle Bases im Space | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Zugriff auf alle Projekte im Space | ✅ | ✅ | ✅ | ✅ | ✅ |
| Benutzer mit gleichen oder niedrigeren Berechtigungen einladen | ✅ | ✅ | ✅ | ✅ | ✅ |
| Space umbenennen | ✅ | ✅ | | | |
-| Bases zum Space hinzufügen oder daraus entfernen | ✅ | ✅ | | | |
-| Bases innerhalb des Space neu anordnen | ✅ | ✅ | | | |
-| Bases zwischen Spaces verschieben | ✅ | ✅ | | | |
+| Projekte zum Space hinzufügen oder daraus entfernen | ✅ | ✅ | | | |
+| Projekte innerhalb des Space neu anordnen | ✅ | ✅ | | | |
+| Projekte zwischen Spaces verschieben | ✅ | ✅ | | | |
| Abrechnungseinstellungen anpassen, Space upgraden | ✅ | | | | |
| Manager-Berechtigungen erteilen | ✅ | | | | |
diff --git a/de/basic/table.mdx b/de/basic/table.mdx
index 78a6487c..f1a6ab1d 100644
--- a/de/basic/table.mdx
+++ b/de/basic/table.mdx
@@ -1,16 +1,16 @@
---
title: "Übersicht"
-description: "Tabellen in einer Base erstellen, importieren, teilen und verwalten."
+description: "Tabellen in einem Projekt erstellen, importieren, teilen und verwalten."
---
{/* mintlify-resync: 2026-05-14 */}
-Jede Base kann mehrere Tabellen zum Speichern und Verwalten zusammengehöriger Daten enthalten. Teable-Tabellen entsprechen Datenbanktabellen — wenn Sie verstehen, [wie sie sich von Tabellenkalkulationen unterscheiden](/de/compare/teable-vs-excel), können Sie Teable optimal nutzen.
+Jedes Projekt kann mehrere Tabellen zum Speichern und Verwalten zusammengehöriger Daten enthalten. Teable-Tabellen entsprechen Datenbanktabellen — wenn Sie verstehen, [wie sie sich von Tabellenkalkulationen unterscheiden](/de/compare/teable-vs-excel), können Sie Teable optimal nutzen.
## Tabellen erstellen und verwalten
### Tabellen hinzufügen
-Klicken Sie in einer Base im Verzeichnis auf die Schaltfläche `+` und wählen Sie eine der folgenden Optionen:
+Klicken Sie in einem Projekt im Verzeichnis auf die Schaltfläche `+` und wählen Sie eine der folgenden Optionen:
-Wenn andere Tabellen auf die Tabelle verweisen, die Sie löschen, listet der Bestätigungsdialog die Felder auf, die vom Löschen betroffen sind, sowie die jeweilige Base und Tabelle. Beim Löschen der Tabelle werden diese Verknüpfungsfelder in einzeilige Textfelder umgewandelt, die die Titel der verknüpften Datensätze beibehalten; darauf aufbauende Lookup- oder Rollup-Felder funktionieren anschließend nicht mehr.
+Wenn andere Tabellen auf die Tabelle verweisen, die Sie löschen, listet der Bestätigungsdialog die Felder auf, die vom Löschen betroffen sind, sowie das jeweilige Projekt und die Tabelle. Beim Löschen der Tabelle werden diese Verknüpfungsfelder in einzeilige Textfelder umgewandelt, die die Titel der verknüpften Datensätze beibehalten; darauf aufbauende Lookup- oder Rollup-Felder funktionieren anschließend nicht mehr.
### Papierkorb
-Klicken Sie oben links in der Base auf das Papierkorbsymbol, um gelöschte Tabellen zu verwalten.
+Klicken Sie oben links in dem Projekt auf das Papierkorbsymbol, um gelöschte Tabellen zu verwalten.
-- **Wiederherstellen**: Bringt die Tabelle mit allen Daten intakt zurück in die Base.
+- **Wiederherstellen**: Bringt die Tabelle mit allen Daten intakt zurück in das Projekt.
- **Papierkorb leeren**: Löscht alle Tabellen im Papierkorb dauerhaft.
Das Wiederherstellen einer Tabelle macht die Verknüpfungskonvertierung nicht rückgängig. Verknüpfungsfelder in anderen Tabellen bleiben Textfelder. Erstellen Sie sie daher neu, wenn Sie die Verbindung wiederherstellen möchten.
diff --git a/de/basic/table/import.mdx b/de/basic/table/import.mdx
index 34c932ed..e695c54f 100644
--- a/de/basic/table/import.mdx
+++ b/de/basic/table/import.mdx
@@ -4,7 +4,7 @@ description: "Importieren Sie CSV-, Excel-, Airtable- oder Google-Sheets-Daten i
---
{/* mintlify-resync: 2026-05-14 */}
-Verwenden Sie den Import, um eine neue Tabelle einzurichten, neue Daten an eine bestehende Tabelle anzuhängen oder Tabellen aus Airtable oder Google Sheets in eine Teable-Base zu übernehmen. Airtable und Google Sheets stehen auch beim Import einer ganzen Base zur Verfügung.
+Verwenden Sie den Import, um eine neue Tabelle einzurichten, neue Daten an eine bestehende Tabelle anzuhängen oder Tabellen aus Airtable oder Google Sheets in ein Teable-Projekt zu übernehmen. Airtable und Google Sheets stehen auch beim Import eines ganzen Projekts zur Verfügung.
Verwenden Sie in AI Chat die Funktion „Alles verbinden“, um Airtable, Baserow, NocoDB, SmartSuite und andere Systeme nach Teable zu migrieren.
@@ -72,16 +72,16 @@ Ordnen Sie nach dem Upload die Dateispalten den Feldern in der Zieltabelle zu un
Wenn die Airtable-Integration für Ihre Instanz konfiguriert ist, können Sie Airtable auf zwei Arten importieren:
-- Um eine neue Teable-Base zu erstellen, öffnen Sie das Menü des Ziel-Spaces, klicken Sie auf **Importieren** und wählen Sie anschließend **Aus Airtable importieren**.
-- Um Tabellen in die gerade angezeigte Teable-Base zu importieren, verwenden Sie das Ressourcenmenü der Base:
+- Um ein neues Teable-Projekt zu erstellen, öffnen Sie das Menü des Ziel-Spaces, klicken Sie auf **Importieren** und wählen Sie anschließend **Aus Airtable importieren**.
+- Um Tabellen in das gerade angezeigte Teable-Projekt zu importieren, verwenden Sie das Ressourcenmenü des Projekts:
-1. Öffnen Sie die Teable-Ziel-Base.
+1. Öffnen Sie das Teable-Ziel-Projekt.
2. Klicken Sie oben im linken Verzeichnis auf `+`.
3. Wählen Sie unter **Aus anderen Quellen hinzufügen** die Option **Airtable**.
@@ -99,8 +99,8 @@ Während des Imports zeigt Teable den Fortschritt pro Tabelle an. Falls Felder,
Beginnen Sie über einen der beiden Einstiegspunkte:
-- Um eine neue Teable-Base zu erstellen, öffnen Sie das Menü des Ziel-Spaces, klicken Sie auf **Importieren** und wählen Sie anschließend **Aus Google Sheets importieren**.
-- Um Tabellen zur gerade angezeigten Base hinzuzufügen, klicken Sie oben im linken Verzeichnis auf `+` und wählen Sie unter **Aus anderen Quellen hinzufügen** die Option **Google Sheets**.
+- Um ein neues Teable-Projekt zu erstellen, öffnen Sie das Menü des Ziel-Spaces, klicken Sie auf **Importieren** und wählen Sie anschließend **Aus Google Sheets importieren**.
+- Um Tabellen zum gerade angezeigten Projekt hinzuzufügen, klicken Sie oben im linken Verzeichnis auf `+` und wählen Sie unter **Aus anderen Quellen hinzufügen** die Option **Google Sheets**.
@@ -113,7 +113,7 @@ Beginnen Sie über einen der beiden Einstiegspunkte:
Jedes Tabellenblatt wird als Karte mit seiner Zeilen- und Spaltenanzahl angezeigt. Wählen Sie die gewünschten Tabellenblätter aus. Deaktivieren Sie **Datensätze importieren**, wenn Sie nur die Feldstruktur ohne Daten übernehmen möchten.
- Klicken Sie auf **Import starten** und lassen Sie den Dialog geöffnet. Er meldet den Fortschritt Tabelle für Tabelle und nach Abschluss, wie viele Datensätze jede Tabelle erhalten hat. Verwenden Sie nach einem Import in eine neue Base **Base öffnen**, um direkt zum Ergebnis zu gelangen.
+ Klicken Sie auf **Import starten** und lassen Sie den Dialog geöffnet. Er meldet den Fortschritt Tabelle für Tabelle und nach Abschluss, wie viele Datensätze jede Tabelle erhalten hat. Verwenden Sie nach einem Import in ein neues Projekt **Projekt öffnen**, um direkt zum Ergebnis zu gelangen.
diff --git a/de/basic/view/toolbar.mdx b/de/basic/view/toolbar.mdx
index b2111149..946c715a 100644
--- a/de/basic/view/toolbar.mdx
+++ b/de/basic/view/toolbar.mdx
@@ -148,9 +148,9 @@ Verwenden Sie im Sortiermenü den Schalter `Datensätze automatisch sortieren`.
## Ansicht teilen
-Mit **Ansicht teilen** wird die aktuelle Ansicht als Link veröffentlicht. Besucher sehen die Daten und das Layout dieser Ansicht. Dies ist nicht dasselbe, wie sie als Mitwirkende zu einer Base einzuladen.
+Mit **Ansicht teilen** wird die aktuelle Ansicht als Link veröffentlicht. Besucher sehen die Daten und das Layout dieser Ansicht. Dies ist nicht dasselbe, wie sie als Mitwirkende zu einem Projekt einzuladen.
-Um eine gesamte Base, eine bestimmte Tabelle oder einen Ordner zu teilen, verwenden Sie die Base-Freigabe unter [Base](/de/basic/base).
+Um ein gesamtes Projekt, eine bestimmte Tabelle oder einen Ordner zu teilen, verwenden Sie die Projekt-Freigabe unter [Projekt](/de/basic/base).
| Freigabeoption | Am besten geeignet für |
| --- | --- |
@@ -240,5 +240,5 @@ Wenn die Ansicht gesperrt ist oder Sie nicht berechtigt sind, sie zu bearbeiten,
## Hinweise
- Änderungen an Filtern, Gruppen, Sortierungen, sichtbaren Feldern oder der Zeilenhöhe wirken sich auf alle Benutzer der aktuellen Ansicht aus, sofern Sie sich nicht im persönlichen Modus befinden.
-- „Ansicht teilen“ veröffentlicht das Ergebnis der aktuellen Ansicht, nicht die vollständigen Base-Berechtigungen. Verwenden Sie für eine dauerhafte Zusammenarbeit Mitgliederberechtigungen oder die Base-Freigabe.
+- „Ansicht teilen“ veröffentlicht das Ergebnis der aktuellen Ansicht, nicht die vollständigen Projekt-Berechtigungen. Verwenden Sie für eine dauerhafte Zusammenarbeit Mitgliederberechtigungen oder die Projekt-Freigabe.
- Änderungen an Zellwerten werden in beiden Modi weiterhin für alle synchronisiert.
diff --git a/de/deploy/env.mdx b/de/deploy/env.mdx
index e77438eb..deb4360b 100644
--- a/de/deploy/env.mdx
+++ b/de/deploy/env.mdx
@@ -71,7 +71,7 @@ mode: "wide"
| BACKEND_MAIL_AUTH_USER | Standardbenutzername für die Mailserverauthentifizierung | - | - | username |
| BACKEND_MAIL_AUTH_PASS | Standardpasswort für die Mailserverauthentifizierung | - | - | usertoken |
| BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH | Maximale Länge des Einladendennamens in Betreffzeilen von Einladungs-E-Mails. Leer oder 0 deaktiviert das Kürzen | - | - | 32 |
-| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Maximale Länge des Space- oder Base-Namens in Betreffzeilen von Einladungs-E-Mails. Leer oder 0 deaktiviert das Kürzen | - | - | 32 |
+| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Maximale Länge des Space- oder Projekt-Namens in Betreffzeilen von Einladungs-E-Mails. Leer oder 0 deaktiviert das Kürzen | - | - | 32 |
| **Sitzungs-/JWT-Konfiguration** | | | | |
| BACKEND_SESSION_EXPIRES_IN | Ablaufzeit der Sitzung | 7d | - | 7d |
| BACKEND_SESSION_COOKIE_SECURE | Ob das Sitzungscookie abgesichert wird | false | - | true |
@@ -93,7 +93,7 @@ mode: "wide"
| TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | Maximale Anzahl von Datensätzen pro Mutation | 20000 | - | 20000 |
| TABLE_LIMIT_COMPUTED_CELL_VALUE_MAX_BYTES | Maximale Anzahl von Bytes eines berechneten Zellenwerts | 262144 | - | 262144 |
| TABLE_LIMIT_FORMULA_MAX_LENGTH | Maximale Formellänge | 8192 | - | 8192 |
-| TABLE_LIMIT_TABLES_PER_BASE_MAX | Maximale Anzahl von Tabellen pro Base | 1000 | - | 1000 |
+| TABLE_LIMIT_TABLES_PER_BASE_MAX | Maximale Anzahl von Tabellen pro Projekt | 1000 | - | 1000 |
| TABLE_LIMIT_FIELDS_PER_TABLE_MAX | Maximale Anzahl von Feldern pro Tabelle | 500 | - | 500 |
| TABLE_LIMIT_VIEWS_PER_TABLE_MAX | Maximale Anzahl von Ansichten pro Tabelle | 100 | - | 100 |
| TABLE_LIMIT_CREATE_TABLE_FIELDS_MAX | Maximale Anzahl von Feldern beim Erstellen einer Tabelle | 1000 | - | 1000 |
@@ -133,10 +133,10 @@ mode: "wide"
| TELEMETRY_REPORT_DISABLED | Self-hosted-Telemetrieberichte deaktivieren, einschließlich Berichten zur Lizenzkonformität verbundener Instanzen | false | - | true |
| **Datenbankkonfiguration** | | | | |
| PRISMA_DATABASE_URL | Datenbankverbindungs-URL; muss konfiguriert werden | - | Ja | postgresql://teable:teable@127.0.0.1:5432/teable |
-| PUBLIC_DATABASE_PROXY | Extern erreichbare Datenbankadresse (host:port), die in den im Base-Panel „Datenbankverbindung“ erzeugten Anmeldedaten verwendet wird; setzen Sie sie, um externen schreibgeschützten SQL-Zugriff zu aktivieren | - | - | db.example.com:42345 |
+| PUBLIC_DATABASE_PROXY | Extern erreichbare Datenbankadresse (host:port), die in den im Projekt-Panel „Datenbankverbindung“ erzeugten Anmeldedaten verwendet wird; setzen Sie sie, um externen schreibgeschützten SQL-Zugriff zu aktivieren | - | - | db.example.com:42345 |
| PRISMA_TRANSACTION_TIMEOUT | Maximale Zeit (ms), die eine Transaktion vor dem Timeout ausgeführt werden kann. Für lang laufende Transaktionen erhöhen (z. B. Massenaktualisierungen mit vielen Fremdschlüsseln) | 5000 | - | 60000 |
| PRISMA_TRANSACTION_MAX_WAIT | Maximale Wartezeit (ms), um eine Transaktion aus dem Pool zu beziehen | 2000 | - | 5000 |
-| BIG_TRANSACTION_TIMEOUT | Timeout (ms) für große interne Transaktionen, z. B. den Export großer Bases | 600000 | - | 1200000 |
+| BIG_TRANSACTION_TIMEOUT | Timeout (ms) für große interne Transaktionen, z. B. den Export großer Projekte | 600000 | - | 1200000 |
## Geheimnisse und Rotation {#secrets-and-rotation}
diff --git a/docs.json b/docs.json
index a2b13eef..d069d21e 100644
--- a/docs.json
+++ b/docs.json
@@ -656,7 +656,7 @@
]
},
{
- "group": "Base",
+ "group": "Project",
"pages": [
"en/basic/base",
{
@@ -1031,7 +1031,7 @@
]
},
{
- "group": "数据库",
+ "group": "项目",
"pages": [
"zh/basic/base",
{
@@ -1406,7 +1406,7 @@
]
},
{
- "group": "База",
+ "group": "Проект",
"pages": [
"ru/basic/base",
{
@@ -1780,7 +1780,7 @@
]
},
{
- "group": "Base",
+ "group": "Projekt",
"pages": [
"de/basic/base",
{
@@ -2154,7 +2154,7 @@
]
},
{
- "group": "Base",
+ "group": "Projet",
"pages": [
"fr/basic/base",
{
@@ -2528,7 +2528,7 @@
]
},
{
- "group": "Base",
+ "group": "Proyecto",
"pages": [
"es/basic/base",
{
@@ -2902,7 +2902,7 @@
]
},
{
- "group": "Base",
+ "group": "Progetto",
"pages": [
"it/basic/base",
{
@@ -3276,7 +3276,7 @@
]
},
{
- "group": "ベース",
+ "group": "プロジェクト",
"pages": [
"ja/basic/base",
{
@@ -3650,7 +3650,7 @@
]
},
{
- "group": "Veritabanı",
+ "group": "Proje",
"pages": [
"tr/basic/base",
{
@@ -4024,7 +4024,7 @@
]
},
{
- "group": "База",
+ "group": "Проєкт",
"pages": [
"uk/basic/base",
{
@@ -4398,7 +4398,7 @@
]
},
{
- "group": "قاعدة البيانات",
+ "group": "المشروع",
"pages": [
"ar/basic/base",
{
diff --git a/en/api-doc/get-id.mdx b/en/api-doc/get-id.mdx
index 91bc5250..b97e3e38 100644
--- a/en/api-doc/get-id.mdx
+++ b/en/api-doc/get-id.mdx
@@ -14,11 +14,11 @@ Click on the target space and copy the string starting with 'spc' from the URL,
## BaseId
-Click on the target base and copy the string starting with 'bse' from the URL, example: `bseXXXXXXXXXX`
+Click on the target project and copy the string starting with 'bse' from the URL, example: `bseXXXXXXXXXX`
diff --git a/en/api-doc/oauth.mdx b/en/api-doc/oauth.mdx
index aedae43a..b70f26b2 100644
--- a/en/api-doc/oauth.mdx
+++ b/en/api-doc/oauth.mdx
@@ -33,7 +33,7 @@ Scopes define what actions your OAuth App can perform. Available scopes are orga
| Resource | Scopes |
|----------|--------|
| **App** | `app\|create`, `app\|read`, `app\|update`, `app\|delete` |
-| **Base** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
+| **Project** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
| **Table** | `table\|create`, `table\|delete`, `table\|export`, `table\|import`, `table\|read`, `table\|update`, `table\|trash_read`, `table\|trash_update`, `table\|trash_reset` |
| **View** | `view\|create`, `view\|delete`, `view\|read`, `view\|update` |
| **Field** | `field\|create`, `field\|delete`, `field\|read`, `field\|update` |
@@ -296,14 +296,14 @@ curl https://app.teable.ai/api/table/TABLE_ID/record \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Typically, the first step after obtaining a token is to retrieve all Bases accessible to the current user:
+Typically, the first step after obtaining a token is to retrieve all Projects accessible to the current user:
```bash
curl https://app.teable.ai/api/base/access/all \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-This endpoint returns all Bases the current user has permission to access. You can use the `baseId` from the response for subsequent API calls.
+This endpoint returns all Projects the current user has permission to access. You can use the `baseId` from the response for subsequent API calls.
## Refreshing Access Tokens
diff --git a/en/api-doc/record/interface.mdx b/en/api-doc/record/interface.mdx
index e8819162..7ec1b6a0 100644
--- a/en/api-doc/record/interface.mdx
+++ b/en/api-doc/record/interface.mdx
@@ -2,7 +2,7 @@
title: "Record Field Interface"
---
-Lookup field is not a specific field type. We can look up any type of field from a linked base. The type of a lookup field is determined by the original field in the linked base and has the isLookup property. Lookup fields cannot be edited.
+Lookup field is not a specific field type. We can look up any type of field from a linked project. The type of a lookup field is determined by the original field in the linked project and has the isLookup property. Lookup fields cannot be edited.
All field return values may have `isMultipleCellValue: true` in certain cases:
diff --git a/en/api-doc/sql-query.mdx b/en/api-doc/sql-query.mdx
index 8523c0d1..a42dfb54 100644
--- a/en/api-doc/sql-query.mdx
+++ b/en/api-doc/sql-query.mdx
@@ -11,12 +11,12 @@ Teable allows you to connect to its underlying PostgreSQL database through exter
### Creating a Database Connection
-1. **Open a Table**: First, open any table within the base you want to connect to.
-2. **Enter Design Page**: Click the ⚙️ icon in the top right corner to enter the Base Design page.
+1. **Open a Table**: First, open any table within the project you want to connect to.
+2. **Enter Design Page**: Click the ⚙️ icon in the top right corner to enter the Project Design page.
@@ -50,7 +50,7 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
**Note:** In PostgreSQL, use double quotes `"` around schema and table names to preserve case sensitivity.
To write this query, you'll need to know three things:
-- **Schema name (BaseId)**: The base identifier starting with `bse`
+- **Schema name (BaseId)**: The project identifier starting with `bse`
- **Table name**: The physical table name in PostgreSQL
- **Field names**: The actual column names in the database
@@ -58,27 +58,27 @@ The following sections explain how to find each of these.
### Finding the BaseId (Schema Name)
-Each Base in Teable corresponds to a **schema** in PostgreSQL. The BaseId is the schema name used in SQL queries.
+Each Project in Teable corresponds to a **schema** in PostgreSQL. The BaseId is the schema name used in SQL queries.
**Method 1:** Look at the URL - the string starting with `bse` is the BaseId.
-**Method 2:** In the Base Design interface, the schema name shown is the BaseId.
+**Method 2:** In the Project Design interface, the schema name shown is the BaseId.
### Finding Table Names
-Table names in Teable interface don't automatically sync with physical database table names. Check the Base Design Interface for the actual database table name.
+Table names in Teable interface don't automatically sync with physical database table names. Check the Project Design Interface for the actual database table name.
diff --git a/en/api-doc/token.mdx b/en/api-doc/token.mdx
index 26051ee9..85fad715 100644
--- a/en/api-doc/token.mdx
+++ b/en/api-doc/token.mdx
@@ -15,7 +15,7 @@ If you're building a multi-tenant integration for external users, use OAuth inst
3. Add appropriate permission scopes to your token.
-4. Specify which bases and spaces the token can access.
+4. Specify which projects and spaces the token can access.
Once your token is created, it will only be displayed once. We recommend copying and storing it in a secure location.
diff --git a/en/basic/admin-panel/announcements.mdx b/en/basic/admin-panel/announcements.mdx
index d649f637..554cd7c5 100644
--- a/en/basic/admin-panel/announcements.mdx
+++ b/en/basic/admin-panel/announcements.mdx
@@ -15,7 +15,7 @@ Click **Publish announcement** and fill in the form. The preview on the side sho
| Setting | What it controls |
| --- | --- |
-| **Form** | Where the announcement appears: **Banner** across the top of the app, **Toast** as a transient notification, **Modal** as a dialog that interrupts, or **Sidebar card** in the space and base sidebars. |
+| **Form** | Where the announcement appears: **Banner** across the top of the app, **Toast** as a transient notification, **Modal** as a dialog that interrupts, or **Sidebar card** in the space and project sidebars. |
| **Level** | The tone users see: **Info**, **Maintenance**, **Critical**, or **Resolved**. |
| Title and **Body** | The announcement text. |
| **Starts at** / **Ends at** | The window during which the announcement is delivered. The end time must be after the start time. |
diff --git a/en/basic/admin-panel/audit-log.mdx b/en/basic/admin-panel/audit-log.mdx
index 831f8de1..8bb9c0fe 100644
--- a/en/basic/admin-panel/audit-log.mdx
+++ b/en/basic/admin-panel/audit-log.mdx
@@ -11,9 +11,9 @@ Path: Admin Panel → Audit log
## What You Can Review
-The audit log covers common administration and collaboration activity, including spaces, bases, tables, views, fields, records, sharing, invitations, access tokens, and the Authority Matrix.
+The audit log covers common administration and collaboration activity, including spaces, projects, tables, views, fields, records, sharing, invitations, access tokens, and the Authority Matrix.
-Each log entry shows the operation time, operator, action type, related base or space, and request source. Open a log entry to view its details.
+Each log entry shows the operation time, operator, action type, related project or space, and request source. Open a log entry to view its details.
## Act on an Operator
@@ -30,10 +30,10 @@ Use the filters at the top of the page to narrow the log list:
- **Select Operator**: Show actions performed by a specific user.
- **Select Space**: Show activity within a specific space.
-- **Select Base**: Show activity for a specific base.
-- **Select Action**: Filter by operation type, such as records, fields, views, tables, bases, sharing, Authority Matrix, Authority Matrix roles, spaces, invitations, users, and access tokens.
+- **Select Project**: Show activity for a specific project.
+- **Select Action**: Filter by operation type, such as records, fields, views, tables, projects, sharing, Authority Matrix, Authority Matrix roles, spaces, invitations, users, and access tokens.
-If a user, base, or space has been deleted, the entry remains in the log and the resource is marked as deleted.
+If a user, project, or space has been deleted, the entry remains in the log and the resource is marked as deleted.
## Browse Large Log Lists
diff --git a/en/basic/admin-panel/computed-outbox.mdx b/en/basic/admin-panel/computed-outbox.mdx
index c92472e5..fe004c30 100644
--- a/en/basic/admin-panel/computed-outbox.mdx
+++ b/en/basic/admin-panel/computed-outbox.mdx
@@ -30,7 +30,7 @@ Each row is one task by default, and it moves through states in place as Teable
To narrow the list:
- Click the state tiles above the table to filter by state: **Waiting**, **Active**, **Delayed**, **Failed**, **Completed (retained)**, and so on. You can select several at once, and hovering a tile explains what that state means.
-- Filter by **Space**, **Base**, **Cause**, or **Outcome**, search for a task, Base, Space, or error, or set a minimum processing time to surface slow tasks.
+- Filter by **Space**, **Project**, **Cause**, or **Outcome**, search for a task, Project, Space, or error, or set a minimum processing time to surface slow tasks.
- Click a row to open **Computed lineage**: queue timestamps, delivery lag, processing time, the full failure reason with the redacted SQL for a failed delivery, and the propagation detail described below.
**Completed** does not mean the task did work. The outcome badge says what the delivery actually did: **Processed** ran the task, **No-op** found nothing left to do, **Deferred** rescheduled it for later, and **Parked** means its scope is paused. The **Outcome** filter narrows the list by that result and shows how many deliveries each one covers, so pairing **Completed (retained)** with **Processed** leaves only the deliveries that really ran the task.
@@ -58,7 +58,7 @@ When a computed value looks wrong or arrived late, open **Computed lineage** to
The **Failed** count and **Anomaly maintenance** show different types of problems, so their numbers may differ.
-**Anomaly maintenance** collects anomalies into problem groups, one per Base, source table, and error, so a single root cause is easy to spot. Review the failure reason and fix the underlying problem before you recover anything. Expand a group to read its error details and the tasks it covers; those rows are for inspection, and recovery always runs on the group as a whole.
+**Anomaly maintenance** collects anomalies into problem groups, one per Project, source table, and error, so a single root cause is easy to spot. Review the failure reason and fix the underlying problem before you recover anything. Expand a group to read its error details and the tasks it covers; those rows are for inspection, and recovery always runs on the group as a whole.
The actions a group offers depend on its type:
@@ -70,7 +70,7 @@ The actions a group offers depend on its type:
After a group recovery, Teable reports how many tasks it restored, how many were newly queued or already queued, and how many were delivered or deferred. Workers then consume the group under the current concurrency and task-splitting limits.
-A group marked **Base deleted** belongs to a Base that no longer exists. Recovering it would fail again immediately, so **Discard group** is the only action offered.
+A group marked **Project deleted** belongs to a Project that no longer exists. Recovering it would fail again immediately, so **Discard group** is the only action offered.
Moving a table to the trash no longer creates anomalies here. A computed task that still references a trashed table skips the steps that read it, finishes the steps that target live tables, and completes.
@@ -101,8 +101,8 @@ The queue section has two concurrency controls. Each one writes a cluster-wide o
| Control | What it limits |
| --- | --- |
| **Per-process concurrency** | How many computed tasks each worker process handles at once. |
-| **Per-base claim caps** | How many computed tasks run at the same time for one Base (**Per base**) and for one source table within it (**Per seed table**). Both default to 2 and accept values from 1 to 16. |
+| **Per-project claim caps** | How many computed tasks run at the same time for one Project (**Per project**) and for one source table within it (**Per seed table**). Both default to 2 and accept values from 1 to 16. |
-Raise the claim caps when one busy Base is the bottleneck, and per-process concurrency when many Bases are queued at the same time.
+Raise the claim caps when one busy Project is the bottleneck, and per-process concurrency when many Projects are queued at the same time.
Higher concurrency puts more load on your database. Spaces that store their data in a [database tenant](/en/basic/admin-panel/database-tenant) keep the environment defaults for the claim caps, because their connection pools are sized for those values.
diff --git a/en/basic/admin-panel/database-tenant.mdx b/en/basic/admin-panel/database-tenant.mdx
index 574162e5..ca4b7b6b 100644
--- a/en/basic/admin-panel/database-tenant.mdx
+++ b/en/basic/admin-panel/database-tenant.mdx
@@ -26,6 +26,6 @@ From **Admin Panel** → **BYODB**, an instance administrator can:
No. It refers to the Teable Space whose data is stored in that database.
- No. It changes where Teable stores and manages its own Space data. You provide a PostgreSQL database hosted elsewhere, and Teable creates and manages its own data there. Existing tables and records in that database are not connected to Teable or automatically imported as Bases.
+ No. It changes where Teable stores and manages its own Space data. You provide a PostgreSQL database hosted elsewhere, and Teable creates and manages its own data there. Existing tables and records in that database are not connected to Teable or automatically imported as Projects.
diff --git a/en/basic/admin-panel/multitenancy.mdx b/en/basic/admin-panel/multitenancy.mdx
index 6bab94b9..6e27155e 100644
--- a/en/basic/admin-panel/multitenancy.mdx
+++ b/en/basic/admin-panel/multitenancy.mdx
@@ -16,10 +16,10 @@ A Teable instance can contain multiple organization tenants, each with separate
Teable instance
├── Organization tenant A
│ ├── Organization administrators, members, and departments
-│ └── Spaces, Bases, and organization-level settings
+│ └── Spaces, Projects, and organization-level settings
├── Organization tenant B
│ ├── Organization administrators, members, and departments
-│ └── Spaces, Bases, and organization-level settings
+│ └── Spaces, Projects, and organization-level settings
└── Organization tenant C
```
@@ -107,7 +107,7 @@ From the space switcher, an organization administrator can open the **Organizati
| --- | --- |
| **Users** | View and manage users in the current organization |
| **Organization** | Create, move, rename, and delete departments and manage department members |
-| **Space manage** | Add Spaces to or remove them from the organization and view Space and Base counts |
+| **Space manage** | Add Spaces to or remove them from the organization and view Space and Project counts |
| **Authentication settings** | Configure third-party authentication providers for the organization |
| **Security settings** | Verify email domains so new users with those domains automatically join the organization |
| **Instance settings** | Change the organization name, automatic Space access, and department scope |
diff --git a/en/basic/admin-panel/skills.mdx b/en/basic/admin-panel/skills.mdx
index 26ca835d..ec64ec84 100644
--- a/en/basic/admin-panel/skills.mdx
+++ b/en/basic/admin-panel/skills.mdx
@@ -9,7 +9,7 @@ Path: Admin Panel → Skills
Use **Skills** to publish skills for the whole instance. A skill added here is available in every AI Chat, App Builder, and bot conversation, so use it for working methods your organization should share by default, such as a house writing style, a reporting convention, or a shared integration procedure.
-Skills added by users elsewhere stay in their own scope. See [AI Chat](/en/basic/ai/ai-chat) for personal, base, and space skills.
+Skills added by users elsewhere stay in their own scope. See [AI Chat](/en/basic/ai/ai-chat) for personal, project, and space skills.
## Add a Skill
@@ -34,4 +34,4 @@ The list groups skills by scope and shows where each one came from. Built-in ski
## When a Name Is Used Twice
-A skill published here is the instance default. If a base, space, personal, app, or bot skill uses the same name, the narrower one is in effect for that conversation, and the instance skill is ignored there.
+A skill published here is the instance default. If a project, space, personal, app, or bot skill uses the same name, the narrower one is in effect for that conversation, and the instance skill is ignored there.
diff --git a/en/basic/admin-panel/spaces.mdx b/en/basic/admin-panel/spaces.mdx
index 9019b76f..c584e870 100644
--- a/en/basic/admin-panel/spaces.mdx
+++ b/en/basic/admin-panel/spaces.mdx
@@ -8,7 +8,7 @@ description: "Manage all spaces in your instance through the admin panel, includ
### Space Information
* **Space Name**: The display name of the space
-* **Bases**: The total number of bases contained in the space
+* **Projects**: The total number of projects contained in the space
* **Collaborators**: The total number of users who have access to the space
* **Created Time**: When the space was created
* **Auto-join**: Whether the space allows new users to join automatically
@@ -26,7 +26,7 @@ description: "Manage all spaces in your instance through the admin panel, includ
When you delete a space from the admin panel:
* The space is immediately marked as deleted
-* All bases and data within the space become inaccessible
+* All projects and data within the space become inaccessible
* Collaborators lose access to the space
* This operation cannot be undone
diff --git a/en/basic/admin-panel/table-query-ops.mdx b/en/basic/admin-panel/table-query-ops.mdx
index e25c782e..23424f3f 100644
--- a/en/basic/admin-panel/table-query-ops.mdx
+++ b/en/basic/admin-panel/table-query-ops.mdx
@@ -26,7 +26,7 @@ The page opens on the table list. The state buttons across the top carry their o
| **Unconfigured** | Tables with no search coverage yet. |
| **Unavailable** | Tables that cannot use indexed search right now. The row states why. |
-The search box accepts table, Base, and Space names or IDs. Sorting is either **Most slow queries** or **Table name**. **Observation window** covers the last 1 hour or 24 hours, and every observation figure in the list follows that window. Observations are kept for 2 days; anything older no longer appears in the list.
+The search box accepts table, Project, and Space names or IDs. Sorting is either **Most slow queries** or **Table name**. **Observation window** covers the last 1 hour or 24 hours, and every observation figure in the list follows that window. Observations are kept for 2 days; anything older no longer appears in the list.
Each row gives the table's estimated rows and size, the requests and slow queries within the window, the current search method and field coverage, the number of filter/sort indexes, and the counts of pending recommendations and active tasks. Click a table name to open its detail.
diff --git a/en/basic/admin-panel/template-admin.mdx b/en/basic/admin-panel/template-admin.mdx
index f6a27379..37605008 100644
--- a/en/basic/admin-panel/template-admin.mdx
+++ b/en/basic/admin-panel/template-admin.mdx
@@ -1,6 +1,6 @@
---
title: "Template Admin"
-description: "Manage workflow templates for your organization, enabling users to quickly start with pre-configured bases."
+description: "Manage workflow templates for your organization, enabling users to quickly start with pre-configured projects."
---
Available for self-hosted Business plan and above
@@ -16,12 +16,12 @@ In the Template Admin interface, you can create and configure templates that wil
* **Markdown Description**: Detailed description supporting rich text formatting
* **Category**: Group templates by business scenarios (e.g., HR, Sales, Engineering)
* **System**: Indicates if the template is an official system template
-* **Source**: The original base used to create this template
+* **Source**: The original project used to create this template
#### Template Operations
* **New Template**: Create a new template configuration
-* **Publish Snapshot**: Capture the current state of the source base. You must publish a snapshot before you can list the template.
+* **Publish Snapshot**: Capture the current state of the source project. You must publish a snapshot before you can list the template.
* **Status (Publish)**: Toggle to list/unlist the template in the template center. Requires a name, description, and snapshot.
* **Pin**: Pin important templates to the top of the list
* **Delete**: Remove the template configuration
@@ -31,7 +31,7 @@ In the Template Admin interface, you can create and configure templates that wil
Self-hosted users can import templates from the official Teable Cloud:
1. **Download**: Get the `.tea` file from the [Official Template Center](https://teable.ai/templates)
-2. **Import**: Import the `.tea` file as a new base in your space
+2. **Import**: Import the `.tea` file as a new project in your space
3. **Create Template**: Go to Template Admin > New Template
-4. **Select Source**: Choose the imported base as the source
+4. **Select Source**: Choose the imported project as the source
5. **Publish**: Configure details, publish snapshot, and enable status
\ No newline at end of file
diff --git a/en/basic/ai/ai-chat.mdx b/en/basic/ai/ai-chat.mdx
index 8c7c3373..703c6321 100644
--- a/en/basic/ai/ai-chat.mdx
+++ b/en/basic/ai/ai-chat.mdx
@@ -35,7 +35,7 @@ When you paste a long block of plain text, Teable converts it to a Markdown atta
- **My secrets**: Open **+** → **More** → **My secrets** to store API keys or other credentials in **Settings** → **Integrations**. The values are yours, AI Chat can read them as environment variables at runtime, and you can grant them to individual apps and automations. See [Credentials and Integrations](/en/basic/credential).
- **Credential requests**: When AI needs a third-party account or a secret, it pins a credential request card to the conversation. Choose **Connect my account** to run an OAuth flow, or grant a credential you already have. Click **Skip** to withhold it; AI continues with the parts it can complete without it.
- **Scraper**: Open the **+** menu and choose **Scraper**, then pick a platform and a data type. Entries come in two kinds: some scrape a link you paste, such as **personal profile** on LinkedIn or **product reviews** on Amazon; others search by keyword, hashtag, or name, such as **video search** on TikTok or **posts of a subreddit** on Reddit. Teable prefills the matching instruction in the chat input and leaves the part you need to fill in at the end. **Any web page** takes a pasted link directly.
-- **Skills**: Open the **+** menu and choose **Skills** to import, enable, disable, or try skills in the current chat. When you import one, choose who can use it: **Personal** keeps it to yourself, **Base** gives it to collaborators in this base, and **Space** gives it to everyone in this space. Type `/` in the input box to choose an enabled skill. To connect or migrate an external system, see [Connect & Migrate Everything](/en/basic/ai/connect-everything).
+- **Skills**: Open the **+** menu and choose **Skills** to import, enable, disable, or try skills in the current chat. When you import one, choose who can use it: **Personal** keeps it to yourself, **Project** gives it to collaborators in this project, and **Space** gives it to everyone in this space. Type `/` in the input box to choose an enabled skill. To connect or migrate an external system, see [Connect & Migrate Everything](/en/basic/ai/connect-everything).
- **Context usage**: The ring next to the input box shows how much of the model's context window the conversation currently uses. Click it for the percentage and token counts. When the context fills up, Teable compacts the conversation; start a new chat if you want a clean context instead.
- **Manage files**: Open **+** → **More** → **Manage files** to view files in the current chat sandbox. You can preview supported files, download files, or delete files and folders you no longer need. A conversation must exist before its files can be managed.
- **Message queue**: Sending another message while AI is working does not interrupt it. The message waits in a queue above the input box and goes out when the current run ends. Queued items keep the same table, view, attachment, and selection chips as the chat input; **Remove** drops one, **...** → **Edit message** puts it back in the input box, and a text-only item also offers **Steer** to hand its text to the running turn instead of waiting.
@@ -129,9 +129,9 @@ When a reply presents several files at once, use **Download all** below the file
### Memory
-Memory stores information you explicitly ask Cuppy to remember. Memory is scoped by user and Base: each user in each Base has an independent memory context, and memory saved in another Base will not automatically appear in the current one.
+Memory stores information you explicitly ask Cuppy to remember. Memory is scoped by user and Project: each user in each Project has an independent memory context, and memory saved in another Project will not automatically appear in the current one.
-- Save memory in the current Base
+- Save memory in the current Project
Say what Cuppy should remember in the conversation:
@@ -139,12 +139,12 @@ Say what Cuppy should remember in the conversation:
Please remember xxx.
```
-- Reuse memory from another Base
+- Reuse memory from another Project
-Ask Cuppy to read another Base and save the relevant parts into the current Base:
+Ask Cuppy to read another Project and save the relevant parts into the current Project:
```text
-Cuppy, please read the memory for Base ID bsexxxxxxxxxxxx and save the relevant memory into this current Base.
+Cuppy, please read the memory for Project ID bsexxxxxxxxxxxx and save the relevant memory into this current Project.
```
### Handle Long Tasks
@@ -228,8 +228,8 @@ Open **+** → **More** → **Manage artifacts** to browse everything you have c
Type `@` in the input box and select the node you want AI Chat to reference. For Grid view selections, you can also select rows, columns, a single cell, or a cell range, then use **Add to Chat** from the context menu.
-
- Yes. AI is not limited to the base the chat belongs to; it can look up the other bases you have access to and work in them. Name the base in your request, for example "compare this table with the orders table in the Sales base". `@` only lists nodes in the current base, and anything you do not point elsewhere still happens in the chat's own base.
+
+ Yes. AI is not limited to the project the chat belongs to; it can look up the other projects you have access to and work in them. Name the project in your request, for example "compare this table with the orders table in the Sales project". `@` only lists nodes in the current project, and anything you do not point elsewhere still happens in the chat's own project.
@@ -239,8 +239,8 @@ Open **+** → **More** → **Manage artifacts** to browse everything you have c
Not by default. Only you can open your own artifacts. Turn on **Enable sharing** in the viewer and send the link, choosing **Space members** if the artifact should stay inside the space.
-
- No. Memory is scoped by user and Base. If you want to reuse memory from another Base, ask Cuppy to read that Base's memory and save the relevant parts into the current Base.
+
+ No. Memory is scoped by user and Project. If you want to reuse memory from another Project, ask Cuppy to read that Project's memory and save the relevant parts into the current Project.
@@ -268,11 +268,11 @@ Open **+** → **More** → **Manage artifacts** to browse everything you have c
- Open the **+** menu and choose **Skills** to import or manage skills, or type `/` in the input box to choose an enabled skill. Choose who can use the skill when you import it: personal for your own chats, base when collaborators in the same base need it, and space when everyone in the space does. Users who can manage the base can add base skills, and space owners and creators can add space skills. If AI Chat presents a `.skill` file, use **Install** on the file card to add it.
+ Open the **+** menu and choose **Skills** to import or manage skills, or type `/` in the input box to choose an enabled skill. Choose who can use the skill when you import it: personal for your own chats, project when collaborators in the same project need it, and space when everyone in the space does. Users who can manage the project can add project skills, and space owners and creators can add space skills. If AI Chat presents a `.skill` file, use **Install** on the file card to add it.
- Only one version is ever in effect, and the shared team version wins over a personal copy: a base skill beats a space skill, and a space skill beats a personal one. In an app or bot conversation, the skill added for that app or bot comes first. To move everyone to a new version, update the copy in the base or space.
+ Only one version is ever in effect, and the shared team version wins over a personal copy: a project skill beats a space skill, and a space skill beats a personal one. In an app or bot conversation, the skill added for that app or bot comes first. To move everyone to a new version, update the copy in the project or space.
diff --git a/en/basic/ai/app-builder.mdx b/en/basic/ai/app-builder.mdx
index 61221763..64104926 100644
--- a/en/basic/ai/app-builder.mdx
+++ b/en/basic/ai/app-builder.mdx
@@ -5,21 +5,21 @@ description: Transform your data into custom web applications using AI.
Available on all Cloud plans; Self-Hosted requires Business or higher.
-Teable App Builder allows you to turn your data bases into fully functional, customized web applications without writing code. By combining the power of your data structure with AI-driven design, you can launch internal tools, customer portals, and data dashboards in minutes.
+Teable App Builder allows you to turn your projects into fully functional, customized web applications without writing code. By combining the power of your data structure with AI-driven design, you can launch internal tools, customer portals, and data dashboards in minutes.
## Overview
The App Builder follows a "Prompt to App" workflow. You describe what you want, and AI builds the application structure, pages, and logic for you. You can then fine-tune every detail using the visual editor or code.
-Use App Builder to create custom interfaces and standalone apps. For interactive data analysis and ad-hoc questions inside the database, use [AI Chat](/en/basic/ai/ai-chat).
+Use App Builder to create custom interfaces and standalone apps. For interactive data analysis and ad-hoc questions inside the project, use [AI Chat](/en/basic/ai/ai-chat).
## Creating an App
There are two main ways to create an app:
-1. **From Base**: In any Base, click "Create App" to generate an application linked to your current data.
+1. **From Project**: In any Project, click "Create App" to generate an application linked to your current data.
2. **From Chat**: Open AI Chat and say "Create a CRM app for this customer table".
## The App Editor Interface
@@ -37,7 +37,7 @@ The command center for your app.
- **Natural Language Editing**: Describe changes like *"Make the header blue"* or *"Add a submission form for new records"*.
- **Auto-Routing**: The AI understands which component or page you are referring to and modifies it directly.
- **Integrations**: When the app task needs access to a third-party account, App Builder can show a card such as **Connect Slack** in the chat panel. Click **Connect** to authorize with OAuth. Click **Skip** to cancel this authorization; AI continues with the parts it can complete without that connection.
-- **Skills**: Open the **+** menu and choose **Skills** to manage skills for this app conversation. A skill added here is only available to the current app, and the skills shared with the app's base and space can be used here as well. Type `/` in the input box to choose an enabled skill.
+- **Skills**: Open the **+** menu and choose **Skills** to manage skills for this app conversation. A skill added here is only available to the current app, and the skills shared with the app's project and space can be used here as well. Type `/` in the input box to choose an enabled skill.
- **Manage files**: Open **+** → **More** → **Manage files** to view files in the app sandbox. Use it to preview supported files, download generated files, or delete files and folders you no longer need.
- **Clear Conversation**: If the current conversation has drifted, click **Clear Chat** in the bottom-right corner of the panel to start a new session. This clears the chat history for the current conversation but does not delete the app itself. The first use shows a confirmation, and you can choose not to show it again next time.
diff --git a/en/basic/ai/connect-everything/migrate-airtable.mdx b/en/basic/ai/connect-everything/migrate-airtable.mdx
index 24a35e39..f5bad570 100644
--- a/en/basic/ai/connect-everything/migrate-airtable.mdx
+++ b/en/basic/ai/connect-everything/migrate-airtable.mdx
@@ -13,7 +13,7 @@ In [**Teable AI Chat**](/en/basic/ai/ai-chat), type `/` and select the **Connect
## Start the migration
1. Create an [Airtable Personal Access Token](https://airtable.com/create/tokens) with access to the bases you want to migrate.
-2. Open the target Teable base and launch AI Chat.
+2. Open the target Teable project and launch AI Chat.
3. Type `/`, select **Connect Everything**, and provide the token.
4. Ask Teable AI to migrate the Airtable base, then review the result.
diff --git a/en/basic/ai/connect-everything/migrate-baserow.mdx b/en/basic/ai/connect-everything/migrate-baserow.mdx
index 095b19f3..faffc785 100644
--- a/en/basic/ai/connect-everything/migrate-baserow.mdx
+++ b/en/basic/ai/connect-everything/migrate-baserow.mdx
@@ -13,7 +13,7 @@ Use **Connect Everything** in [Teable AI Chat](/en/basic/ai/ai-chat) to connect
## Start the migration
1. Copy the Baserow instance URL and create a [Baserow database token](https://baserow.io/user-docs/personal-api-tokens) with read access to the source tables.
-2. Open the target Teable base and launch AI Chat.
+2. Open the target Teable project and launch AI Chat.
3. Type `/`, select **Connect Everything**, and provide the instance URL and database token.
4. Ask Teable AI to migrate the Baserow database, then review the result.
diff --git a/en/basic/ai/connect-everything/migrate-clickup.mdx b/en/basic/ai/connect-everything/migrate-clickup.mdx
index 6c53eae9..38985d56 100644
--- a/en/basic/ai/connect-everything/migrate-clickup.mdx
+++ b/en/basic/ai/connect-everything/migrate-clickup.mdx
@@ -16,7 +16,7 @@ In [**Teable AI Chat**](/en/basic/ai/ai-chat), type `/` and select **Connect Eve
## Start the migration
1. In ClickUp, open **Settings → Apps**, then copy your personal API token. See ClickUp's [authentication guide](https://developer.clickup.com/docs/authentication).
-2. Open the target Teable base and launch AI Chat.
+2. Open the target Teable project and launch AI Chat.
3. Type `/`, select **Connect Everything**, and provide the personal API token.
4. Ask Teable AI to migrate the accessible ClickUp Workspaces and build the project views, dashboards, and automations your team needs.
diff --git a/en/basic/ai/connect-everything/migrate-jira.mdx b/en/basic/ai/connect-everything/migrate-jira.mdx
index e7062402..54a649eb 100644
--- a/en/basic/ai/connect-everything/migrate-jira.mdx
+++ b/en/basic/ai/connect-everything/migrate-jira.mdx
@@ -16,7 +16,7 @@ In [**Teable AI Chat**](/en/basic/ai/ai-chat), type `/` and select **Connect Eve
## Start the migration
1. Create an [Atlassian API token](https://id.atlassian.com/manage-profile/security/api-tokens) for an account with access to the Jira projects you want to migrate. See Atlassian's [Basic auth for REST APIs](https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/).
-2. Open the target Teable base and launch AI Chat.
+2. Open the target Teable project and launch AI Chat.
3. Type `/`, select **Connect Everything**, and provide the Jira Cloud site URL, account email, and API token.
4. Ask Teable AI to migrate the accessible Jira projects and build the project views, dashboards, and automations your team needs.
diff --git a/en/basic/ai/connect-everything/migrate-monday.mdx b/en/basic/ai/connect-everything/migrate-monday.mdx
index b25615d6..d29bfabf 100644
--- a/en/basic/ai/connect-everything/migrate-monday.mdx
+++ b/en/basic/ai/connect-everything/migrate-monday.mdx
@@ -16,7 +16,7 @@ In [**Teable AI Chat**](/en/basic/ai/ai-chat), type `/` and select **Connect Eve
## Start the migration
1. In monday.com, open your profile menu, choose **Developers**, and copy your personal API token. See monday.com's [API authentication guide](https://developer.monday.com/api-reference/docs/authentication).
-2. Open the target Teable base and launch AI Chat.
+2. Open the target Teable project and launch AI Chat.
3. Type `/`, select **Connect Everything**, and provide the personal API token.
4. Ask Teable AI to migrate the accessible monday.com workspaces and build the project views, dashboards, and automations your team needs.
diff --git a/en/basic/ai/connect-everything/migrate-nocodb.mdx b/en/basic/ai/connect-everything/migrate-nocodb.mdx
index 7f827d43..a9d81cc1 100644
--- a/en/basic/ai/connect-everything/migrate-nocodb.mdx
+++ b/en/basic/ai/connect-everything/migrate-nocodb.mdx
@@ -13,7 +13,7 @@ Use **Connect Everything** in [Teable AI Chat](/en/basic/ai/ai-chat) to connect
## Start the migration
1. Copy the NocoDB instance URL and create a [NocoDB API token](https://nocodb.com/docs/product-docs/account-settings/api-tokens) with access to the source base.
-2. Open the target Teable base and launch AI Chat.
+2. Open the target Teable project and launch AI Chat.
3. Type `/`, select **Connect Everything**, and provide the instance URL and API token.
4. Ask Teable AI to migrate the NocoDB base, then review the result.
diff --git a/en/basic/ai/connect-everything/migrate-smartsheet.mdx b/en/basic/ai/connect-everything/migrate-smartsheet.mdx
index 1501293d..65d0a636 100644
--- a/en/basic/ai/connect-everything/migrate-smartsheet.mdx
+++ b/en/basic/ai/connect-everything/migrate-smartsheet.mdx
@@ -16,7 +16,7 @@ In [**Teable AI Chat**](/en/basic/ai/ai-chat), type `/` and select **Connect Eve
## Start the migration
1. In Smartsheet, open **Account → Personal Settings → API Access**, then generate an access token. See Smartsheet's [API getting-started guide](https://developers.smartsheet.com/api/smartsheet/guides/getting-started).
-2. Open the target Teable base and launch AI Chat.
+2. Open the target Teable project and launch AI Chat.
3. Type `/`, select **Connect Everything**, and provide the access token and account environment: standard, Regions Europe, or Gov.
4. Ask Teable AI to migrate the accessible Smartsheet workspaces and build the project views, dashboards, and automations your team needs.
diff --git a/en/basic/ai/connect-everything/migrate-smartsuite.mdx b/en/basic/ai/connect-everything/migrate-smartsuite.mdx
index 9a397e10..c7f1acbf 100644
--- a/en/basic/ai/connect-everything/migrate-smartsuite.mdx
+++ b/en/basic/ai/connect-everything/migrate-smartsuite.mdx
@@ -13,7 +13,7 @@ Use **Connect Everything** in [Teable AI Chat](/en/basic/ai/ai-chat) to connect
## Start the migration
1. Get your [SmartSuite API key and Workspace ID](https://help.smartsuite.com/en/articles/6096587-retrieving-your-api-key-and-workspace-id).
-2. Open the target Teable base and launch AI Chat.
+2. Open the target Teable project and launch AI Chat.
3. Type `/`, select **Connect Everything**, and provide the API key and Workspace ID.
4. Ask Teable AI to migrate the SmartSuite solution, then review the result.
diff --git a/en/basic/ai/overview.mdx b/en/basic/ai/overview.mdx
index ec63b27b..075f6143 100644
--- a/en/basic/ai/overview.mdx
+++ b/en/basic/ai/overview.mdx
@@ -45,6 +45,6 @@ Teable integrates powerful AI capabilities throughout the platform to help you w
1. **Enable AI** (Self-hosted only) - Teable Cloud comes with built-in AI ready to use. Self-hosted users should complete [AI Settings](/en/basic/admin-panel/ai-setting) first. If you want to connect your own models, continue with [Custom AI Model](/en/basic/ai/custom-model).
2. **Use AI Chat** - Ask questions about your data or generate charts
-3. **Build Apps** - Turn your Base into a web app with a simple prompt
+3. **Build Apps** - Turn your Project into a web app with a simple prompt
4. **Create AI Fields** - Add AI-powered fields to automatically process your data
5. **Build Automations** - Use AI generate and Run script actions in your workflows
diff --git a/en/basic/ai/teable-skill.mdx b/en/basic/ai/teable-skill.mdx
index e8a43dd2..3113e1f7 100644
--- a/en/basic/ai/teable-skill.mdx
+++ b/en/basic/ai/teable-skill.mdx
@@ -24,7 +24,7 @@ After the skill is installed, try these prompts.
```text Simple Starter Prompts wrap
-Create a simple CRM table in {paste Base URL}.
+Create a simple CRM table in {paste project URL}.
```
```text Local Files → Teable wrap
diff --git a/en/basic/authority-matrix.mdx b/en/basic/authority-matrix.mdx
index 0b1d23ed..54698857 100644
--- a/en/basic/authority-matrix.mdx
+++ b/en/basic/authority-matrix.mdx
@@ -1,13 +1,13 @@
---
title: "Overview"
-description: "Set access scopes for different teams in the same base, so members only see, edit, or export the data they need."
+description: "Set access scopes for different teams in the same project, so members only see, edit, or export the data they need."
---
{/* mintlify-resync: 2026-05-28 */}
Available for Business plan and above
-When sales, finance, operations, and leadership share the same base,
-permissions decide who can enter the base, which data they can see or edit,
+When sales, finance, operations, and leadership share the same project,
+permissions decide who can enter the project, which data they can see or edit,
and whether they can import or export data. The Authority Matrix helps teams
keep data in one place while separating access by responsibility.
@@ -24,7 +24,7 @@ view billing fields, and leadership can view the full dataset.
| Department-level access | Sales can maintain customer records, while finance only sees billing fields. |
| Assignee-based records | Sales reps can view and update only records assigned to them. |
| Restricted data entry | Members can create new records without editing or deleting existing records. |
-| Sensitive fields in a shared base | Members can view order records without seeing payment or cost fields. |
+| Sensitive fields in a shared project | Members can view order records without seeing payment or cost fields. |
| Controlled apps and workflows | Roles can open selected apps or workflows, while unauthorized nodes stay hidden. |
## How Permissions Work
@@ -46,7 +46,7 @@ section:
Use `Add role` to create a custom role. In the role detail page, assign
collaborators, write a short description, and configure access for each node in
-the base:
+the project:
To learn about basic Space and base permission levels, see [Collaboration Permissions](/en/basic/space/space-permission).
+To learn about basic Space and project permission levels, see [Collaboration Permissions](/en/basic/space/space-permission).
diff --git a/en/basic/authority-matrix/authority-matrix-practical-guide.mdx b/en/basic/authority-matrix/authority-matrix-practical-guide.mdx
index d455968b..52a91f6b 100644
--- a/en/basic/authority-matrix/authority-matrix-practical-guide.mdx
+++ b/en/basic/authority-matrix/authority-matrix-practical-guide.mdx
@@ -4,9 +4,9 @@ description: "Configure Authority Matrix roles for a sales team that needs share
---
{/* mintlify-resync: 2026-05-28 */}
-This guide uses a sales base with three tables: `Customers`, `Sales Orders`,
+This guide uses a sales project with three tables: `Customers`, `Sales Orders`,
and `Products`. The goal is to let each role work with the data it needs
-without exposing the whole base.
+without exposing the whole project.
| Role | Access goal |
| --- | --- |
@@ -26,7 +26,7 @@ without exposing the whole base.
- Open the Authority Matrix page in the base and turn on the main switch. The
+ Open the Authority Matrix page in the project and turn on the main switch. The
user who enables it is added as an administrator.
diff --git a/en/basic/automation.mdx b/en/basic/automation.mdx
index b6a8ccc6..b52da7b0 100644
--- a/en/basic/automation.mdx
+++ b/en/basic/automation.mdx
@@ -65,8 +65,8 @@ Rerun attempts are marked as retries and link back to the original run.
| Item | Limit |
|---|---|
-| Email sending rate | 5 / second / base |
-| Webhook receiving rate | 50 / second / base, 2 / second / workflow |
+| Email sending rate | 5 / second / project |
+| Webhook receiving rate | 50 / second / project, 2 / second / workflow |
| Webhook payload size | 4 MB |
| Run quota & history retention | Varies by plan |
@@ -82,7 +82,7 @@ Rerun attempts are marked as retries and link back to the original run.
Teable Cloud may also send critical notifications for unusual usage, such as a large daily increase or a sudden burst in a short time. The system uses recent daily and hourly run patterns, and the exact thresholds may change.
- The notification opens **Space Settings** → **Billing**. When available, it shows which workflow and Base contributed the most runs. Quota reminders are based on runs counted toward your plan limit; unusual usage checks may also consider recent runs with **success**, **failed**, or **pending** status.
+ The notification opens **Space Settings** → **Billing**. When available, it shows which workflow and Project contributed the most runs. Quota reminders are based on runs counted toward your plan limit; unusual usage checks may also consider recent runs with **success**, **failed**, or **pending** status.
If the usage is expected, consider buying extra automation quota or changing your plan. If it is unexpected, review the top workflow and adjust or pause the related automation.
diff --git a/en/basic/automation/actions/communication/send-email-overview.mdx b/en/basic/automation/actions/communication/send-email-overview.mdx
index a22be7ec..55d0cb0e 100644
--- a/en/basic/automation/actions/communication/send-email-overview.mdx
+++ b/en/basic/automation/actions/communication/send-email-overview.mdx
@@ -37,7 +37,7 @@ By default, emails are sent from Teable's built-in mail service. If you need to
\* At least one of **To** or **BCC** is required.
-**Rate limit:** 5 emails / second / base.
+**Rate limit:** 5 emails / second / project.
## How to set it up
diff --git a/en/basic/automation/actions/records/create-record.mdx b/en/basic/automation/actions/records/create-record.mdx
index 688b02c7..138df188 100644
--- a/en/basic/automation/actions/records/create-record.mdx
+++ b/en/basic/automation/actions/records/create-record.mdx
@@ -30,7 +30,7 @@ Creates a new record in a specified table. You can map data from previous steps
## How to set it up
1. Add a **Create Record** action to your workflow.
-2. Choose the **Table** where you want the record created. By default this is a table in the same base, but you can use [Cross-Base Access](/en/basic/automation/actions/records/cross-base) to target a table in another base.
+2. Choose the **Table** where you want the record created. By default this is a table in the same project, but you can use [Cross-Project Access](/en/basic/automation/actions/records/cross-base) to target a table in another project.
3. The field mapping area shows all fields in the target table. For each field you want to fill:
- **Static value:** Type a value directly into the field (e.g., type "New" for a Status field).
- **Dynamic value:** Click the **+** button next to the field to insert a variable from a previous step. For example, insert the trigger's "Name" field to copy the name from the triggering record.
@@ -68,11 +68,11 @@ This is useful when you need to chain actions. For example: create a record, the
- You can create records in bulk by combining this action with [Loop (Batch)](../logic/loop-run). For example, get 50 records from one table and create 50 corresponding records in another.
- Fields you do not map will use the table's default values (if any) or remain empty.
- Linked record fields expect Record IDs, not display values. If you need to link to a record, make sure you are passing the Record ID, not the record's name.
-- Use [Cross-Base Access](/en/basic/automation/actions/records/cross-base) when the target table is in a different base than the automation.
+- Use [Cross-Project Access](/en/basic/automation/actions/records/cross-base) when the target table is in a different project than the automation.
## Related
- [Update record](/en/basic/automation/actions/records/update-record) — modify existing records instead of creating new ones
- [Get records](/en/basic/automation/actions/records/get-records) — retrieve records to use as input for creating new ones
-- [Cross-base access](/en/basic/automation/actions/records/cross-base) — create records in tables outside the current base
+- [Cross-project access](/en/basic/automation/actions/records/cross-base) — create records in tables outside the current project
- [Loop (batch)](../logic/loop-run) — create multiple records in a single action step
diff --git a/en/basic/automation/actions/records/cross-base.mdx b/en/basic/automation/actions/records/cross-base.mdx
index 8ea2581c..3eda1032 100644
--- a/en/basic/automation/actions/records/cross-base.mdx
+++ b/en/basic/automation/actions/records/cross-base.mdx
@@ -1,6 +1,6 @@
---
-title: "Cross-base access"
-description: "Read and write data across different bases in a single workflow"
+title: "Cross-project access"
+description: "Read and write data across different projects in a single workflow"
---
{/* mintlify-resync: 2026-05-26 */}
@@ -10,74 +10,74 @@ We strongly recommend using Run script to build automations, because it can cove
Please note: if you add actions manually, AI will not recognize or modify them later.
-By default, automation actions operate on tables within the workflow's own base. Cross-Base Access lets a workflow read from and write to another base. Use it for workflows that span departments, projects, or datasets.
+By default, automation actions operate on tables within the workflow's own project. Cross-Project Access lets a workflow read from and write to another project. Use it for workflows that span departments, projects, or datasets.
-For example, a Sales base automation can create a fulfillment record in a separate Operations base, or a reporting workflow can pull data from multiple project bases into a single summary.
+For example, a Sales project automation can create a fulfillment record in a separate Operations project, or a reporting workflow can pull data from multiple projects into a single summary.
## Supported actions
-| Action | Cross-Base Support |
+| Action | Cross-Project Support |
|---|---|
| Create Record | Yes |
| Update Record | Yes |
| Get Records | Yes |
-These are the three record-oriented actions. Other actions (Send Email, HTTP Request, etc.) do not need cross-base access because they do not target a specific table.
+These are the three record-oriented actions. Other actions (Send Email, HTTP Request, etc.) do not need cross-project access because they do not target a specific table.
## How to set it up
1. Open a supported action (Create Record, Update Record, or Get Records) in your workflow.
-2. Next to the **Table** selector, click **Cross-Base Access**.
-3. A panel opens showing all spaces and bases your account can access. Select the target **Space**, then the target **Base**.
-4. Choose the **Table** within that base. If the action supports it, you can also select a specific **View**.
-5. Map fields and configure the action as usual. The field list now reflects the target table's fields, not the current base's fields.
+2. Next to the **Table** selector, click **Cross-Project Access**.
+3. A panel opens showing all spaces and projects your account can access. Select the target **Space**, then the target **Project**.
+4. Choose the **Table** within that project. If the action supports it, you can also select a specific **View**.
+5. Map fields and configure the action as usual. The field list now reflects the target table's fields, not the current project's fields.
6. Save the action.
## Concrete example: Sales to Fulfillment
-Imagine you have two bases:
+Imagine you have two projects:
-- **Sales Base** — contains a "Deals" table where the sales team tracks closed deals.
-- **Operations Base** — contains a "Fulfillment" table where the ops team manages shipping.
+- **Sales Project** — contains a "Deals" table where the sales team tracks closed deals.
+- **Operations Project** — contains a "Fulfillment" table where the ops team manages shipping.
You want to automatically create a fulfillment record when a deal closes:
-1. **Trigger:** In the Sales Base, use "When record matches conditions" with filter: `Stage` equals `Closed Won`.
-2. **Action:** Create Record with Cross-Base Access pointing to the Operations Base > Fulfillment table.
+1. **Trigger:** In the Sales Project, use "When record matches conditions" with filter: `Stage` equals `Closed Won`.
+2. **Action:** Create Record with Cross-Project Access pointing to the Operations Project > Fulfillment table.
3. **Field mapping:** Map the deal's Customer Name, Product, Quantity, and Shipping Address to the corresponding fields in the Fulfillment table.
-Now, every time a deal closes, a fulfillment record is automatically created in the Operations Base — no manual handoff needed.
+Now, every time a deal closes, a fulfillment record is automatically created in the Operations Project — no manual handoff needed.
## Permission model
-When you create, edit, or apply workflow updates, Teable checks each cross-base action against the current editor's permissions:
+When you create, edit, or apply workflow updates, Teable checks each cross-project action against the current editor's permissions:
-| Action | Required permission on the target base |
+| Action | Required permission on the target project |
|---|---|
| Get Records | Read fields and records |
| Create Record | Read fields and records, plus create records |
| Update Record | Read fields and records, plus update records |
-Active workflow runs use Teable's automation runtime identity for the target base. Records created or updated by a cross-base action appear as **Automation Robot** in record metadata and audit surfaces.
+Active workflow runs use Teable's automation runtime identity for the target project. Records created or updated by a cross-project action appear as **Automation Robot** in record metadata and audit surfaces.
### What happens when access changes
-If the current editor does not have the required permission on the target base, Teable blocks that editor from adding or changing cross-base actions that point to that base. If a draft already contains cross-base actions the editor cannot access, Teable also blocks applying that draft. The already active version keeps running; Teable checks permissions again the next time someone edits or applies the workflow.
+If the current editor does not have the required permission on the target project, Teable blocks that editor from adding or changing cross-project actions that point to that project. If a draft already contains cross-project actions the editor cannot access, Teable also blocks applying that draft. The already active version keeps running; Teable checks permissions again the next time someone edits or applies the workflow.
To fix a permission error while editing or applying a workflow:
-1. Ask someone with access to both bases to edit and apply the workflow.
-2. Or restore the required permissions on the target base, then apply the workflow again.
+1. Ask someone with access to both projects to edit and apply the workflow.
+2. Or restore the required permissions on the target project, then apply the workflow again.
## Tips
-- Cross-base access can reach bases in different **Spaces**. The editor configuring or applying the workflow must have the required target-base permissions.
-- When mapping fields across bases, field types must be compatible. For example, you cannot map a text field to an attachment field.
-- If you restructure a target base (rename tables, delete fields), the cross-base actions referencing those tables and fields will break. Update your workflow after making structural changes.
-- For complex cross-base workflows, consider centralizing your automations in one "hub" base to keep things organized.
+- Cross-project access can reach projects in different **Spaces**. The editor configuring or applying the workflow must have the required target-project permissions.
+- When mapping fields across projects, field types must be compatible. For example, you cannot map a text field to an attachment field.
+- If you restructure a target project (rename tables, delete fields), the cross-project actions referencing those tables and fields will break. Update your workflow after making structural changes.
+- For complex cross-project workflows, consider centralizing your automations in one "hub" project to keep things organized.
## Related
-- [Create record](/en/basic/automation/actions/records/create-record) — create records in the current or another base
-- [Update record](/en/basic/automation/actions/records/update-record) — update records in the current or another base
-- [Get records](/en/basic/automation/actions/records/get-records) — retrieve records from the current or another base
+- [Create record](/en/basic/automation/actions/records/create-record) — create records in the current or another project
+- [Update record](/en/basic/automation/actions/records/update-record) — update records in the current or another project
+- [Get records](/en/basic/automation/actions/records/get-records) — retrieve records from the current or another project
diff --git a/en/basic/automation/actions/records/get-records.mdx b/en/basic/automation/actions/records/get-records.mdx
index 2d2fb114..0bc28753 100644
--- a/en/basic/automation/actions/records/get-records.mdx
+++ b/en/basic/automation/actions/records/get-records.mdx
@@ -33,7 +33,7 @@ Retrieves records from a table and returns them as an array. Use the results in
## How to set it up
1. Add a **Get Records** action to your workflow.
-2. Choose the **Table** you want to query. Use [Cross-Base Access](/en/basic/automation/actions/records/cross-base) if the table is in a different base.
+2. Choose the **Table** you want to query. Use [Cross-Project Access](/en/basic/automation/actions/records/cross-base) if the table is in a different project.
3. (Optional) Select a **View** to inherit that view's filter, sort, and field visibility settings.
4. (Optional) Add **Filter** conditions to narrow the results. For example, `Status` equals `Active` and `Due Date` is before today.
5. (Optional) Set **Skip** and **Take** for pagination. For example, Skip 0 and Take 100 to get the first 100 records.
@@ -80,11 +80,11 @@ To process an entire large table, you could use multiple Get Records steps with
- Get Records does not modify any data — it is read-only.
- If the query returns zero records, subsequent steps referencing the results will receive an empty array. Make sure your workflow handles this gracefully (e.g., do not send an email saying "here are your results" when there are no results).
- Filters in Get Records work the same as view filters: you can combine conditions with AND/OR logic.
-- When using Cross-Base Access, the query runs under the workflow creator's permissions. If the creator loses access to the target base, the step will fail.
+- When using Cross-Project Access, the query runs under the workflow creator's permissions. If the creator loses access to the target project, the step will fail.
## Related
-- [Cross-base access](/en/basic/automation/actions/records/cross-base) — query tables in other bases
+- [Cross-project access](/en/basic/automation/actions/records/cross-base) — query tables in other projects
- [Loop (batch)](../logic/loop-run) — iterate over the results array
- [Create record](/en/basic/automation/actions/records/create-record) — create records based on retrieved data
- [Update record](/en/basic/automation/actions/records/update-record) — update records found by Get Records
diff --git a/en/basic/automation/actions/records/update-record.mdx b/en/basic/automation/actions/records/update-record.mdx
index 48be9fbb..85acfe6a 100644
--- a/en/basic/automation/actions/records/update-record.mdx
+++ b/en/basic/automation/actions/records/update-record.mdx
@@ -93,11 +93,11 @@ If your automation is triggered by **When record updated** and your Update Recor
- Updating a record may trigger other automations watching the same table. Be aware of cascading effects.
- When updating multiple records with comma-separated IDs, all records receive the same field values. For different values per record, use a [Loop](../logic/loop-run) step instead.
- If you need to clear a field, map it to an empty value. Simply leaving it unmapped will *not* clear it.
-- Use [Cross-Base Access](/en/basic/automation/actions/records/cross-base) to update records in a table that lives in a different base.
+- Use [Cross-Project Access](/en/basic/automation/actions/records/cross-base) to update records in a table that lives in a different project.
## Related
- [Create record](/en/basic/automation/actions/records/create-record) — add new records instead of modifying existing ones
- [Get records](/en/basic/automation/actions/records/get-records) — retrieve records to find their IDs before updating
-- [Cross-base access](/en/basic/automation/actions/records/cross-base) — update records in tables outside the current base
+- [Cross-project access](/en/basic/automation/actions/records/cross-base) — update records in tables outside the current project
- [Loop (batch)](../logic/loop-run) — update multiple records with different values
diff --git a/en/basic/automation/ai/scripting/runscript.mdx b/en/basic/automation/ai/scripting/runscript.mdx
index a0fc4d2a..265e5fff 100644
--- a/en/basic/automation/ai/scripting/runscript.mdx
+++ b/en/basic/automation/ai/scripting/runscript.mdx
@@ -210,7 +210,7 @@ output.set("records", data);
### Calling AI from a script
-`POST /api/automation/runtime/ai` sends a prompt to your base's AI model. The base comes from the automation's context, so no base ID is needed. The body takes `prompt`, plus optional `attachments`, `modelKey`, `temperature`, and `outputType`; the response is `{ "message": ... }`.
+`POST /api/automation/runtime/ai` sends a prompt to your project's AI model. The project comes from the automation's context, so no project ID is needed. The body takes `prompt`, plus optional `attachments`, `modelKey`, `temperature`, and `outputType`; the response is `{ "message": ... }`.
Attachments are `{ url, mimetype, name }` items, up to 10 per call, each under 20MB and 30 seconds to download, covering images, PDFs, and Office documents. The default chat model may not read images and similar attachments, so pass `modelKey` when you send files. Each call consumes credits.
diff --git a/en/basic/automation/examples/api-automation.mdx b/en/basic/automation/examples/api-automation.mdx
index ad0429b8..f8084a7c 100644
--- a/en/basic/automation/examples/api-automation.mdx
+++ b/en/basic/automation/examples/api-automation.mdx
@@ -17,7 +17,7 @@ AI will create the complete workflow automatically. You can review the generated
## Prerequisites
- A Personal Access Token (PAT). See [Access Token](/en/api-doc/token).
-- Your base ID, table ID, and field IDs. See [Get IDs](/en/api-doc/get-id).
+- Your project ID, table ID, and field IDs. See [Get IDs](/en/api-doc/get-id).
## Helper Functions
@@ -74,7 +74,7 @@ await api("PUT", `/base/${baseId}/workflow/${wf.id}/active`, {
## Best Practices
-- Use the least-privileged PAT — restrict it to the spaces/bases it needs.
+- Use the least-privileged PAT — restrict it to the spaces/projects it needs.
- Store tokens in environment variables, never hardcode them.
- Use **Test Node** to verify before enabling.
- See the full [Automation API Reference](/en/api-reference/automation/put-base-workflow-action).
diff --git a/en/basic/automation/examples/cross-base-sync.mdx b/en/basic/automation/examples/cross-base-sync.mdx
index 6d902e16..d026639e 100644
--- a/en/basic/automation/examples/cross-base-sync.mdx
+++ b/en/basic/automation/examples/cross-base-sync.mdx
@@ -1,6 +1,6 @@
---
-title: "Keep records in sync across multiple bases"
-description: "Automatically replicate new or updated records to another base using Cross-Base Access"
+title: "Keep records in sync across multiple projects"
+description: "Automatically replicate new or updated records to another project using Cross-Project Access"
---
We recommend building automation examples directly in AI chat. Just describe the workflow you want, and AI will handle the full setup for you, including the trigger, actions, script, and configuration.
@@ -9,18 +9,18 @@ description: "Automatically replicate new or updated records to another base usi
Open the AI Chat in your table's right sidebar and tell AI what you want. For example, you can say:
-*"When a new order is created in the Sales base, create a matching record in the Fulfillment base with the order ID, customer name, amount, and status set to Pending"*
+*"When a new order is created in the Sales project, create a matching record in the Fulfillment project with the order ID, customer name, amount, and status set to Pending"*
AI will create the complete workflow automatically. You can review the generated script, test it with real data, and enable the workflow when ready.
## Manual setup
-1. **Create a workflow** in the **Sales** base with trigger **When Record Created**.
+1. **Create a workflow** in the **Sales** project with trigger **When Record Created**.
2. Select your **Orders** table.
3. Click **Test**.
4. **Add an action** → **Create Record**.
-5. Click **Cross-Base Access** next to the table selector.
-6. Navigate to the **Fulfillment** base and select the **Orders** table.
+5. Click **Cross-Project Access** next to the table selector.
+6. Navigate to the **Fulfillment** project and select the **Orders** table.
7. Map fields:
- Order ID → trigger's Order ID (via **+**)
- Customer → trigger's Customer
@@ -31,6 +31,6 @@ AI will create the complete workflow automatically. You can review the generated
## Two-Way Sync
To sync updates in both directions:
-1. Create a second workflow in the **Fulfillment** base.
-2. Use **When Record Updated** → **Update Record** with Cross-Base Access pointing back to the Sales base.
+1. Create a second workflow in the **Fulfillment** project.
+2. Use **When Record Updated** → **Update Record** with Cross-Project Access pointing back to the Sales project.
3. Use a filter to avoid infinite loops — e.g. only trigger when specific fields change, and check that the value actually differs before updating.
diff --git a/en/basic/automation/trigger/external/webhook-received.mdx b/en/basic/automation/trigger/external/webhook-received.mdx
index 43389df6..ab6681d3 100644
--- a/en/basic/automation/trigger/external/webhook-received.mdx
+++ b/en/basic/automation/trigger/external/webhook-received.mdx
@@ -78,7 +78,7 @@ Switch **Response** back to **Default** at any time to return to Teable's own ac
## Testing your webhook
-The easiest way to test is with `curl` from the command line. Copy the real URL from the trigger panel rather than typing it out; it carries the base and workflow ids.
+The easiest way to test is with `curl` from the command line. Copy the real URL from the trigger panel rather than typing it out; it carries the project and workflow ids.
**Without authorization:**
@@ -120,7 +120,7 @@ After sending a test request, check the automation's run history to confirm the
| Scope | Limit |
|---|---|
-| Per base | 50 requests / second |
+| Per project | 50 requests / second |
| Per workflow | 2 requests / second |
Requests exceeding the rate limit will receive an HTTP 429 response. If your external system sends bursts of requests, consider implementing retry logic with exponential backoff.
diff --git a/en/basic/base.mdx b/en/basic/base.mdx
index 01b17efb..2b29635e 100644
--- a/en/basic/base.mdx
+++ b/en/basic/base.mdx
@@ -1,42 +1,44 @@
---
title: "Overview"
-description: "Create, manage, import and export bases. Move data between Teable Cloud spaces or migrate between Cloud and Self-Hosted instances using .tea files."
+description: "Create, manage, import and export projects. Move data between Teable Cloud spaces or migrate between Cloud and Self-Hosted instances using .tea files."
---
{/* mintlify-resync: 2026-05-26 */}
-A base is a tool for storing and processing all information for a specific project. Each space can have multiple bases, and each base can work independently, providing a clear information structure for specific projects or table collections.
+A project groups related tables, apps, and automations in one place. Each space can contain multiple projects, and each project has its own resources and collaboration permissions.
-For users unfamiliar with bases, you can think of them as workbooks in Excel, where each workbook can contain multiple sheets.
+Project is the product name for the resource called `base` in the API and CLI. API fields such as `baseId`, the `bse` ID prefix, and `/base/...` URLs stay the same.
-## Create and Manage Bases
+For users unfamiliar with projects, you can think of them as workbooks in Excel, where each workbook can contain multiple sheets.
-### Adding a Base
+## Create and Manage Projects {#create-and-manage-bases}
+
+### Adding a Project {#adding-a-base}
1. Enter a space
-2. Click "Create Base" in the upper right corner
+2. Click "Create Project" in the upper right corner
-### Renaming/Deleting a Base
+### Renaming/Deleting a Project {#renamingdeleting-a-base}
1. Enter a space
-2. Hover over a base
+2. Hover over a project
3. Click the "···" button to open the menu
4. Click "Rename" or "Delete"
-### Organize Resources in a Base
+### Organize Resources in a Project {#organize-resources-in-a-base}
-After entering a base, the left sidebar shows the resources in the current base, such as tables, apps, and automations. You can use folders to organize these resources and make large bases easier to browse.
+After entering a project, the left sidebar shows the resources in the current project, such as tables, apps, and automations. You can use folders to organize these resources and make large projects easier to browse.
Common operations include:
@@ -46,40 +48,40 @@ Common operations include:
- **Add descriptions**: For tables, apps, and automations, click **Add description** under the resource name in the header. Use descriptions to record purpose, owner, handoff notes, or usage rules. Teable opens a description the first time you open its resource, and once more after it changes.
- **Check node info**: Open a resource's `...` menu and choose **Node info** to view the folder, table, automation, or app ID, plus created and modified information.
-### Duplicate a Base to Another Space {#duplicate-a-base-to-another-space}
+### Duplicate a Project to Another Space {#duplicate-a-base-to-another-space}
-Step 1: In the space, select the base you want to duplicate;
+Step 1: In the space, select the project you want to duplicate;
-Step 2: Click the menu icon and select the Copy Base option;
+Step 2: Click the menu icon and select the Copy Project option;
Step 3: In the popup, choose the target space. You need Creator permissions in that space.
-For larger bases, Teable shows progress in the duplicate dialog while it copies the base structure, records, and attachments. Keep the dialog open until the copy finishes. Revision history and collaborators are not copied.
+For larger projects, Teable shows progress in the duplicate dialog while it copies the project structure, records, and attachments. Keep the dialog open until the copy finishes. Revision history and collaborators are not copied.
-If the base contains Link, Lookup, Rollup, Conditional Lookup, or Conditional Rollup fields that point to another Space, Teable shows the affected fields before duplication. If you continue, Teable converts those fields to **Single line text** in the duplicated base.
+If the project contains Link, Lookup, Rollup, Conditional Lookup, or Conditional Rollup fields that point to another Space, Teable shows the affected fields before duplication. If you continue, Teable converts those fields to **Single line text** in the duplicated project.
-### Move a Base Between Spaces
+### Move a Project Between Spaces {#move-a-base-between-spaces}
-If you have the required Space permissions, you can move a base to another Space. If the move would leave relationship-based fields pointing across Spaces, Teable warns you and lists the affected fields. When you confirm, Teable converts those fields to **Single line text** as part of the move.
+If you have the required Space permissions, you can move a project to another Space. If the move would leave relationship-based fields pointing across Spaces, Teable warns you and lists the affected fields. When you confirm, Teable converts those fields to **Single line text** as part of the move.
-## Import and Export Bases
+## Import and Export Projects {#import-and-export-bases}
Use AI Chat to migrate Airtable, Baserow, NocoDB, SmartSuite, and other systems into Teable.
-### Import Base (Data Migration)
+### Import Project (Data Migration) {#import-base-data-migration}
-The `.tea` file format imports a complete base with all its tables, fields, data, and configurations. This is useful for:
-- **Data Migration**: Move bases between different Teable instances (e.g., from Cloud to Self-Hosted)
-- **Backup Restoration**: Restore a previously exported base
-- **Template Sharing**: Share complete base structures with other teams
+The `.tea` file format imports a complete project with all its tables, fields, data, and configurations. This is useful for:
+- **Data Migration**: Move projects between different Teable instances (e.g., from Cloud to Self-Hosted)
+- **Backup Restoration**: Restore a previously exported project
+- **Template Sharing**: Share complete project structures with other teams
**Steps:**
1. Enter the space
@@ -89,19 +91,19 @@ The `.tea` file format imports a complete base with all its tables, fields, data
-If you want to create a base from Airtable, choose **Import from Airtable** in the same import dialog.
+If you want to create a project from Airtable, choose **Import from Airtable** in the same import dialog.
-### Export Base (Backup & Migration) {#export-base-backup-&-migration}
+### Export Project (Backup & Migration) {#export-base-backup-&-migration}
-Export your base to a `.tea` file for backup or migration purposes. The exported file contains all tables, fields, data, views, and configurations.
+Export your project to a `.tea` file for backup or migration purposes. The exported file contains all tables, fields, data, views, and configurations.
**Steps:**
1. Enter the space
-2. Hover your mouse over the base you want to export
+2. Hover your mouse over the project you want to export
3. Click the 「···」 button to open the menu
4. Click 「Export」
5. Keep **Include records** turned on to export record data. Turn it off to export only the structure and configuration.
@@ -110,28 +112,28 @@ Export your base to a `.tea` file for backup or migration purposes. The exported
-- To migrate data between Teable instances, export your base from the source instance, then import the `.tea` file to the target instance. All data and configurations will be preserved.
-- Teable converts cross-base relation fields to **Single line text** fields in the exported file.
-- When you duplicate or move a base across Spaces, cross-Space relationship fields are converted to **Single line text**.
+- To migrate data between Teable instances, export your project from the source instance, then import the `.tea` file to the target instance. All data and configurations will be preserved.
+- Teable converts cross-project relation fields to **Single line text** fields in the exported file.
+- When you duplicate or move a project across Spaces, cross-Space relationship fields are converted to **Single line text**.
-## Share a Base
+## Share a Project {#share-a-base}
-Bases can be shared through public links. The sharing scope can be the entire base or the currently selected item.
+Projects can be shared through public links. The sharing scope can be the entire project or the currently selected item.
-1. Enter the target base
-2. Open the share menu for the base or selected item
+1. Enter the target project
+2. Open the share menu for the project or selected item
3. Turn on **Share to web**
4. Copy the share link or QR code
@@ -139,29 +141,29 @@ Sharing scopes include:
| Scope | Description |
|------|------|
-| **Share entire base** | Shares all items in the current base. New tables and folders added later are automatically included. |
+| **Share entire project** | Shares all items in the current project. New tables and folders added later are automatically included. |
| **Share selected item** | Shares the currently selected item. When a folder is shared, its child items are included. |
In the share settings, you can configure link permissions, **Allow viewers to copy data**, password access, regenerate the link, delete the share link, or copy the embed config.
If the sharing scope includes an app, the app must be published before it can be accessed through the public link.
-## Features Within a Base
+## Features Within a Project {#features-within-a-base}
-A base can contain multiple tables for recording and organizing work or business-related information.
+A project can contain multiple tables for recording and organizing work or business-related information.
-For example: A customer management base might have separate tables for "Customer Companies," "Customer Contacts," and "Customer Follow-up Records," while a meeting room management base might have separate tables for recording "Meeting Room Management," "Meeting Room Equipment," and "Meeting Room Reservations."
+For example: A customer management project might have separate tables for "Customer Companies," "Customer Contacts," and "Customer Follow-up Records," while a meeting room management project might have separate tables for recording "Meeting Room Management," "Meeting Room Equipment," and "Meeting Room Reservations."
-Therefore, most features within a base are related to tables:
+Therefore, most features within a project are related to tables:
-* **Creating Tables**: Bases allow users to create new tables based on project-specific needs, where users can define table structure, fields, and data types.
-* **Editing Tables**: Users can edit existing tables within the base, including adding, deleting, and modifying records.
-* **Exporting and Importing Data**: Bases support exporting data to CSV, and importing data in both CSV and XLSX formats.
+* **Creating Tables**: Projects allow users to create new tables based on project-specific needs, where users can define table structure, fields, and data types.
+* **Editing Tables**: Users can edit existing tables within the project, including adding, deleting, and modifying records.
+* **Exporting and Importing Data**: Projects support exporting data to CSV, and importing data in both CSV and XLSX formats.
Refer to the [Tables section](/en/basic/table) for more information about tables.
diff --git a/en/basic/credential.mdx b/en/basic/credential.mdx
index e0cd9cb2..84e119ef 100644
--- a/en/basic/credential.mdx
+++ b/en/basic/credential.mdx
@@ -39,7 +39,7 @@ Open the resource's credential panel:
Every grant needs a **Variable name**, the alias this credential has inside that app or automation. It follows the same naming rules as a secret key, and it is the name the code reads.
-The panel can also list **Not bound yet** placeholders. Copying an app, duplicating a workflow, and importing or duplicating a base carry over the aliases the code expects but none of the credentials. Click **Bind mine** to supply your own credential so the app or automation can run.
+The panel can also list **Not bound yet** placeholders. Copying an app, duplicating a workflow, and importing or duplicating a project carry over the aliases the code expects but none of the credentials. Click **Bind mine** to supply your own credential so the app or automation can run.
When an alias currently holds someone else's credential, **Replace with mine** takes it over. **Only remove the grant (keep placeholder)** unbinds it and leaves the placeholder, so the code needs no change.
diff --git a/en/basic/security.mdx b/en/basic/security.mdx
index a47a97ca..3da1385f 100644
--- a/en/basic/security.mdx
+++ b/en/basic/security.mdx
@@ -112,13 +112,13 @@ Teable provides multiple options for backing up your data:
| Method | Description | Use Case |
|--------|-------------|----------|
-| **[Base Export](/en/basic/base#export-base-backup-&-migration)** | Download entire Base as `.tea` file (structure, data, automations) | Full backup, migration |
-| **[Base Duplicate](/en/basic/base#duplicate-a-base-to-another-space)** | Create a copy of Base within Teable | Quick snapshot |
+| **[Project Export](/en/basic/base#export-base-backup-&-migration)** | Download entire Project as `.tea` file (structure, data, automations) | Full backup, migration |
+| **[Project Duplicate](/en/basic/base#duplicate-a-base-to-another-space)** | Create a copy of Project within Teable | Quick snapshot |
| **[CSV Export](/en/basic/table/export)** | Export individual table data | Data portability |
| **[API Export](/en/api-doc/record/get)** | Programmatically export records via REST API | Automated backups |
-You can manually back up your bases by exporting the entire Base as a `.tea` file, exporting individual tables as CSV files, or retrieving your data via the Teable API.
+You can manually back up your projects by exporting the entire Project as a `.tea` file, exporting individual tables as CSV files, or retrieving your data via the Teable API.
## Single Sign-On (SSO)
diff --git a/en/basic/space.mdx b/en/basic/space.mdx
index 5a5e3118..abbd19c0 100644
--- a/en/basic/space.mdx
+++ b/en/basic/space.mdx
@@ -64,15 +64,15 @@ Deleted spaces will go to the trash, where you can choose to empty the trash to
## Shared with Me
-When someone shares a base with you as a collaborator, the base appears under **Shared with me** in the space sidebar.
+When someone shares a project with you as a collaborator, the project appears under **Shared with me** in the space sidebar.
-Bases shared with you are different from bases in your own spaces:
+Projects shared with you are different from projects in your own spaces:
- Access is controlled by the sharer.
-- Available actions depend on the base permission you were granted.
-- If the sharer removes your access, the base no longer appears.
+- Available actions depend on the project permission you were granted.
+- If the sharer removes your access, the project no longer appears.
-For public base sharing, see [Base](/en/basic/base).
+For public project sharing, see [Project](/en/basic/base).
## Space Settings
@@ -95,7 +95,7 @@ In the AI settings page, space owners can configure custom model providers for A
**Chat in IM**
-On the **Chat in IM** page, space administrators can create bots and configure their model, accessible Bases, Skills, files, and IM integration.
+On the **Chat in IM** page, space administrators can create bots and configure their model, accessible Projects, Skills, files, and IM integration.
**Plan**
diff --git a/en/basic/space/base-invite.mdx b/en/basic/space/base-invite.mdx
index 5d384d05..784e5ebb 100644
--- a/en/basic/space/base-invite.mdx
+++ b/en/basic/space/base-invite.mdx
@@ -1,39 +1,39 @@
---
-title: "Base Invitation"
-description: "Manage permissions at the base level. Invite members to a specific base without granting access to the entire space for more granular and secure data collaboration."
+title: "Project Invitation"
+description: "Manage permissions at the project level. Invite members to a specific project without granting access to the entire space for more granular and secure data collaboration."
---
-## What is a Base Collaborator?
+## What is a Project Collaborator? {#what-is-a-base-collaborator}
-A base collaborator is a member invited to a specific base only. Unlike space collaborators, they can only access the bases they've been invited to and cannot see other bases in the space.
+A project collaborator is a member invited to a specific project only. Unlike space collaborators, they can only access the projects they've been invited to and cannot see other projects in the space.
-## Adding Base Collaborators
+## Adding Project Collaborators {#adding-base-collaborators}
-Enter any base and click the `Invite` button in the top-right corner. Two methods are supported:
+Enter any project and click the `Invite` button in the top-right corner. Two methods are supported:
-- **Invite by email**: Enter the recipient's email address, set the base permission level (e.g. "Creator"), and click **Send Invitation**.
+- **Invite by email**: Enter the recipient's email address, set the project permission level (e.g. "Creator"), and click **Send Invitation**.
- **Invite by link**: Switch to the "Invite via Link" tab to generate a dedicated invitation link. Copy and share the link. Recipients can join by clicking it.
-After sending an email invitation, you can copy the direct Base link shown in the panel and send it separately. The invitee also receives an in-app notification that opens the Base.
+After sending an email invitation, you can copy the direct Project link shown in the panel and send it separately. The invitee also receives an in-app notification that opens the Project.
-In the invitation panel, you can view all users who currently have access to the base:
+In the invitation panel, you can view all users who currently have access to the project:
-- **Base collaborators**: Members invited directly to this base only.
-- **Space collaborators**: Shown with a "Space" badge next to their name, indicating they are space-level members who automatically inherit access to this base.
+- **Project collaborators**: Members invited directly to this project only.
+- **Space collaborators**: Shown with a "Space" badge next to their name, indicating they are space-level members who automatically inherit access to this project.
-The base offers four permission roles to support different levels of collaboration. For a detailed permission comparison, see [Permission Details](/en/basic/space/space-permission).
+The project offers four permission roles to support different levels of collaboration. For a detailed permission comparison, see [Permission Details](/en/basic/space/space-permission).
For finer-grained control at the table, field, or record level, use the [Authority Matrix](/en/basic/authority-matrix) feature.
@@ -46,11 +46,11 @@ The base offers four permission roles to support different levels of collaborati
## Use Cases
-Base invitation is designed for external collaborators. For example, a freelance designer hired to organize an asset library can be invited to that base alone with **Editor** permission, without seeing any other bases in the space.
+Project invitation is designed for external collaborators. For example, a freelance designer hired to organize an asset library can be invited to that project alone with **Editor** permission, without seeing any other projects in the space.
## Notes
-- **Permission inheritance**: A space Manager automatically has full access to all bases in that space and cannot be downgraded at the base level.
-- **Link security**: Anyone who obtains an invitation link can attempt to join the base. If a link is leaked, you can revoke it by clicking the X next to it in the invitation panel.
+- **Permission inheritance**: A space Manager automatically has full access to all projects in that space and cannot be downgraded at the project level.
+- **Link security**: Anyone who obtains an invitation link can attempt to join the project. If a link is leaked, you can revoke it by clicking the X next to it in the invitation panel.
When the [Authority Matrix](/en/basic/authority-matrix) and [Permission Details](/en/basic/space/space-permission) coexist, only **Manager** users are exempt from Authority Matrix restrictions. All other users are subject to it.
diff --git a/en/basic/space/billing.mdx b/en/basic/space/billing.mdx
index 69e145e2..5ad910f9 100644
--- a/en/basic/space/billing.mdx
+++ b/en/basic/space/billing.mdx
@@ -41,19 +41,19 @@ Monitor your space's resource consumption with these metrics:
| Metric | Description |
|--------|-------------|
-| **Total collaborators** | Number of billable collaborators in the current space and its bases |
+| **Total collaborators** | Number of billable collaborators in the current space and its projects |
| **Maximum monthly automation runs** | Monthly automation run quota. Each automation run consumes 1 run quota |
| **Total records** | Total row count across all tables in the space |
| **Attachments storage** | Total storage used by uploaded attachments |
| **Total emails** | Emails sent via automation using Teable Email Service |
-Data in both space trash and base trash are counted in the total record statistics. To reduce the total record count, clean up data in "Space → Trash" or "Base → Trash".
+Data in both space trash and project trash are counted in the total record statistics. To reduce the total record count, clean up data in "Space → Trash" or "Project → Trash".
-Click **Details** on the **Total records** card to view record usage by Base. The dialog shows active records, trash records, and total records for each Base. You can open a Base trash page from the dialog, or permanently delete a Base that is already in trash.
+Click **Details** on the **Total records** card to view record usage by Project. The dialog shows active records, trash records, and total records for each Project. You can open a Project trash page from the dialog, or permanently delete a Project that is already in trash.
### When a Limit Is Reached
-When the space reaches a plan limit, Teable stops the action before it runs and opens the upgrade dialog, which names the limit you hit, shows how much of it you have used, and links to per-Base usage. This applies to pasting, filling, duplicating rows, creating records in bulk, importing, and uploading attachments.
+When the space reaches a plan limit, Teable stops the action before it runs and opens the upgrade dialog, which names the limit you hit, shows how much of it you have used, and links to per-Project usage. This applies to pasting, filling, duplicating rows, creating records in bulk, importing, and uploading attachments.
To continue, upgrade the plan or free up room by deleting records or attachments.
@@ -129,9 +129,9 @@ Changing an existing subscription goes through a confirmation page in the billin
### Seats
-Seats are purchased up front, and buying ahead of your team is fine. A seat is taken by collaborators with the **Owner**, **Creator**, or **Editor** role in the space and its bases. **Commenter** and **Viewer** are free.
+Seats are purchased up front, and buying ahead of your team is fine. A seat is taken by collaborators with the **Owner**, **Creator**, or **Editor** role in the space and its projects. **Commenter** and **Viewer** are free.
-On cloud plans the purchased seats are a hard limit. Teable blocks any action that would push the space past it and offers to add seats. This covers email invitations, creating an invite link with a billable role or switching a link to one, joining through such a link, adding collaborators directly, and promoting someone to a billable role. Someone who already holds a seat can join another base or change role without taking a new one.
+On cloud plans the purchased seats are a hard limit. Teable blocks any action that would push the space past it and offers to add seats. This covers email invitations, creating an invite link with a billable role or switching a link to one, joining through such a link, adding collaborators directly, and promoting someone to a billable role. Someone who already holds a seat can join another project or change role without taking a new one.
To continue, add seats on the Plan page, or give the person the free Commenter or Viewer role. Only the space owner can buy seats.
diff --git a/en/basic/space/space-invite.mdx b/en/basic/space/space-invite.mdx
index 9137a641..dd44b866 100644
--- a/en/basic/space/space-invite.mdx
+++ b/en/basic/space/space-invite.mdx
@@ -5,7 +5,7 @@ description: "Invite others to become space collaborators via email or link"
## What is a Space Collaborator?
-When you share a space with another user, they become a space collaborator with access to all bases within that space.
+When you share a space with another user, they become a space collaborator with access to all projects within that space.
## Adding Space Collaborators
@@ -14,7 +14,7 @@ When you share a space with another user, they become a space collaborator with
1. Click the space where you want to add collaborators in the left sidebar.
2. Click the "Invite" button near the top of the space.
3. This opens the space invitation window, where you'll see options to invite via email or link. You'll also find previously configured "Invitation Links" and existing "Space Collaborators" in their respective sections.
-4. **Email invitation**: Enter an email address or multiple addresses (separated by commas). Then, set the permission level you want users to have for all bases in the space. Finally, click send email to invite users to collaborate.
+4. **Email invitation**: Enter an email address or multiple addresses (separated by commas). Then, set the permission level you want users to have for all projects in the space. Finally, click send email to invite users to collaborate.
After sending an email invitation, you can copy the direct Space link shown in the panel and send it separately. The invitee also receives an in-app notification that opens the Space.
@@ -24,7 +24,7 @@ When you share a space with another user, they become a space collaborator with
className="docs-screenshot"
/>
-5. **Link invitation**: Click the "Invite via Link" option. Then, set the permission level that the invitation link will grant for all bases in the space. Finally, click create link. You can now click the clipboard icon next to the created link to share it however you see fit.
+5. **Link invitation**: Click the "Invite via Link" option. Then, set the permission level that the invitation link will grant for all projects in the space. Finally, click create link. You can now click the clipboard icon next to the created link to share it however you see fit.
-Space collaborators have access to all bases in the space. If someone only needs to work on specific bases, consider making them [Base Collaborators](/en/basic/space/base-invite).
+Space collaborators have access to all projects in the space. If someone only needs to work on specific projects, consider making them [Project Collaborators](/en/basic/space/base-invite).
## Deleting Invitation Links
@@ -56,7 +56,7 @@ You can remove space collaborators from the space sharing window. Click the X ne
* **Permission restriction**: Only users with Manager or Creator permissions can remove other collaborators.
* **Self-removal**: You can remove your own access if there is at least one other Manager in the space.
-* **Scope**: Removing someone from the space does not remove the permissions they hold on individual bases.
+* **Scope**: Removing someone from the space does not remove the permissions they hold on individual projects.
When adding new users to a space, you can assign the following roles (see [Permission Details](/en/basic/space/space-permission)):
@@ -68,8 +68,8 @@ When adding new users to a space, you can assign the following roles (see [Permi
| Commenter | Can comment on records but cannot modify data. |
| Viewer | Can view but cannot comment. |
-## Reviewing Base Access
+## Reviewing Project Access {#reviewing-base-access}
-Each person or department appears once in the space collaborator list, even when they also hold permissions on individual bases. A **Base permissions** badge next to the role shows how many bases they were invited to. Someone who was never added to the space itself is listed as **Has access to selected bases only**.
+Each person or department appears once in the space collaborator list, even when they also hold permissions on individual projects. A **Project permissions** badge next to the role shows how many projects they were invited to. Someone who was never added to the space itself is listed as **Has access to selected projects only**.
-Expand a row to see those bases and the role held on each. From there, **Remove base access** withdraws one base permission, and **Remove collaborator** on a base-only row withdraws every base permission that person holds in this space.
+Expand a row to see those projects and the role held on each. From there, **Remove project access** withdraws one project permission, and **Remove collaborator** on a project-only row withdraws every project permission that person holds in this space.
diff --git a/en/basic/space/space-permission.mdx b/en/basic/space/space-permission.mdx
index 368f2a62..a65c8cd8 100644
--- a/en/basic/space/space-permission.mdx
+++ b/en/basic/space/space-permission.mdx
@@ -1,20 +1,20 @@
---
title: "Collaboration Permission Details"
-description: "This section outlines the operational scope for four different permission levels in spaces and bases."
+description: "This section outlines the operational scope for four different permission levels in spaces and projects."
---
Teable provides more granular permission control at table/field/record levels. Please refer to the [Authority Matrix](/en/basic/authority-matrix) section.
-### Base Operations
+### Project Operations {#base-operations}
| Description | Creator/Manager | Editor | Commenter | Viewer |
| ----------- | :------------: | :----: | :-------: | :----: |
-| View data within the base | ✅ | ✅ | ✅ | ✅ |
+| View data within the project | ✅ | ✅ | ✅ | ✅ |
| Invite users with equal or lower permissions | ✅ | ✅ | ✅ | ✅ |
| Create or delete view share links | ✅ | ✅ | | |
| Create and edit automations | ✅ | | | |
| Enable authority matrix | ✅ | | | |
-| Create or delete base collaboration invitation links | ✅ | | | |
-| Rename base | ✅ | | | |
+| Create or delete project collaboration invitation links | ✅ | | | |
+| Rename project | ✅ | | | |
### Record Operations
@@ -51,12 +51,12 @@ description: "This section outlines the operational scope for four different per
| Description | Manager | Creator | Editor | Commenter | Viewer |
| ----------- | :-----: | :-----: | :----: | :-------: | :----: |
-| Access all bases in the space | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Access all projects in the space | ✅ | ✅ | ✅ | ✅ | ✅ |
| Invite users with equal or lower permissions | ✅ | ✅ | ✅ | ✅ | ✅ |
| Rename space | ✅ | ✅ | | | |
-| Add and remove bases in space | ✅ | ✅ | | | |
-| Rearrange bases within space | ✅ | ✅ | | | |
-| Move bases between spaces | ✅ | ✅ | | | |
+| Add and remove projects in space | ✅ | ✅ | | | |
+| Rearrange projects within space | ✅ | ✅ | | | |
+| Move projects between spaces | ✅ | ✅ | | | |
| Adjust billing settings, upgrade space | ✅ | | | | |
| Grant manager permissions | ✅ | | | | |
diff --git a/en/basic/table.mdx b/en/basic/table.mdx
index 66a5996f..652f3e03 100644
--- a/en/basic/table.mdx
+++ b/en/basic/table.mdx
@@ -1,16 +1,16 @@
---
title: "Overview"
-description: "Create, import, share, and manage tables in a base."
+description: "Create, import, share, and manage tables in a project."
---
{/* mintlify-resync: 2026-05-14 */}
-Each base can contain multiple tables for storing and managing related data. Teable tables are equivalent to database tables — understanding [how they differ from spreadsheets](/en/compare/teable-vs-excel) will help you get the most out of Teable.
+Each project can contain multiple tables for storing and managing related data. Teable tables are equivalent to database tables — understanding [how they differ from spreadsheets](/en/compare/teable-vs-excel) will help you get the most out of Teable.
## Create and Manage Tables
### Adding Tables
-In a base, click the `+` button in the directory and choose to:
+In a project, click the `+` button in the directory and choose to:
-When other tables link to the table you are deleting, the confirmation dialog lists the fields the delete affects, with the Base and table each one belongs to. Deleting the table converts those link fields into single line text fields that keep the linked record titles, and lookup or rollup fields built on them stop working.
+When other tables link to the table you are deleting, the confirmation dialog lists the fields the delete affects, with the Project and table each one belongs to. Deleting the table converts those link fields into single line text fields that keep the linked record titles, and lookup or rollup fields built on them stop working.
### Trash
-Click the trash icon in the upper left of the base to manage deleted tables.
+Click the trash icon in the upper left of the project to manage deleted tables.
-- **Restore**: Bring the table back to the base with all data intact
+- **Restore**: Bring the table back to the project with all data intact
- **Empty trash**: Permanently delete all trashed tables
Restoring a table does not undo the link conversion. Link fields in other tables stay text, so recreate them if you need the connection back.
diff --git a/en/basic/table/import.mdx b/en/basic/table/import.mdx
index 2a4b4473..8a0545e0 100644
--- a/en/basic/table/import.mdx
+++ b/en/basic/table/import.mdx
@@ -4,7 +4,7 @@ description: "Import CSV, Excel, Airtable, or Google Sheets data into Teable."
---
{/* mintlify-resync: 2026-05-14 */}
-Use import to initialize a new table, append new data to an existing table, or bring tables from Airtable or Google Sheets into a Teable base. Airtable and Google Sheets are also available when you import a whole base.
+Use import to initialize a new table, append new data to an existing table, or bring tables from Airtable or Google Sheets into a Teable project. Airtable and Google Sheets are also available when you import a whole project.
Use Connect Everything in AI Chat to migrate Airtable, Baserow, NocoDB, SmartSuite, and other systems into Teable.
@@ -72,16 +72,16 @@ After upload, map file columns to fields in the target table, then click **Impor
If Airtable integration is configured for your instance, you can use Airtable import in two ways:
-- To create a new Teable base, open the target space menu, click **Import**, then choose **Import from Airtable**.
-- To import tables into the Teable base you are viewing, use the base resource menu:
+- To create a new Teable project, open the target space menu, click **Import**, then choose **Import from Airtable**.
+- To import tables into the Teable project you are viewing, use the project resource menu:
-1. Open the target Teable base.
+1. Open the target Teable project.
2. Click `+` at the top of the left directory.
3. Under **Add from other sources**, choose **Airtable**.
@@ -99,8 +99,8 @@ During import, Teable shows progress by table. If some fields, views, or values
Start from either entry point:
-- To create a new Teable base, open the target space menu, click **Import**, then choose **Import from Google Sheets**.
-- To add tables to the base you are viewing, click `+` at the top of the left directory and choose **Google Sheets** under **Add from other sources**.
+- To create a new Teable project, open the target space menu, click **Import**, then choose **Import from Google Sheets**.
+- To add tables to the project you are viewing, click `+` at the top of the left directory and choose **Google Sheets** under **Add from other sources**.
@@ -113,7 +113,7 @@ Start from either entry point:
Each tab is shown as a card with its row and column count. Select the tabs you want. Clear **Import records** if you only want the field structure without the data.
- Click **Start import** and keep the dialog open. It reports progress table by table and, when it finishes, how many records each table received. After a new-base import, use **Open base** to go straight to the result.
+ Click **Start import** and keep the dialog open. It reports progress table by table and, when it finishes, how many records each table received. After a new-project import, use **Open project** to go straight to the result.
diff --git a/en/basic/view/toolbar.mdx b/en/basic/view/toolbar.mdx
index a95c24e0..a8f91109 100644
--- a/en/basic/view/toolbar.mdx
+++ b/en/basic/view/toolbar.mdx
@@ -148,9 +148,9 @@ Use the `Auto-sort records` toggle in the sort menu.
## Share View
-**Share view** publishes the current view as a link. Visitors see the data and layout in that view. This is not the same as inviting them as base collaborators.
+**Share view** publishes the current view as a link. Visitors see the data and layout in that view. This is not the same as inviting them as project collaborators.
-To share an entire base, a specific table, or a folder, use base sharing in [Base](/en/basic/base).
+To share an entire project, a specific table, or a folder, use project sharing in [Project](/en/basic/base).
| Share option | Best for |
| --- | --- |
@@ -240,5 +240,5 @@ If the view is locked, or you do not have permission to edit the view, you can s
## Notes
- Changing filters, groups, sorts, visible fields, or row height affects everyone using the current view, unless you are in personal mode.
-- Share view publishes the current view result, not full base permissions. For ongoing collaboration, use member permissions or base sharing.
+- Share view publishes the current view result, not full project permissions. For ongoing collaboration, use member permissions or project sharing.
- In either mode, edits to cell values are still synced to everyone.
diff --git a/en/deploy/env.mdx b/en/deploy/env.mdx
index 1e7a2a8a..d24c68f2 100644
--- a/en/deploy/env.mdx
+++ b/en/deploy/env.mdx
@@ -71,7 +71,7 @@ mode: "wide"
| BACKEND_MAIL_AUTH_USER | Default mail server authentication username | - | - | username |
| BACKEND_MAIL_AUTH_PASS | Default mail server authentication password | - | - | usertoken |
| BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH | Maximum inviter name length in invitation email subjects. Empty or 0 disables truncation | - | - | 32 |
-| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Maximum space or Base name length in invitation email subjects. Empty or 0 disables truncation | - | - | 32 |
+| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Maximum space or Project name length in invitation email subjects. Empty or 0 disables truncation | - | - | 32 |
| **Session/JWT Configuration** | | | | |
| BACKEND_SESSION_EXPIRES_IN | Session expiration time | 7d | - | 7d |
| BACKEND_SESSION_COOKIE_SECURE | Whether to secure session cookie | false | - | true |
@@ -93,7 +93,7 @@ mode: "wide"
| TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | Maximum records per mutation | 20000 | - | 20000 |
| TABLE_LIMIT_COMPUTED_CELL_VALUE_MAX_BYTES | Maximum computed cell value bytes | 262144 | - | 262144 |
| TABLE_LIMIT_FORMULA_MAX_LENGTH | Maximum formula length | 8192 | - | 8192 |
-| TABLE_LIMIT_TABLES_PER_BASE_MAX | Maximum tables per base | 1000 | - | 1000 |
+| TABLE_LIMIT_TABLES_PER_BASE_MAX | Maximum tables per project | 1000 | - | 1000 |
| TABLE_LIMIT_FIELDS_PER_TABLE_MAX | Maximum fields per table | 500 | - | 500 |
| TABLE_LIMIT_VIEWS_PER_TABLE_MAX | Maximum views per table | 100 | - | 100 |
| TABLE_LIMIT_CREATE_TABLE_FIELDS_MAX | Maximum fields accepted when creating a table | 1000 | - | 1000 |
@@ -133,10 +133,10 @@ mode: "wide"
| TELEMETRY_REPORT_DISABLED | Disable self-hosted telemetry reporting, including license compliance reports from connected instances | false | - | true |
| **Database Configuration** | | | | |
| PRISMA_DATABASE_URL | Database connection URL, must be configured | - | Yes | postgresql://teable:teable@127.0.0.1:5432/teable |
-| PUBLIC_DATABASE_PROXY | Externally reachable database address (host:port) used in the credentials generated by the base "Database Connection" panel; set it to enable external read-only SQL access | - | - | db.example.com:42345 |
+| PUBLIC_DATABASE_PROXY | Externally reachable database address (host:port) used in the credentials generated by the project "Database Connection" panel; set it to enable external read-only SQL access | - | - | db.example.com:42345 |
| PRISMA_TRANSACTION_TIMEOUT | Maximum time (ms) a transaction can run before timing out. Increase for long-running transactions (e.g., bulk updates with many foreign keys) | 5000 | - | 60000 |
| PRISMA_TRANSACTION_MAX_WAIT | Maximum time (ms) to wait to acquire a transaction from the pool | 2000 | - | 5000 |
-| BIG_TRANSACTION_TIMEOUT | Timeout (ms) for large internal transactions, such as exporting large bases | 600000 | - | 1200000 |
+| BIG_TRANSACTION_TIMEOUT | Timeout (ms) for large internal transactions, such as exporting large projects | 600000 | - | 1200000 |
## Secrets and rotation {#secrets-and-rotation}
diff --git a/es/api-doc/get-id.mdx b/es/api-doc/get-id.mdx
index ebeeff98..ecfb116c 100644
--- a/es/api-doc/get-id.mdx
+++ b/es/api-doc/get-id.mdx
@@ -14,11 +14,11 @@ Haz clic en el Espacio de destino y copia de la URL la cadena que comienza con '
## BaseId
-Haz clic en la Base de destino y copia de la URL la cadena que comienza con 'bse'; ejemplo: `bseXXXXXXXXXX`
+Haz clic en el Proyecto de destino y copia de la URL la cadena que comienza con 'bse'; ejemplo: `bseXXXXXXXXXX`
diff --git a/es/api-doc/oauth.mdx b/es/api-doc/oauth.mdx
index d42e2d23..b8746f40 100644
--- a/es/api-doc/oauth.mdx
+++ b/es/api-doc/oauth.mdx
@@ -33,7 +33,7 @@ Los ámbitos definen qué acciones puede realizar tu aplicación OAuth. Los ámb
| Recurso | Ámbitos |
|----------|--------|
| **Aplicación** | `app\|create`, `app\|read`, `app\|update`, `app\|delete` |
-| **Base** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
+| **Proyecto** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
| **Tabla** | `table\|create`, `table\|delete`, `table\|export`, `table\|import`, `table\|read`, `table\|update`, `table\|trash_read`, `table\|trash_update`, `table\|trash_reset` |
| **Vista** | `view\|create`, `view\|delete`, `view\|read`, `view\|update` |
| **Campo** | `field\|create`, `field\|delete`, `field\|read`, `field\|update` |
@@ -296,14 +296,14 @@ curl https://app.teable.ai/api/table/TABLE_ID/record \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Normalmente, el primer paso después de obtener un token es recuperar todas las Bases accesibles para el usuario actual:
+Normalmente, el primer paso después de obtener un token es recuperar todos los Proyectos accesibles para el usuario actual:
```bash
curl https://app.teable.ai/api/base/access/all \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Este endpoint devuelve todas las Bases a las que el usuario actual tiene permiso de acceso. Puedes usar el `baseId` de la respuesta para las llamadas posteriores a la API.
+Este endpoint devuelve todos los Proyectos a los que el usuario actual tiene permiso de acceso. Puedes usar el `baseId` de la respuesta para las llamadas posteriores a la API.
## Actualizar tokens de acceso
diff --git a/es/api-doc/record/interface.mdx b/es/api-doc/record/interface.mdx
index e84f1de2..1af10482 100644
--- a/es/api-doc/record/interface.mdx
+++ b/es/api-doc/record/interface.mdx
@@ -2,7 +2,7 @@
title: "Interfaz de Campos de Registro"
---
-El Campo de búsqueda no es un tipo de Campo específico. Se puede buscar cualquier tipo de Campo de una Base enlazada. El tipo de un Campo de búsqueda viene determinado por el Campo original de la Base enlazada y tiene la propiedad isLookup. Los Campos de búsqueda no se pueden editar.
+El Campo de búsqueda no es un tipo de Campo específico. Se puede buscar cualquier tipo de Campo de un Proyecto enlazado. El tipo de un Campo de búsqueda viene determinado por el Campo original del Proyecto enlazado y tiene la propiedad isLookup. Los Campos de búsqueda no se pueden editar.
En determinados casos, los valores devueltos por cualquier Campo pueden tener `isMultipleCellValue: true`:
diff --git a/es/api-doc/sql-query.mdx b/es/api-doc/sql-query.mdx
index 91f9d7a9..559bc0d9 100644
--- a/es/api-doc/sql-query.mdx
+++ b/es/api-doc/sql-query.mdx
@@ -11,12 +11,12 @@ Teable permite conectarse a su base de datos PostgreSQL subyacente mediante herr
### Crear una conexión a la base de datos
-1. **Abre una Tabla**: Primero, abre cualquier Tabla de la Base a la que quieras conectarte.
-2. **Entra en la página de diseño**: Haz clic en el icono ⚙️ de la esquina superior derecha para acceder a la página de diseño de la Base.
+1. **Abre una Tabla**: Primero, abre cualquier Tabla del Proyecto al que quieras conectarte.
+2. **Entra en la página de diseño**: Haz clic en el icono ⚙️ de la esquina superior derecha para acceder a la página de diseño del Proyecto.
@@ -50,7 +50,7 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
**Nota:** En PostgreSQL, usa comillas dobles `"` alrededor de los nombres de esquemas y tablas para conservar la distinción entre mayúsculas y minúsculas.
Para escribir esta consulta, necesitarás conocer tres elementos:
-- **Nombre del esquema (BaseId)**: El identificador de la Base que comienza por `bse`
+- **Nombre del esquema (BaseId)**: El identificador del Proyecto que comienza por `bse`
- **Nombre de la Tabla**: El nombre físico de la Tabla en PostgreSQL
- **Nombres de los Campos**: Los nombres reales de las columnas en la base de datos
@@ -58,27 +58,27 @@ Las siguientes secciones explican cómo encontrar cada uno de ellos.
### Encontrar el BaseId (nombre del esquema)
-Cada Base de Teable corresponde a un **esquema** en PostgreSQL. El BaseId es el nombre de esquema utilizado en las consultas SQL.
+Cada Proyecto de Teable corresponde a un **esquema** en PostgreSQL. El BaseId es el nombre de esquema utilizado en las consultas SQL.
**Método 1:** Consulta la URL: la cadena que comienza por `bse` es el BaseId.
-**Método 2:** En la interfaz de diseño de la Base, el nombre de esquema que se muestra es el BaseId.
+**Método 2:** En la interfaz de diseño del Proyecto, el nombre de esquema que se muestra es el BaseId.
### Encontrar los nombres de las Tablas
-Los nombres de las Tablas en la interfaz de Teable no se sincronizan automáticamente con los nombres físicos de las tablas de la base de datos. Consulta la interfaz de diseño de la Base para conocer el nombre real de la tabla en la base de datos.
+Los nombres de las Tablas en la interfaz de Teable no se sincronizan automáticamente con los nombres físicos de las tablas de la base de datos. Consulta la interfaz de diseño del Proyecto para conocer el nombre real de la tabla en la base de datos.
diff --git a/es/api-doc/token.mdx b/es/api-doc/token.mdx
index cc2cf8d0..f8005519 100644
--- a/es/api-doc/token.mdx
+++ b/es/api-doc/token.mdx
@@ -15,7 +15,7 @@ Si estás creando una integración multiusuario para usuarios externos, usa OAut
3. Añade los ámbitos de permisos adecuados a tu token.
-4. Especifica a qué Bases y Espacios puede acceder el token.
+4. Especifica a qué Proyectos y Espacios puede acceder el token.
Una vez creado, tu token solo se mostrará una vez. Te recomendamos copiarlo y guardarlo en una ubicación segura.
diff --git a/es/basic/admin-panel/announcements.mdx b/es/basic/admin-panel/announcements.mdx
index 34aee71e..c12cb193 100644
--- a/es/basic/admin-panel/announcements.mdx
+++ b/es/basic/admin-panel/announcements.mdx
@@ -15,7 +15,7 @@ Haz clic en **Publicar anuncio** y completa el formulario. La vista previa later
| Ajuste | Qué controla |
| --- | --- |
-| **Formato** | Dónde aparece el anuncio: **Franja** en la parte superior de la aplicación, **Notificación emergente** como aviso transitorio, **Ventana modal** como cuadro de diálogo que interrumpe al usuario o **Tarjeta lateral** en las barras laterales de Espacios y Bases. |
+| **Formato** | Dónde aparece el anuncio: **Franja** en la parte superior de la aplicación, **Notificación emergente** como aviso transitorio, **Ventana modal** como cuadro de diálogo que interrumpe al usuario o **Tarjeta lateral** en las barras laterales de Espacios y Proyectos. |
| **Nivel** | El tono que ven los usuarios: **Información**, **Mantenimiento**, **Crítico** o **Resuelto**. |
| Título y **Cuerpo** | El texto del anuncio. |
| **Inicio** / **Fin** | El periodo durante el que se distribuye el anuncio. La hora de finalización debe ser posterior a la de inicio. |
diff --git a/es/basic/admin-panel/audit-log.mdx b/es/basic/admin-panel/audit-log.mdx
index 586d85f5..6bb39d2d 100644
--- a/es/basic/admin-panel/audit-log.mdx
+++ b/es/basic/admin-panel/audit-log.mdx
@@ -11,9 +11,9 @@ El **Registro de auditoría** permite a los administradores consultar la activid
## Información que puedes consultar
-El registro de auditoría abarca las actividades habituales de administración y colaboración, incluidos los Espacios, las Bases, las Tablas, las Vistas, los Campos, los Registros, el uso compartido, las invitaciones, los tokens de acceso y la Matriz de permisos.
+El registro de auditoría abarca las actividades habituales de administración y colaboración, incluidos los Espacios, los Proyectos, las Tablas, las Vistas, los Campos, los Registros, el uso compartido, las invitaciones, los tokens de acceso y la Matriz de permisos.
-Cada entrada del registro muestra la hora de la operación, el operador, el tipo de acción, la Base o el Espacio relacionado y el origen de la solicitud. Abre una entrada del registro para consultar sus detalles.
+Cada entrada del registro muestra la hora de la operación, el operador, el tipo de acción, el Proyecto o el Espacio relacionado y el origen de la solicitud. Abre una entrada del registro para consultar sus detalles.
## Actuar sobre un operador
@@ -30,10 +30,10 @@ Usa los filtros de la parte superior de la página para acotar la lista del regi
- **Seleccionar operador**: Muestra las acciones realizadas por un usuario concreto.
- **Seleccionar Espacio**: Muestra la actividad de un Espacio concreto.
-- **Seleccionar Base**: Muestra la actividad de una Base concreta.
-- **Seleccionar acción**: Filtra por tipo de operación, como Registros, Campos, Vistas, Tablas, Bases, uso compartido, Matriz de permisos, roles de la Matriz de permisos, Espacios, invitaciones, usuarios y tokens de acceso.
+- **Seleccionar Proyecto**: Muestra la actividad de un Proyecto concreto.
+- **Seleccionar acción**: Filtra por tipo de operación, como Registros, Campos, Vistas, Tablas, Proyectos, uso compartido, Matriz de permisos, roles de la Matriz de permisos, Espacios, invitaciones, usuarios y tokens de acceso.
-Si se ha eliminado un usuario, una Base o un Espacio, la entrada permanece en el registro y el recurso aparece marcado como eliminado.
+Si se ha eliminado un usuario, un Proyecto o un Espacio, la entrada permanece en el registro y el recurso aparece marcado como eliminado.
## Explorar listas de registros extensas
diff --git a/es/basic/admin-panel/computed-outbox.mdx b/es/basic/admin-panel/computed-outbox.mdx
index c8f95ee3..7fc43180 100644
--- a/es/basic/admin-panel/computed-outbox.mdx
+++ b/es/basic/admin-panel/computed-outbox.mdx
@@ -30,7 +30,7 @@ De forma predeterminada, cada fila corresponde a una tarea y cambia de estado en
Para acotar la lista:
- Haz clic en los mosaicos de estado situados sobre la Tabla para filtrar por estado: **En espera**, **Activo**, **Retrasado**, **Fallido**, **Completado (conservado)**, entre otros. Puedes seleccionar varios a la vez; al pasar el cursor sobre un mosaico se explica el significado de ese estado.
-- Filtra por **Espacio**, **Base**, **Causa** o **Resultado**; busca una tarea, Base, Espacio o error; o establece un tiempo mínimo de procesamiento para localizar las tareas lentas.
+- Filtra por **Espacio**, **Proyecto**, **Causa** o **Resultado**; busca una tarea, Proyecto, Espacio o error; o establece un tiempo mínimo de procesamiento para localizar las tareas lentas.
- Haz clic en una fila para abrir el **Linaje de cálculos**: marcas de tiempo de la cola, retraso de entrega, tiempo de procesamiento, el motivo completo del fallo con el SQL censurado de una entrega fallida y los detalles de propagación descritos a continuación.
**Completado** no significa que la tarea haya realizado trabajo. El distintivo de resultado indica lo que hizo realmente la entrega: **Procesado** ejecutó la tarea, **Sin operación** no encontró nada pendiente, **Aplazado** la reprogramó para más adelante y **Apartado** significa que su ámbito está en pausa. El filtro **Resultado** acota la lista según ese resultado y muestra cuántas entregas abarca cada uno; por tanto, combinar **Completado (conservado)** con **Procesado** deja únicamente las entregas que realmente ejecutaron la tarea.
@@ -58,7 +58,7 @@ Cuando un valor calculado parezca incorrecto o llegue con retraso, abre **Linaje
El recuento de **Fallidas** y el **Mantenimiento de anomalías** muestran tipos de problemas diferentes, por lo que sus cifras pueden no coincidir.
-**Mantenimiento de anomalías** agrupa las anomalías por problema, una por cada Base, Tabla de origen y error, para facilitar la detección de una única causa raíz. Revisa el motivo del fallo y corrige el problema subyacente antes de recuperar nada. Expande un grupo para consultar los detalles del error y las tareas que abarca; esas filas sirven para examinarlas, pero la recuperación siempre se ejecuta sobre el grupo completo.
+**Mantenimiento de anomalías** agrupa las anomalías por problema, una por cada Proyecto, Tabla de origen y error, para facilitar la detección de una única causa raíz. Revisa el motivo del fallo y corrige el problema subyacente antes de recuperar nada. Expande un grupo para consultar los detalles del error y las tareas que abarca; esas filas sirven para examinarlas, pero la recuperación siempre se ejecuta sobre el grupo completo.
Las acciones disponibles para un grupo dependen de su tipo:
@@ -70,7 +70,7 @@ Las acciones disponibles para un grupo dependen de su tipo:
Después de recuperar un grupo, Teable informa de cuántas tareas ha restaurado, cuántas se han añadido a la cola o ya estaban en ella y cuántas se han entregado o aplazado. A continuación, los procesos de trabajo consumen el grupo con los límites actuales de simultaneidad y división de tareas.
-Un grupo marcado como **Base eliminada** pertenece a una Base que ya no existe. Su recuperación volvería a fallar de inmediato, por lo que **Descartar grupo** es la única acción disponible.
+Un grupo marcado como **Proyecto eliminado** pertenece a un Proyecto que ya no existe. Su recuperación volvería a fallar de inmediato, por lo que **Descartar grupo** es la única acción disponible.
Mover una Tabla a la papelera ya no crea anomalías aquí. Las tareas calculadas que aún hacen referencia a una Tabla enviada a la papelera omiten los pasos que la leen, completan los pasos dirigidos a Tablas activas y finalizan.
@@ -101,8 +101,8 @@ La sección de la cola tiene dos controles de simultaneidad. Cada uno escribe un
| Control | Qué limita |
| --- | --- |
| **Simultaneidad por proceso** | Cuántas tareas calculadas gestiona a la vez cada proceso de trabajo. |
-| **Límites de reclamación por Base** | Cuántas tareas calculadas se ejecutan al mismo tiempo para una Base (**Por Base**) y para una Tabla de origen dentro de ella (**Por Tabla inicial**). Ambos valores son 2 de forma predeterminada y admiten valores del 1 al 16. |
+| **Límites de reclamación por Proyecto** | Cuántas tareas calculadas se ejecutan al mismo tiempo para un Proyecto (**Por Proyecto**) y para una Tabla de origen dentro de ella (**Por Tabla inicial**). Ambos valores son 2 de forma predeterminada y admiten valores del 1 al 16. |
-Aumenta los límites de reclamación cuando el cuello de botella sea una única Base con mucha actividad, y la simultaneidad por proceso cuando haya muchas Bases en cola a la vez.
+Aumenta los límites de reclamación cuando el cuello de botella sea un único Proyecto con mucha actividad, y la simultaneidad por proceso cuando haya muchos Proyectos en cola a la vez.
Una simultaneidad mayor aumenta la carga de la base de datos. Los Espacios que almacenan sus datos en un [inquilino de base de datos](/es/basic/admin-panel/database-tenant) conservan los valores predeterminados del entorno para los límites de reclamación, ya que sus grupos de conexiones están dimensionados para esos valores.
diff --git a/es/basic/admin-panel/database-tenant.mdx b/es/basic/admin-panel/database-tenant.mdx
index 37a35aec..7f605d9a 100644
--- a/es/basic/admin-panel/database-tenant.mdx
+++ b/es/basic/admin-panel/database-tenant.mdx
@@ -26,6 +26,6 @@ Desde **Administración del sistema** → **BYODB**, un administrador de la inst
No. Se refiere al Espacio de Teable cuyos datos se almacenan en esa base de datos.
- No. Cambia el lugar donde Teable almacena y administra los datos de su propio Espacio. Tú proporcionas una base de datos PostgreSQL alojada en otro lugar, y Teable crea y administra sus propios datos en ella. Las Tablas y los Registros existentes en esa base de datos no se conectan con Teable ni se importan automáticamente como Bases.
+ No. Cambia el lugar donde Teable almacena y administra los datos de su propio Espacio. Tú proporcionas una base de datos PostgreSQL alojada en otro lugar, y Teable crea y administra sus propios datos en ella. Las Tablas y los Registros existentes en esa base de datos no se conectan con Teable ni se importan automáticamente como Proyectos.
diff --git a/es/basic/admin-panel/multitenancy.mdx b/es/basic/admin-panel/multitenancy.mdx
index b74869b0..f460a73c 100644
--- a/es/basic/admin-panel/multitenancy.mdx
+++ b/es/basic/admin-panel/multitenancy.mdx
@@ -16,10 +16,10 @@ Una instancia de Teable puede contener varios inquilinos de organización, cada
Instancia de Teable
├── Inquilino de organización A
│ ├── Administradores, miembros y departamentos de la organización
-│ └── Espacios, Bases y ajustes a nivel de organización
+│ └── Espacios, Proyectos y ajustes a nivel de organización
├── Inquilino de organización B
│ ├── Administradores, miembros y departamentos de la organización
-│ └── Espacios, Bases y ajustes a nivel de organización
+│ └── Espacios, Proyectos y ajustes a nivel de organización
└── Inquilino de organización C
```
@@ -107,7 +107,7 @@ Desde el selector de Espacios, un administrador de organización puede abrir el
| --- | --- |
| **Usuarios** | Consultar y administrar los usuarios de la organización actual |
| **Organización** | Crear, mover, cambiar de nombre y eliminar departamentos, y administrar los miembros de los departamentos |
-| **Gestión de Espacios** | Añadir Espacios a la organización o quitarlos, y consultar el número de Espacios y Bases |
+| **Gestión de Espacios** | Añadir Espacios a la organización o quitarlos, y consultar el número de Espacios y Proyectos |
| **Ajustes de autenticación** | Configurar proveedores de autenticación externos para la organización |
| **Ajustes de seguridad** | Verificar dominios de correo electrónico para que los usuarios nuevos de esos dominios se incorporen automáticamente a la organización |
| **Ajustes de la instancia** | Cambiar el nombre de la organización, el acceso automático a Espacios y el ámbito de los departamentos |
diff --git a/es/basic/admin-panel/skills.mdx b/es/basic/admin-panel/skills.mdx
index 56672dc9..64659b71 100644
--- a/es/basic/admin-panel/skills.mdx
+++ b/es/basic/admin-panel/skills.mdx
@@ -9,7 +9,7 @@ Ruta: Administración del sistema → Habilidades
Usa **Habilidades** para publicar habilidades en toda la instancia. Las habilidades añadidas aquí están disponibles en cada Chat de IA, App Builder y conversación con bots, por lo que resultan adecuadas para los métodos de trabajo que tu organización deba compartir de forma predeterminada, como un estilo de redacción corporativo, una convención para informes o un procedimiento de integración compartido.
-Las habilidades que los usuarios añaden en otros lugares permanecen en su propio ámbito. Consulta [Chat de IA](/es/basic/ai/ai-chat) para obtener información sobre las habilidades personales, de Base y de Espacio.
+Las habilidades que los usuarios añaden en otros lugares permanecen en su propio ámbito. Consulta [Chat de IA](/es/basic/ai/ai-chat) para obtener información sobre las habilidades personales, de Proyecto y de Espacio.
## Añadir una habilidad
@@ -34,4 +34,4 @@ La lista agrupa las habilidades por ámbito y muestra la procedencia de cada una
## Cuando se usa dos veces el mismo nombre
-Una habilidad publicada aquí es la opción predeterminada de la instancia. Si una habilidad de Base, Espacio, personal, de aplicación o de bot usa el mismo nombre, se aplica la de ámbito más específico en esa conversación y se ignora la habilidad de la instancia.
+Una habilidad publicada aquí es la opción predeterminada de la instancia. Si una habilidad de Proyecto, Espacio, personal, de aplicación o de bot usa el mismo nombre, se aplica la de ámbito más específico en esa conversación y se ignora la habilidad de la instancia.
diff --git a/es/basic/admin-panel/spaces.mdx b/es/basic/admin-panel/spaces.mdx
index e5056fa2..4dc9b666 100644
--- a/es/basic/admin-panel/spaces.mdx
+++ b/es/basic/admin-panel/spaces.mdx
@@ -8,7 +8,7 @@ description: "Administra todos los Espacios de tu instancia desde Administració
### Información del Espacio
* **Nombre del Espacio**: El nombre visible del Espacio
-* **Bases**: El número total de Bases que contiene el Espacio
+* **Proyectos**: El número total de Proyectos que contiene el Espacio
* **Colaboradores**: El número total de usuarios que tienen acceso al Espacio
* **Fecha de creación**: Cuándo se creó el Espacio
* **Incorporación automática**: Indica si el Espacio permite que los nuevos usuarios se incorporen automáticamente
@@ -26,7 +26,7 @@ description: "Administra todos los Espacios de tu instancia desde Administració
Cuando eliminas un Espacio desde Administración del sistema:
* El Espacio se marca inmediatamente como eliminado
-* Todas las Bases y los datos del Espacio dejan de estar accesibles
+* Todos los Proyectos y los datos del Espacio dejan de estar accesibles
* Los colaboradores pierden el acceso al Espacio
* Esta operación no se puede deshacer
diff --git a/es/basic/admin-panel/table-query-ops.mdx b/es/basic/admin-panel/table-query-ops.mdx
index dd524b72..450af0f0 100644
--- a/es/basic/admin-panel/table-query-ops.mdx
+++ b/es/basic/admin-panel/table-query-ops.mdx
@@ -26,7 +26,7 @@ La página se abre con la lista de Tablas. Los botones de estado de la parte sup
| **Sin configurar** | Tablas sin cobertura de búsqueda. |
| **No disponible** | Tablas que ahora mismo no pueden usar la búsqueda indexada. La fila indica el motivo. |
-El cuadro de búsqueda admite nombres o identificadores de Tabla, Base y Espacio. La ordenación puede ser **Más consultas lentas** o **Nombre de Tabla**. La **Ventana de observación** abarca la última hora o 24 horas, y todas las cifras de observación de la lista siguen esa ventana. Las observaciones se conservan 2 días; lo anterior deja de aparecer en la lista.
+El cuadro de búsqueda admite nombres o identificadores de Tabla, Proyecto y Espacio. La ordenación puede ser **Más consultas lentas** o **Nombre de Tabla**. La **Ventana de observación** abarca la última hora o 24 horas, y todas las cifras de observación de la lista siguen esa ventana. Las observaciones se conservan 2 días; lo anterior deja de aparecer en la lista.
Cada fila muestra las filas y el tamaño estimados de la Tabla, las solicitudes y las consultas lentas de la ventana, el método de búsqueda actual y la cobertura de Campos, el número de índices de filtro/orden, y los recuentos de recomendaciones pendientes y tareas activas. Haz clic en el nombre de una Tabla para abrir su detalle.
diff --git a/es/basic/admin-panel/template-admin.mdx b/es/basic/admin-panel/template-admin.mdx
index 32bc0e2e..cf8943df 100644
--- a/es/basic/admin-panel/template-admin.mdx
+++ b/es/basic/admin-panel/template-admin.mdx
@@ -1,6 +1,6 @@
---
title: "Administración de plantillas"
-description: "Administra las plantillas de flujos de trabajo de tu organización para que los usuarios puedan comenzar rápidamente con Bases preconfiguradas."
+description: "Administra las plantillas de flujos de trabajo de tu organización para que los usuarios puedan comenzar rápidamente con Proyectos preconfiguradas."
---
Disponible para el plan Business autoalojado y los planes superiores
@@ -16,12 +16,12 @@ En la interfaz de Administración de plantillas puedes crear y configurar las pl
* **Descripción en Markdown**: Una descripción detallada que admite formato de texto enriquecido
* **Categoría**: Agrupa las plantillas por escenarios empresariales (p. ej., RR. HH., Ventas o Ingeniería)
* **Sistema**: Indica si la plantilla es una plantilla oficial del sistema
-* **Origen**: La Base original utilizada para crear esta plantilla
+* **Origen**: El Proyecto original utilizada para crear esta plantilla
#### Operaciones de plantilla
* **Nueva plantilla**: Crea una configuración de plantilla
-* **Publicar instantánea**: Captura el estado actual de la Base de origen. Debes publicar una instantánea antes de poder incluir la plantilla en el centro de plantillas.
+* **Publicar instantánea**: Captura el estado actual del Proyecto de origen. Debes publicar una instantánea antes de poder incluir la plantilla en el centro de plantillas.
* **Estado (Publicar)**: Activa o desactiva la inclusión de la plantilla en el centro de plantillas. Requiere un nombre, una descripción y una instantánea.
* **Fijar**: Fija las plantillas importantes en la parte superior de la lista
* **Eliminar**: Elimina la configuración de la plantilla
@@ -31,7 +31,7 @@ En la interfaz de Administración de plantillas puedes crear y configurar las pl
Los usuarios de la versión autoalojada pueden importar plantillas desde Teable Cloud oficial:
1. **Descargar**: Obtén el archivo `.tea` del [Centro oficial de plantillas](https://teable.ai/templates)
-2. **Importar**: Importa el archivo `.tea` como una Base nueva en tu Espacio
+2. **Importar**: Importa el archivo `.tea` como un Proyecto nueva en tu Espacio
3. **Crear plantilla**: Ve a Administración de plantillas > Nueva plantilla
-4. **Seleccionar origen**: Elige la Base importada como origen
+4. **Seleccionar origen**: Elige el Proyecto importada como origen
5. **Publicar**: Configura los detalles, publica la instantánea y habilita el estado
diff --git a/es/basic/ai/ai-chat.mdx b/es/basic/ai/ai-chat.mdx
index d35b49e7..0e11e8d9 100644
--- a/es/basic/ai/ai-chat.mdx
+++ b/es/basic/ai/ai-chat.mdx
@@ -35,7 +35,7 @@ Cuando pegas un bloque largo de texto sin formato, Teable lo convierte en un arc
- **Mis secretos**: Abre **+** → **Más** → **Mis secretos** para guardar claves de API u otras credenciales en **Ajustes** → **Integraciones**. Esos valores son tuyos, el Chat de IA puede leerlos como variables de entorno durante la ejecución y puedes concederlos a aplicaciones y automatizaciones concretas. Consulta [Credenciales e integraciones](/es/basic/credential).
- **Solicitudes de credenciales**: Cuando la IA necesita una cuenta externa o un secreto, fija en la conversación una tarjeta de solicitud. Elige **Conectar mi cuenta** para iniciar un flujo de OAuth o concede una credencial que ya tengas. Con **Omitir** no la facilitas; la IA continúa con las partes que puede completar sin ella.
- **Scraper**: Abre el menú **+**, elige **Scraper** y selecciona una plataforma y un tipo de dato. Hay dos clases de entradas: unas extraen a partir de un enlace que pegas, como **perfil personal** en LinkedIn o **reseñas del producto** en Amazon; otras buscan por palabra clave, hashtag o nombre, como **búsqueda de vídeos** en TikTok o **publicaciones de un subreddit** en Reddit. Teable rellena la instrucción correspondiente en la entrada del chat y deja al final la parte que debes completar. **Cualquier página web** acepta directamente un enlace pegado.
-- **Habilidades**: Abre el menú **+** y elige **Habilidades** para importar, habilitar, deshabilitar o probar habilidades en el chat actual. Cuando importes una, elige quién puede usarla: **Personal** la reserva para ti, **Base** la ofrece a los colaboradores de esta Base y **Espacio** la ofrece a todos los usuarios de este Espacio. Escribe `/` en el cuadro de entrada para elegir una habilidad habilitada. Para conectar o migrar un sistema externo, consulta [Conecta y migra todo](/es/basic/ai/connect-everything).
+- **Habilidades**: Abre el menú **+** y elige **Habilidades** para importar, habilitar, deshabilitar o probar habilidades en el chat actual. Cuando importes una, elige quién puede usarla: **Personal** la reserva para ti, **Proyecto** la ofrece a los colaboradores de este Proyecto y **Espacio** la ofrece a todos los usuarios de este Espacio. Escribe `/` en el cuadro de entrada para elegir una habilidad habilitada. Para conectar o migrar un sistema externo, consulta [Conecta y migra todo](/es/basic/ai/connect-everything).
- **Uso del contexto**: El anillo situado junto al cuadro de entrada muestra qué proporción de la ventana de contexto del modelo está usando la conversación. Haz clic en él para consultar el porcentaje y el número de tokens. Cuando se llena el contexto, Teable compacta la conversación; inicia un chat nuevo si quieres partir de un contexto limpio.
- **Administrar archivos**: Abre **+** → **Más** → **Administrar archivos** para consultar los archivos del entorno aislado del chat actual. Puedes obtener una vista previa de los archivos compatibles, descargarlos o eliminar los archivos y carpetas que ya no necesites. Debe existir una conversación para poder administrar sus archivos.
- **Cola de mensajes**: Enviar otro mensaje mientras la IA está trabajando no la interrumpe. El mensaje espera en una cola sobre el cuadro de entrada y se envía cuando termina la ejecución actual. Los elementos en cola conservan las mismas etiquetas de Tabla, Vista, archivo adjunto y selección que la entrada del chat; **Eliminar** descarta uno, **...** → **Editar mensaje** lo devuelve al cuadro de entrada y los elementos que solo contienen texto también ofrecen **Redirigir** para entregar el texto al turno en ejecución en lugar de esperar.
@@ -129,9 +129,9 @@ Cuando una respuesta incluya varios archivos a la vez, usa **Descargar todo** de
### Memoria
-La memoria almacena la información que pides explícitamente a Cuppy que recuerde. Su ámbito se define por usuario y Base: cada usuario de cada Base tiene un contexto de memoria independiente, y la memoria guardada en otra Base no aparece automáticamente en la actual.
+La memoria almacena la información que pides explícitamente a Cuppy que recuerde. Su ámbito se define por usuario y Proyecto: cada usuario de cada Proyecto tiene un contexto de memoria independiente, y la memoria guardada en otro Proyecto no aparece automáticamente en el Proyecto actual.
-- Guardar memoria en la Base actual
+- Guardar memoria en el Proyecto actual
Indica en la conversación lo que Cuppy debe recordar:
@@ -139,12 +139,12 @@ Indica en la conversación lo que Cuppy debe recordar:
Recuerda xxx.
```
-- Reutilizar la memoria de otra Base
+- Reutilizar la memoria de otro Proyecto
-Pide a Cuppy que lea otra Base y guarde las partes pertinentes en la Base actual:
+Pide a Cuppy que lea otro Proyecto y guarde las partes pertinentes en el Proyecto actual:
```text
-Cuppy, lee la memoria de la Base con ID bsexxxxxxxxxxxx y guarda la memoria pertinente en esta Base actual.
+Cuppy, lee la memoria del Proyecto con ID bsexxxxxxxxxxxx y guarda la memoria pertinente en este Proyecto actual.
```
### Gestionar tareas largas
@@ -228,8 +228,8 @@ Abre **+** → **Más** → **Administrar artefactos** para explorar todo lo que
Escribe `@` en el cuadro de entrada y selecciona el nodo que quieras que consulte el Chat de IA. Para las selecciones de la Vista de cuadrícula, también puedes seleccionar filas, columnas, una sola celda o un rango de celdas y usar **Añadir al Chat** en el menú contextual.
-
- Sí. La IA no está limitada a la Base a la que pertenece el chat; puede buscar y trabajar en las demás Bases a las que tienes acceso. Indica la Base en tu solicitud, por ejemplo: "compara esta Tabla con la Tabla de pedidos de la Base Ventas". `@` solo enumera los nodos de la Base actual, y cualquier acción para la que no indiques otro destino se ejecutará en la propia Base del chat.
+
+ Sí. La IA no está limitada al Proyecto al que pertenece el chat; puede buscar y trabajar en los demás Proyectos a los que tienes acceso. Indica el Proyecto en tu solicitud, por ejemplo: "compara esta Tabla con la Tabla de pedidos del Proyecto Ventas". `@` solo enumera los nodos del Proyecto actual, y cualquier acción para la que no indiques otro destino se ejecutará en el propio Proyecto del chat.
@@ -239,8 +239,8 @@ Abre **+** → **Más** → **Administrar artefactos** para explorar todo lo que
De forma predeterminada, no. Solo tú puedes abrir tus propios artefactos. Activa **Habilitar uso compartido** en el visor y envía el enlace; elige **Miembros del Espacio** si el artefacto debe permanecer dentro del Espacio.
-
- No. El ámbito de la memoria se define por usuario y Base. Si quieres reutilizar la memoria de otra Base, pide a Cuppy que lea la memoria de esa Base y guarde las partes pertinentes en la actual.
+
+ No. El ámbito de la memoria se define por usuario y Proyecto. Si quieres reutilizar la memoria de otro Proyecto, pide a Cuppy que lea la memoria de ese Proyecto y guarde las partes pertinentes en el Proyecto actual.
@@ -268,11 +268,11 @@ Abre **+** → **Más** → **Administrar artefactos** para explorar todo lo que
- Abre el menú **+** y elige **Habilidades** para importar o administrar habilidades, o escribe `/` en el cuadro de entrada para elegir una habilidad habilitada. Al importarla, elige quién puede usarla: personal para tus propios chats, Base cuando la necesiten los colaboradores de la misma Base y Espacio cuando la necesiten todos los usuarios de ese Espacio. Los usuarios que pueden administrar la Base pueden añadir habilidades de Base, y los propietarios y creadores del Espacio pueden añadir habilidades de Espacio. Si el Chat de IA presenta un archivo `.skill`, usa **Instalar** en la tarjeta del archivo para añadirlo.
+ Abre el menú **+** y elige **Habilidades** para importar o administrar habilidades, o escribe `/` en el cuadro de entrada para elegir una habilidad habilitada. Al importarla, elige quién puede usarla: personal para tus propios chats, Proyecto cuando la necesiten los colaboradores del mismo Proyecto y Espacio cuando la necesiten todos los usuarios de ese Espacio. Los usuarios que pueden administrar el Proyecto pueden añadir habilidades de Proyecto, y los propietarios y creadores del Espacio pueden añadir habilidades de Espacio. Si el Chat de IA presenta un archivo `.skill`, usa **Instalar** en la tarjeta del archivo para añadirlo.
- Solo se aplica una versión, y la versión compartida con el equipo tiene prioridad sobre una copia personal: las habilidades de Base tienen prioridad sobre las de Espacio, y las de Espacio sobre las personales. En una conversación de una aplicación o bot, la habilidad añadida para esa aplicación o bot tiene prioridad. Para trasladar a todos a una versión nueva, actualiza la copia de la Base o el Espacio.
+ Solo se aplica una versión, y la versión compartida con el equipo tiene prioridad sobre una copia personal: las habilidades de Proyecto tienen prioridad sobre las de Espacio, y las de Espacio sobre las personales. En una conversación de una aplicación o bot, la habilidad añadida para esa aplicación o bot tiene prioridad. Para trasladar a todos a una versión nueva, actualiza la copia del Proyecto o el Espacio.
diff --git a/es/basic/ai/app-builder.mdx b/es/basic/ai/app-builder.mdx
index cb5454d2..9c9cfae6 100644
--- a/es/basic/ai/app-builder.mdx
+++ b/es/basic/ai/app-builder.mdx
@@ -5,21 +5,21 @@ description: Transforma tus datos en aplicaciones web personalizadas mediante IA
Disponible en todos los planes de Cloud; la versión autoalojada requiere el plan Business o uno superior.
-App Builder de Teable permite convertir tus bases de datos en aplicaciones web personalizadas y plenamente funcionales sin escribir código. Al combinar la potencia de tu estructura de datos con un diseño impulsado por IA, puedes lanzar herramientas internas, portales para clientes y paneles de datos en cuestión de minutos.
+App Builder de Teable permite convertir tus proyectos en aplicaciones web personalizadas y plenamente funcionales sin escribir código. Al combinar la potencia de tu estructura de datos con un diseño impulsado por IA, puedes lanzar herramientas internas, portales para clientes y paneles de datos en cuestión de minutos.
## Descripción general
App Builder sigue un flujo de trabajo de «Instrucción a aplicación». Tú describes lo que quieres y la IA crea la estructura, las páginas y la lógica de la aplicación. Después puedes ajustar cada detalle mediante el editor visual o el código.
-Usa App Builder para crear interfaces personalizadas y aplicaciones independientes. Para realizar análisis interactivos de datos y consultas puntuales dentro de la base de datos, usa el [Chat de IA](/es/basic/ai/ai-chat).
+Usa App Builder para crear interfaces personalizadas y aplicaciones independientes. Para realizar análisis interactivos de datos y consultas puntuales dentro del Proyecto, usa el [Chat de IA](/es/basic/ai/ai-chat).
## Crear una aplicación
Hay dos formas principales de crear una aplicación:
-1. **Desde una Base**: En cualquier Base, haz clic en «Crear aplicación» para generar una aplicación enlazada a tus datos actuales.
+1. **Desde un Proyecto**: En cualquier Proyecto, haz clic en «Crear aplicación» para generar una aplicación enlazada a tus datos actuales.
2. **Desde el Chat**: Abre el Chat de IA y di «Crea una aplicación de CRM para esta Tabla de clientes».
## Interfaz del editor de aplicaciones
@@ -37,7 +37,7 @@ El centro de control de tu aplicación.
- **Edición mediante lenguaje natural**: Describe cambios como *«Haz que el encabezado sea azul»* o *«Añade un formulario para enviar Registros nuevos»*.
- **Enrutamiento automático**: La IA entiende a qué componente o página te refieres y lo modifica directamente.
- **Integraciones**: Cuando la tarea de la aplicación necesita acceso a una cuenta externa, App Builder puede mostrar una tarjeta como **Conectar Slack** en el panel de chat. Haz clic en **Conectar** para autorizar mediante OAuth. Haz clic en **Omitir** para cancelar la autorización; la IA continuará con las partes que pueda completar sin esa conexión.
-- **Habilidades**: Abre el menú **+** y elige **Habilidades** para administrar las habilidades de esta conversación de la aplicación. Las habilidades añadidas aquí solo están disponibles para la aplicación actual; también pueden usarse las que se comparten con la Base y el Espacio de la aplicación. Escribe `/` en el cuadro de entrada para elegir una habilidad habilitada.
+- **Habilidades**: Abre el menú **+** y elige **Habilidades** para administrar las habilidades de esta conversación de la aplicación. Las habilidades añadidas aquí solo están disponibles para la aplicación actual; también pueden usarse las que se comparten con el Proyecto y el Espacio de la aplicación. Escribe `/` en el cuadro de entrada para elegir una habilidad habilitada.
- **Administrar archivos**: Abre **+** → **Más** → **Administrar archivos** para consultar los archivos del entorno aislado de la aplicación. Úsalo para obtener una vista previa de los archivos compatibles, descargar archivos generados o eliminar los archivos y carpetas que ya no necesites.
- **Borrar conversación**: Si la conversación actual se ha desviado, haz clic en **Borrar chat** en la esquina inferior derecha del panel para iniciar una sesión nueva. Esto borra el historial del chat de la conversación actual, pero no elimina la aplicación. La primera vez se muestra una confirmación, y puedes elegir que no vuelva a aparecer.
diff --git a/es/basic/ai/connect-everything/migrate-airtable.mdx b/es/basic/ai/connect-everything/migrate-airtable.mdx
index facde4f5..8660d7a2 100644
--- a/es/basic/ai/connect-everything/migrate-airtable.mdx
+++ b/es/basic/ai/connect-everything/migrate-airtable.mdx
@@ -13,7 +13,7 @@ En [**Chat de IA de Teable**](/es/basic/ai/ai-chat), escribe `/` y selecciona la
## Iniciar la migración
1. Crea un [token de acceso personal de Airtable](https://airtable.com/create/tokens) con acceso a las Bases que quieres migrar.
-2. Abre la Base de Teable de destino e inicia Chat de IA.
+2. Abre el Proyecto de Teable de destino e inicia Chat de IA.
3. Escribe `/`, selecciona **Connect Everything** y proporciona el token.
4. Pide a la IA de Teable que migre la Base de Airtable y, después, revisa el resultado.
diff --git a/es/basic/ai/connect-everything/migrate-baserow.mdx b/es/basic/ai/connect-everything/migrate-baserow.mdx
index 6df62ff3..d094bf71 100644
--- a/es/basic/ai/connect-everything/migrate-baserow.mdx
+++ b/es/basic/ai/connect-everything/migrate-baserow.mdx
@@ -13,7 +13,7 @@ Usa **Connect Everything** en [Chat de IA de Teable](/es/basic/ai/ai-chat) para
## Iniciar la migración
1. Copia la URL de la instancia de Baserow y crea un [token de base de datos de Baserow](https://baserow.io/user-docs/personal-api-tokens) con acceso de lectura a las tablas de origen.
-2. Abre la Base de Teable de destino e inicia Chat de IA.
+2. Abre el Proyecto de Teable de destino e inicia Chat de IA.
3. Escribe `/`, selecciona **Connect Everything** e introduce la URL de la instancia y el token de base de datos.
4. Pide a la IA de Teable que migre la base de datos de Baserow y, después, revisa el resultado.
diff --git a/es/basic/ai/connect-everything/migrate-clickup.mdx b/es/basic/ai/connect-everything/migrate-clickup.mdx
index d0161a04..0fbd8067 100644
--- a/es/basic/ai/connect-everything/migrate-clickup.mdx
+++ b/es/basic/ai/connect-everything/migrate-clickup.mdx
@@ -16,7 +16,7 @@ En el [**Chat de IA de Teable**](/es/basic/ai/ai-chat), escribe `/` y selecciona
## Iniciar la migración
1. En ClickUp, abre **Ajustes → Aplicaciones** y copia tu token de API personal. Consulta la [guía de autenticación](https://developer.clickup.com/docs/authentication) de ClickUp.
-2. Abre la Base de Teable de destino e inicia el Chat de IA.
+2. Abre el Proyecto de Teable de destino e inicia el Chat de IA.
3. Escribe `/`, selecciona **Connect Everything** y proporciona el token de API personal.
4. Pide a la IA de Teable que migre los Espacios de trabajo de ClickUp accesibles y cree las Vistas, los paneles y las automatizaciones de proyectos que necesite tu equipo.
diff --git a/es/basic/ai/connect-everything/migrate-jira.mdx b/es/basic/ai/connect-everything/migrate-jira.mdx
index cc5dfbf0..e3931c51 100644
--- a/es/basic/ai/connect-everything/migrate-jira.mdx
+++ b/es/basic/ai/connect-everything/migrate-jira.mdx
@@ -16,7 +16,7 @@ En el [**Chat de IA de Teable**](/es/basic/ai/ai-chat), escribe `/` y selecciona
## Iniciar la migración
1. Crea un [token de API de Atlassian](https://id.atlassian.com/manage-profile/security/api-tokens) para una cuenta que tenga acceso a los proyectos de Jira que quieras migrar. Consulta la documentación de Atlassian sobre [autenticación básica para API REST](https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/).
-2. Abre la Base de Teable de destino e inicia el Chat de IA.
+2. Abre el Proyecto de Teable de destino e inicia el Chat de IA.
3. Escribe `/`, selecciona **Connect Everything** y proporciona la URL del sitio de Jira Cloud, el correo electrónico de la cuenta y el token de API.
4. Pide a la IA de Teable que migre los proyectos de Jira accesibles y cree las Vistas, los paneles y las automatizaciones de proyectos que necesite tu equipo.
diff --git a/es/basic/ai/connect-everything/migrate-monday.mdx b/es/basic/ai/connect-everything/migrate-monday.mdx
index c829c248..a4449bc3 100644
--- a/es/basic/ai/connect-everything/migrate-monday.mdx
+++ b/es/basic/ai/connect-everything/migrate-monday.mdx
@@ -16,7 +16,7 @@ En el [**Chat de IA de Teable**](/es/basic/ai/ai-chat), escribe `/` y selecciona
## Iniciar la migración
1. En monday.com, abre el menú de tu perfil, elige **Desarrolladores** y copia tu token de API personal. Consulta la [guía de autenticación de la API](https://developer.monday.com/api-reference/docs/authentication) de monday.com.
-2. Abre la Base de Teable de destino e inicia el Chat de IA.
+2. Abre el Proyecto de Teable de destino e inicia el Chat de IA.
3. Escribe `/`, selecciona **Connect Everything** y proporciona el token de API personal.
4. Pide a la IA de Teable que migre los Espacios de trabajo de monday.com accesibles y cree las Vistas, los paneles y las automatizaciones de proyectos que necesite tu equipo.
diff --git a/es/basic/ai/connect-everything/migrate-nocodb.mdx b/es/basic/ai/connect-everything/migrate-nocodb.mdx
index f5cccff5..2df2db2c 100644
--- a/es/basic/ai/connect-everything/migrate-nocodb.mdx
+++ b/es/basic/ai/connect-everything/migrate-nocodb.mdx
@@ -13,7 +13,7 @@ Usa **Connect Everything** en [Chat de IA de Teable](/es/basic/ai/ai-chat) para
## Iniciar la migración
1. Copia la URL de la instancia de NocoDB y crea un [token de API de NocoDB](https://nocodb.com/docs/product-docs/account-settings/api-tokens) con acceso a la Base de origen.
-2. Abre la Base de Teable de destino e inicia Chat de IA.
+2. Abre el Proyecto de Teable de destino e inicia Chat de IA.
3. Escribe `/`, selecciona **Connect Everything** e introduce la URL de la instancia y el token de API.
4. Pide a la IA de Teable que migre la Base de NocoDB y, después, revisa el resultado.
diff --git a/es/basic/ai/connect-everything/migrate-smartsheet.mdx b/es/basic/ai/connect-everything/migrate-smartsheet.mdx
index 9ba25b7f..c3c88dc5 100644
--- a/es/basic/ai/connect-everything/migrate-smartsheet.mdx
+++ b/es/basic/ai/connect-everything/migrate-smartsheet.mdx
@@ -16,7 +16,7 @@ En el [**Chat de IA de Teable**](/es/basic/ai/ai-chat), escribe `/` y selecciona
## Iniciar la migración
1. En Smartsheet, abre **Cuenta → Ajustes personales → Acceso a la API** y genera un token de acceso. Consulta la [guía de introducción a la API](https://developers.smartsheet.com/api/smartsheet/guides/getting-started) de Smartsheet.
-2. Abre la Base de Teable de destino e inicia el Chat de IA.
+2. Abre el Proyecto de Teable de destino e inicia el Chat de IA.
3. Escribe `/`, selecciona **Connect Everything** y proporciona el token de acceso y el entorno de la cuenta: estándar, Regiones de Europa o Gobierno.
4. Pide a la IA de Teable que migre los Espacios de trabajo de Smartsheet accesibles y cree las Vistas, los paneles y las automatizaciones de proyectos que necesite tu equipo.
diff --git a/es/basic/ai/connect-everything/migrate-smartsuite.mdx b/es/basic/ai/connect-everything/migrate-smartsuite.mdx
index ecf8b287..9af3ac1c 100644
--- a/es/basic/ai/connect-everything/migrate-smartsuite.mdx
+++ b/es/basic/ai/connect-everything/migrate-smartsuite.mdx
@@ -13,7 +13,7 @@ Usa **Connect Everything** en [Chat de IA de Teable](/es/basic/ai/ai-chat) para
## Iniciar la migración
1. Obtén tu [clave de API e ID del espacio de trabajo de SmartSuite](https://help.smartsuite.com/en/articles/6096587-retrieving-your-api-key-and-workspace-id).
-2. Abre la Base de Teable de destino e inicia Chat de IA.
+2. Abre el Proyecto de Teable de destino e inicia Chat de IA.
3. Escribe `/`, selecciona **Connect Everything** e introduce la clave de API y el ID del espacio de trabajo.
4. Pide a la IA de Teable que migre la solución de SmartSuite y, después, revisa el resultado.
diff --git a/es/basic/ai/overview.mdx b/es/basic/ai/overview.mdx
index fe33971c..23886d32 100644
--- a/es/basic/ai/overview.mdx
+++ b/es/basic/ai/overview.mdx
@@ -45,6 +45,6 @@ Teable integra potentes funciones de IA en toda la plataforma para ayudarte a tr
1. **Habilitar la IA** (solo en la versión autoalojada) - Teable Cloud incluye IA integrada lista para usar. Los usuarios de la versión autoalojada deben completar primero los [Ajustes de IA](/es/basic/admin-panel/ai-setting). Si quieres conectar tus propios modelos, continúa con [Modelo de IA personalizado](/es/basic/ai/custom-model).
2. **Usar el Chat de IA** - Haz preguntas sobre tus datos o genera gráficos
-3. **Crear aplicaciones** - Convierte tu Base en una aplicación web con una instrucción sencilla
+3. **Crear aplicaciones** - Convierte tu Proyecto en una aplicación web con una instrucción sencilla
4. **Crear Campos de IA** - Añade Campos con IA para procesar tus datos automáticamente
5. **Crear automatizaciones** - Usa las acciones Generar con IA y Ejecutar código en tus flujos de trabajo
diff --git a/es/basic/ai/teable-skill.mdx b/es/basic/ai/teable-skill.mdx
index dfbadd4f..b36ebfda 100644
--- a/es/basic/ai/teable-skill.mdx
+++ b/es/basic/ai/teable-skill.mdx
@@ -24,7 +24,7 @@ Una vez instalada la skill, prueba estos prompts.
```text Instrucciones iniciales sencillas wrap
-Crea una Tabla CRM sencilla en {pega la URL de la Base}.
+Crea una Tabla CRM sencilla en {pega la URL del Proyecto}.
```
```text Archivos locales → Teable wrap
diff --git a/es/basic/authority-matrix.mdx b/es/basic/authority-matrix.mdx
index e7588f99..12de4fd5 100644
--- a/es/basic/authority-matrix.mdx
+++ b/es/basic/authority-matrix.mdx
@@ -1,12 +1,12 @@
---
title: "Descripción general"
-description: "Define ámbitos de acceso para distintos equipos de una misma Base, de modo que los miembros solo puedan ver, editar o exportar los datos que necesitan."
+description: "Define ámbitos de acceso para distintos equipos de un mismo Proyecto, de modo que los miembros solo puedan ver, editar o exportar los datos que necesitan."
---
{/* mintlify-resync: 2026-05-28 */}
Disponible para el plan Business y los planes superiores
-Cuando los equipos de ventas, finanzas, operaciones y dirección comparten una misma Base,
+Cuando los equipos de ventas, finanzas, operaciones y dirección comparten un mismo Proyecto,
los permisos determinan quién puede entrar en ella, qué datos puede ver o editar
y si puede importar o exportar datos. La Matriz de Autoridad ayuda a los equipos
a mantener los datos en un único lugar y, al mismo tiempo, separar el acceso según las responsabilidades.
@@ -24,7 +24,7 @@ consultar los Campos de facturación y dirección puede ver el conjunto de datos
| Acceso por departamento | Ventas puede mantener los Registros de clientes, mientras que finanzas solo ve los Campos de facturación. |
| Registros por responsable | Los representantes de ventas solo pueden ver y actualizar los Registros que tienen asignados. |
| Entrada de datos restringida | Los miembros pueden crear Registros nuevos sin editar ni eliminar los existentes. |
-| Campos confidenciales en una Base compartida | Los miembros pueden ver los Registros de pedidos sin consultar los Campos de pagos o costes. |
+| Campos confidenciales en un Proyecto compartido | Los miembros pueden ver los Registros de pedidos sin consultar los Campos de pagos o costes. |
| Aplicaciones y flujos de trabajo controlados | Los roles pueden abrir determinadas aplicaciones o flujos de trabajo, mientras que los nodos no autorizados permanecen ocultos. |
## Cómo funcionan los permisos
@@ -45,7 +45,7 @@ La lista de roles incluye una sección `Administradores` y otra de `Roles person
Usa `Añadir rol` para crear un rol personalizado. En la página de detalles del rol, asigna
colaboradores, escribe una descripción breve y configura el acceso de cada nodo de
-la Base:
+el Proyecto:
Para obtener información sobre los niveles básicos de permisos de Espacios y Bases, consulta [Permisos de colaboración](/es/basic/space/space-permission).
+Para obtener información sobre los niveles básicos de permisos de Espacios y Proyectos, consulta [Permisos de colaboración](/es/basic/space/space-permission).
diff --git a/es/basic/authority-matrix/authority-matrix-practical-guide.mdx b/es/basic/authority-matrix/authority-matrix-practical-guide.mdx
index 8f476044..aaea15d3 100644
--- a/es/basic/authority-matrix/authority-matrix-practical-guide.mdx
+++ b/es/basic/authority-matrix/authority-matrix-practical-guide.mdx
@@ -4,9 +4,9 @@ description: "Configura los roles de la Matriz de Autoridad para un equipo de ve
---
{/* mintlify-resync: 2026-05-28 */}
-Esta guía utiliza una Base de ventas con tres Tablas: `Clientes`, `Pedidos de ventas`
+Esta guía utiliza un Proyecto de ventas con tres Tablas: `Clientes`, `Pedidos de ventas`
y `Productos`. El objetivo es permitir que cada rol trabaje con los datos que necesita
-sin exponer toda la Base.
+sin exponer todo el Proyecto.
| Rol | Objetivo de acceso |
| --- | --- |
@@ -26,7 +26,7 @@ sin exponer toda la Base.
- Abre la página de la Matriz de Autoridad en la Base y activa el interruptor principal. El
+ Abre la página de la Matriz de Autoridad en el Proyecto y activa el interruptor principal. El
usuario que la habilita se añade como administrador.
diff --git a/es/basic/automation.mdx b/es/basic/automation.mdx
index 802543ea..a6733c0c 100644
--- a/es/basic/automation.mdx
+++ b/es/basic/automation.mdx
@@ -65,8 +65,8 @@ Los intentos de repetición se marcan como reintentos y enlazan con la ejecució
| Elemento | Límite |
|---|---|
-| Frecuencia de envío de correos electrónicos | 5 por segundo y por Base |
-| Frecuencia de recepción de webhooks | 50 por segundo y por Base; 2 por segundo y por flujo de trabajo |
+| Frecuencia de envío de correos electrónicos | 5 por segundo y por Proyecto |
+| Frecuencia de recepción de webhooks | 50 por segundo y por Proyecto; 2 por segundo y por flujo de trabajo |
| Tamaño de la carga útil de los webhooks | 4 MB |
| Cuota de ejecuciones y conservación del historial | Varía según el plan |
@@ -82,7 +82,7 @@ Los intentos de repetición se marcan como reintentos y enlazan con la ejecució
Teable Cloud también puede enviar notificaciones críticas por un uso inusual, como un gran aumento diario o un pico repentino en un periodo breve. El sistema utiliza patrones recientes de ejecuciones diarias y por hora, y los umbrales exactos pueden cambiar.
- La notificación abre **Ajustes del Espacio** → **Facturación**. Cuando está disponible, muestra qué flujo de trabajo y Base aportaron más ejecuciones. Los recordatorios de cuota se basan en las ejecuciones que cuentan para el límite del plan; las comprobaciones de uso inusual también pueden tener en cuenta las ejecuciones recientes con estado **correcto**, **fallido** o **pendiente**.
+ La notificación abre **Ajustes del Espacio** → **Facturación**. Cuando está disponible, muestra qué flujo de trabajo y Proyecto aportaron más ejecuciones. Los recordatorios de cuota se basan en las ejecuciones que cuentan para el límite del plan; las comprobaciones de uso inusual también pueden tener en cuenta las ejecuciones recientes con estado **correcto**, **fallido** o **pendiente**.
Si el uso es el esperado, considera comprar una cuota de automatización adicional o cambiar de plan. Si no lo es, revisa el flujo de trabajo principal y ajusta o pausa la automatización correspondiente.
diff --git a/es/basic/automation/actions/communication/send-email-overview.mdx b/es/basic/automation/actions/communication/send-email-overview.mdx
index 05bcb959..bd7bc978 100644
--- a/es/basic/automation/actions/communication/send-email-overview.mdx
+++ b/es/basic/automation/actions/communication/send-email-overview.mdx
@@ -37,7 +37,7 @@ De forma predeterminada, los correos electrónicos se envían desde el servicio
\* Se requiere al menos uno de los Campos **Para** o **CCO**.
-**Límite de velocidad:** 5 correos electrónicos por segundo y por Base.
+**Límite de velocidad:** 5 correos electrónicos por segundo y por Proyecto.
## Cómo configurarla
diff --git a/es/basic/automation/actions/records/create-record.mdx b/es/basic/automation/actions/records/create-record.mdx
index dee4f484..682790f6 100644
--- a/es/basic/automation/actions/records/create-record.mdx
+++ b/es/basic/automation/actions/records/create-record.mdx
@@ -30,7 +30,7 @@ Crea un Registro nuevo en una Tabla determinada. Puedes asignar datos de pasos a
## Cómo configurarla
1. Añade una acción **Crear Registro** a tu flujo de trabajo.
-2. Elige la **Tabla** en la que quieres crear el Registro. De forma predeterminada, es una Tabla de la misma Base, pero puedes utilizar [Acceso entre Bases](/es/basic/automation/actions/records/cross-base) para seleccionar una Tabla de otra Base.
+2. Elige la **Tabla** en la que quieres crear el Registro. De forma predeterminada, es una Tabla del mismo Proyecto, pero puedes utilizar [Acceso entre Proyectos](/es/basic/automation/actions/records/cross-base) para seleccionar una Tabla de otro Proyecto.
3. El área de asignación de Campos muestra todos los Campos de la Tabla de destino. Para cada Campo que quieras rellenar:
- **Valor estático:** escribe un valor directamente en el Campo (p. ej., escribe «Nuevo» en un Campo Estado).
- **Valor dinámico:** haz clic en el botón **+** situado junto al Campo para insertar una variable de un paso anterior. Por ejemplo, inserta el Campo «Nombre» del desencadenador para copiar el nombre del Registro que activó el flujo.
@@ -68,11 +68,11 @@ Esto resulta útil cuando necesitas encadenar acciones. Por ejemplo: crea un Reg
- Puedes crear Registros en lote combinando esta acción con [Bucle (lote)](../logic/loop-run). Por ejemplo, obtén 50 Registros de una Tabla y crea los 50 Registros correspondientes en otra.
- Los Campos que no asignes utilizarán los valores predeterminados de la Tabla (si existen) o permanecerán vacíos.
- Los Campos de Registros enlazados requieren ID de Registro, no valores para mostrar. Si necesitas enlazar un Registro, asegúrate de proporcionar su ID y no su nombre.
-- Utiliza [Acceso entre Bases](/es/basic/automation/actions/records/cross-base) cuando la Tabla de destino esté en una Base distinta de la Automatización.
+- Utiliza [Acceso entre Proyectos](/es/basic/automation/actions/records/cross-base) cuando la Tabla de destino esté en un Proyecto distinto del de la Automatización.
## Contenido relacionado
- [Actualizar Registro](/es/basic/automation/actions/records/update-record) — modifica Registros existentes en vez de crear otros
- [Obtener Registros](/es/basic/automation/actions/records/get-records) — recupera Registros para utilizarlos como entrada al crear otros nuevos
-- [Acceso entre Bases](/es/basic/automation/actions/records/cross-base) — crea Registros en Tablas que se encuentran fuera de la Base actual
+- [Acceso entre Proyectos](/es/basic/automation/actions/records/cross-base) — crea Registros en Tablas que se encuentran fuera del Proyecto actual
- [Bucle (lote)](../logic/loop-run) — crea varios Registros en un solo paso de acción
diff --git a/es/basic/automation/actions/records/cross-base.mdx b/es/basic/automation/actions/records/cross-base.mdx
index 2c05d8bb..b76b4443 100644
--- a/es/basic/automation/actions/records/cross-base.mdx
+++ b/es/basic/automation/actions/records/cross-base.mdx
@@ -1,6 +1,6 @@
---
-title: "Acceso entre Bases"
-description: "Lee y escribe datos de distintas Bases en un mismo flujo de trabajo"
+title: "Acceso entre Proyectos"
+description: "Lee y escribe datos de distintos Proyectos en un mismo flujo de trabajo"
---
{/* mintlify-resync: 2026-05-26 */}
@@ -10,74 +10,74 @@ Recomendamos encarecidamente usar Ejecutar script para crear automatizaciones, y
Ten en cuenta que, si añades acciones manualmente, la IA no podrá reconocerlas ni modificarlas más adelante.
-De forma predeterminada, las acciones de Automatización operan en las Tablas de la propia Base del flujo de trabajo. Acceso entre Bases permite que un flujo de trabajo lea y escriba en otra Base. Úsalo para flujos de trabajo que abarcan departamentos, proyectos o conjuntos de datos.
+De forma predeterminada, las acciones de Automatización operan en las Tablas del propio Proyecto del flujo de trabajo. Acceso entre Proyectos permite que un flujo de trabajo lea y escriba en otro Proyecto. Úsalo para flujos de trabajo que abarcan departamentos, proyectos o conjuntos de datos.
-Por ejemplo, una Automatización de una Base Ventas puede crear un Registro de logística en una Base Operaciones independiente, o un flujo de informes puede reunir datos de varias Bases de proyectos en un único resumen.
+Por ejemplo, una Automatización de un Proyecto Ventas puede crear un Registro de logística en un Proyecto Operaciones independiente, o un flujo de informes puede reunir datos de varios Proyectos en un único resumen.
## Acciones compatibles
-| Acción | Compatible con el acceso entre Bases |
+| Acción | Compatible con el acceso entre Proyectos |
|---|---|
| Crear Registro | Sí |
| Actualizar Registro | Sí |
| Obtener Registros | Sí |
-Estas son las tres acciones orientadas a Registros. Las demás acciones (Enviar correo electrónico, Solicitud HTTP, etc.) no necesitan acceso entre Bases porque no apuntan a una Tabla concreta.
+Estas son las tres acciones orientadas a Registros. Las demás acciones (Enviar correo electrónico, Solicitud HTTP, etc.) no necesitan acceso entre Proyectos porque no apuntan a una Tabla concreta.
## Cómo configurarlo
1. Abre una acción compatible (Crear Registro, Actualizar Registro u Obtener Registros) en tu flujo de trabajo.
-2. Junto al selector de **Tabla**, haz clic en **Acceso entre Bases**.
-3. Se abrirá un panel que muestra todos los Espacios y Bases a los que puede acceder tu cuenta. Selecciona el **Espacio** de destino y después la **Base** de destino.
-4. Elige la **Tabla** de esa Base. Si la acción lo permite, también puedes seleccionar una **Vista** concreta.
-5. Asigna los Campos y configura la acción como de costumbre. La lista de Campos reflejará ahora los Campos de la Tabla de destino, no los de la Base actual.
+2. Junto al selector de **Tabla**, haz clic en **Acceso entre Proyectos**.
+3. Se abrirá un panel que muestra todos los Espacios y Proyectos a los que puede acceder tu cuenta. Selecciona el **Espacio** de destino y después el **Proyecto** de destino.
+4. Elige la **Tabla** de ese Proyecto. Si la acción lo permite, también puedes seleccionar una **Vista** concreta.
+5. Asigna los Campos y configura la acción como de costumbre. La lista de Campos reflejará ahora los Campos de la Tabla de destino, no los del Proyecto actual.
6. Guarda la acción.
## Ejemplo concreto: de Ventas a Logística
-Imagina que tienes dos Bases:
+Imagina que tienes dos Proyectos:
-- **Base Ventas** — contiene una Tabla «Acuerdos» en la que el equipo de ventas realiza el seguimiento de los acuerdos cerrados.
-- **Base Operaciones** — contiene una Tabla «Logística» en la que el equipo de operaciones gestiona los envíos.
+- **Proyecto Ventas** — contiene una Tabla «Acuerdos» en la que el equipo de ventas realiza el seguimiento de los acuerdos cerrados.
+- **Proyecto Operaciones** — contiene una Tabla «Logística» en la que el equipo de operaciones gestiona los envíos.
Quieres crear automáticamente un Registro de logística cuando se cierre un acuerdo:
-1. **Desencadenador:** en la Base Ventas, utiliza «Cuando el Registro cumple las condiciones» con el filtro: `Etapa` es igual a `Cerrado ganado`.
-2. **Acción:** Crear Registro con Acceso entre Bases dirigido a Base Operaciones > Tabla Logística.
+1. **Desencadenador:** en el Proyecto Ventas, utiliza «Cuando el Registro cumple las condiciones» con el filtro: `Etapa` es igual a `Cerrado ganado`.
+2. **Acción:** Crear Registro con Acceso entre Proyectos dirigido a Proyecto Operaciones > Tabla Logística.
3. **Asignación de Campos:** asigna el Nombre del cliente, Producto, Cantidad y Dirección de envío del acuerdo a los Campos correspondientes de la Tabla Logística.
-A partir de ahora, cada vez que se cierre un acuerdo se creará automáticamente un Registro de logística en la Base Operaciones, sin necesidad de una transferencia manual.
+A partir de ahora, cada vez que se cierre un acuerdo se creará automáticamente un Registro de logística en el Proyecto Operaciones, sin necesidad de una transferencia manual.
## Modelo de permisos
-Cuando creas, editas o aplicas actualizaciones del flujo de trabajo, Teable comprueba cada acción entre Bases en función de los permisos del editor actual:
+Cuando creas, editas o aplicas actualizaciones del flujo de trabajo, Teable comprueba cada acción entre Proyectos en función de los permisos del editor actual:
-| Acción | Permiso necesario en la Base de destino |
+| Acción | Permiso necesario en el Proyecto de destino |
|---|---|
| Obtener Registros | Leer Campos y Registros |
| Crear Registro | Leer Campos y Registros, además de crear Registros |
| Actualizar Registro | Leer Campos y Registros, además de actualizar Registros |
-Las ejecuciones activas del flujo de trabajo utilizan la identidad de tiempo de ejecución de Automatización de Teable para la Base de destino. Los Registros creados o actualizados por una acción entre Bases aparecen como **Robot de Automatización** en los metadatos del Registro y las superficies de auditoría.
+Las ejecuciones activas del flujo de trabajo utilizan la identidad de tiempo de ejecución de Automatización de Teable para el Proyecto de destino. Los Registros creados o actualizados por una acción entre Proyectos aparecen como **Robot de Automatización** en los metadatos del Registro y las superficies de auditoría.
### Qué ocurre cuando cambia el acceso
-Si el editor actual no tiene el permiso necesario en la Base de destino, Teable le impide añadir o cambiar acciones entre Bases que apunten a esa Base. Si un borrador ya contiene acciones entre Bases a las que el editor no puede acceder, Teable también impide que aplique ese borrador. La versión que ya está activa sigue ejecutándose; Teable volverá a comprobar los permisos la próxima vez que alguien edite o aplique el flujo de trabajo.
+Si el editor actual no tiene el permiso necesario en el Proyecto de destino, Teable le impide añadir o cambiar acciones entre Proyectos que apunten a ese Proyecto. Si un borrador ya contiene acciones entre Proyectos a las que el editor no puede acceder, Teable también impide que aplique ese borrador. La versión que ya está activa sigue ejecutándose; Teable volverá a comprobar los permisos la próxima vez que alguien edite o aplique el flujo de trabajo.
Para corregir un error de permisos mientras editas o aplicas un flujo de trabajo:
-1. Pide a alguien con acceso a ambas Bases que edite y aplique el flujo de trabajo.
-2. O bien restablece los permisos necesarios en la Base de destino y vuelve a aplicar el flujo de trabajo.
+1. Pide a alguien con acceso a ambos Proyectos que edite y aplique el flujo de trabajo.
+2. O bien restablece los permisos necesarios en el Proyecto de destino y vuelve a aplicar el flujo de trabajo.
## Consejos
-- El acceso entre Bases puede llegar a Bases de diferentes **Espacios**. El editor que configure o aplique el flujo de trabajo debe tener los permisos necesarios en la Base de destino.
-- Al asignar Campos entre Bases, los tipos de Campo deben ser compatibles. Por ejemplo, no puedes asignar un Campo de texto a uno de archivos adjuntos.
-- Si reestructuras una Base de destino (cambias el nombre de Tablas o eliminas Campos), las acciones entre Bases que hacen referencia a esas Tablas y Campos dejarán de funcionar. Actualiza el flujo de trabajo después de realizar cambios estructurales.
-- En los flujos complejos entre Bases, considera centralizar las automatizaciones en una Base «central» para mantenerlas organizadas.
+- El acceso entre Proyectos puede llegar a Proyectos de diferentes **Espacios**. El editor que configure o aplique el flujo de trabajo debe tener los permisos necesarios en el Proyecto de destino.
+- Al asignar Campos entre Proyectos, los tipos de Campo deben ser compatibles. Por ejemplo, no puedes asignar un Campo de texto a uno de archivos adjuntos.
+- Si reestructuras un Proyecto de destino (cambias el nombre de Tablas o eliminas Campos), las acciones entre Proyectos que hacen referencia a esas Tablas y Campos dejarán de funcionar. Actualiza el flujo de trabajo después de realizar cambios estructurales.
+- En los flujos complejos entre Proyectos, considera centralizar las automatizaciones en un Proyecto «central» para mantenerlas organizadas.
## Contenido relacionado
-- [Crear Registro](/es/basic/automation/actions/records/create-record) — crea Registros en la Base actual o en otra
-- [Actualizar Registro](/es/basic/automation/actions/records/update-record) — actualiza Registros en la Base actual o en otra
-- [Obtener Registros](/es/basic/automation/actions/records/get-records) — recupera Registros de la Base actual o de otra
+- [Crear Registro](/es/basic/automation/actions/records/create-record) — crea Registros en el Proyecto actual o en otro
+- [Actualizar Registro](/es/basic/automation/actions/records/update-record) — actualiza Registros en el Proyecto actual o en otro
+- [Obtener Registros](/es/basic/automation/actions/records/get-records) — recupera Registros del Proyecto actual o de otro
diff --git a/es/basic/automation/actions/records/get-records.mdx b/es/basic/automation/actions/records/get-records.mdx
index e68ce855..12119f4d 100644
--- a/es/basic/automation/actions/records/get-records.mdx
+++ b/es/basic/automation/actions/records/get-records.mdx
@@ -33,7 +33,7 @@ Recupera Registros de una Tabla y los devuelve como una matriz. Utiliza los resu
## Cómo configurarla
1. Añade una acción **Obtener Registros** a tu flujo de trabajo.
-2. Elige la **Tabla** que quieres consultar. Utiliza [Acceso entre Bases](/es/basic/automation/actions/records/cross-base) si la Tabla está en otra Base.
+2. Elige la **Tabla** que quieres consultar. Utiliza [Acceso entre Proyectos](/es/basic/automation/actions/records/cross-base) si la Tabla está en otro Proyecto.
3. (Opcional) Selecciona una **Vista** para heredar sus ajustes de filtro, ordenación y visibilidad de Campos.
4. (Opcional) Añade condiciones de **Filtro** para acotar los resultados. Por ejemplo, `Estado` es igual a `Activo` y `Fecha de vencimiento` es anterior a hoy.
5. (Opcional) Establece **Omitir** y **Tomar** para la paginación. Por ejemplo, Omitir 0 y Tomar 100 para obtener los primeros 100 Registros.
@@ -80,11 +80,11 @@ Para procesar una Tabla grande completa, puedes utilizar varios pasos Obtener Re
- Obtener Registros no modifica ningún dato: es una acción de solo lectura.
- Si la consulta no devuelve ningún Registro, los pasos posteriores que hagan referencia a los resultados recibirán una matriz vacía. Asegúrate de que el flujo de trabajo lo gestione correctamente (p. ej., que no envíe un correo electrónico diciendo «estos son tus resultados» cuando no haya ninguno).
- Los filtros de Obtener Registros funcionan igual que los filtros de Vista: puedes combinar condiciones con lógica AND/OR.
-- Al utilizar Acceso entre Bases, la consulta se ejecuta con los permisos del creador del flujo de trabajo. Si el creador pierde el acceso a la Base de destino, el paso fallará.
+- Al utilizar Acceso entre Proyectos, la consulta se ejecuta con los permisos del creador del flujo de trabajo. Si el creador pierde el acceso al Proyecto de destino, el paso fallará.
## Contenido relacionado
-- [Acceso entre Bases](/es/basic/automation/actions/records/cross-base) — consulta Tablas de otras Bases
+- [Acceso entre Proyectos](/es/basic/automation/actions/records/cross-base) — consulta Tablas de otros Proyectos
- [Bucle (lote)](../logic/loop-run) — recorre la matriz de resultados
- [Crear Registro](/es/basic/automation/actions/records/create-record) — crea Registros a partir de los datos recuperados
- [Actualizar Registro](/es/basic/automation/actions/records/update-record) — actualiza los Registros encontrados mediante Obtener Registros
diff --git a/es/basic/automation/actions/records/update-record.mdx b/es/basic/automation/actions/records/update-record.mdx
index a2455030..e6c27095 100644
--- a/es/basic/automation/actions/records/update-record.mdx
+++ b/es/basic/automation/actions/records/update-record.mdx
@@ -93,11 +93,11 @@ Si la Automatización se activa mediante **Cuando se actualiza un Registro** y l
- La actualización de un Registro puede activar otras automatizaciones que supervisen la misma Tabla. Ten en cuenta los efectos en cascada.
- Al actualizar varios Registros con ID separados por comas, todos reciben los mismos valores de Campo. Si necesitas valores distintos para cada Registro, utiliza un paso [Bucle](../logic/loop-run).
- Si necesitas borrar un Campo, asígnale un valor vacío. Dejarlo sin asignar *no* lo borrará.
-- Utiliza [Acceso entre Bases](/es/basic/automation/actions/records/cross-base) para actualizar Registros de una Tabla que se encuentre en otra Base.
+- Utiliza [Acceso entre Proyectos](/es/basic/automation/actions/records/cross-base) para actualizar Registros de una Tabla que se encuentre en otro Proyecto.
## Contenido relacionado
- [Crear Registro](/es/basic/automation/actions/records/create-record) — añade Registros nuevos en lugar de modificar los existentes
- [Obtener Registros](/es/basic/automation/actions/records/get-records) — recupera Registros para obtener sus ID antes de actualizarlos
-- [Acceso entre Bases](/es/basic/automation/actions/records/cross-base) — actualiza Registros en Tablas que se encuentran fuera de la Base actual
+- [Acceso entre Proyectos](/es/basic/automation/actions/records/cross-base) — actualiza Registros en Tablas que se encuentran fuera del Proyecto actual
- [Bucle (lote)](../logic/loop-run) — actualiza varios Registros con valores diferentes
diff --git a/es/basic/automation/ai/scripting/runscript.mdx b/es/basic/automation/ai/scripting/runscript.mdx
index 1645f3ba..50009fa7 100644
--- a/es/basic/automation/ai/scripting/runscript.mdx
+++ b/es/basic/automation/ai/scripting/runscript.mdx
@@ -210,7 +210,7 @@ output.set("records", data);
### Llamar a la IA desde un script
-`POST /api/automation/runtime/ai` envía un prompt al modelo de IA de tu Base. La Base se obtiene del contexto de la Automatización, por lo que no se necesita ningún ID de Base. El cuerpo acepta `prompt`, además de los parámetros opcionales `attachments`, `modelKey`, `temperature` y `outputType`; la respuesta es `{ "message": ... }`.
+`POST /api/automation/runtime/ai` envía un prompt al modelo de IA de tu Proyecto. El Proyecto se obtiene del contexto de la Automatización, por lo que no se necesita ningún ID de Proyecto. El cuerpo acepta `prompt`, además de los parámetros opcionales `attachments`, `modelKey`, `temperature` y `outputType`; la respuesta es `{ "message": ... }`.
Los archivos adjuntos son elementos `{ url, mimetype, name }`: se admiten hasta 10 por llamada, cada uno de menos de 20 MB y con 30 segundos para su descarga, e incluyen imágenes, archivos PDF y documentos de Office. Es posible que el modelo de chat predeterminado no pueda leer imágenes y archivos similares, así que proporciona `modelKey` cuando envíes archivos. Cada llamada consume créditos.
diff --git a/es/basic/automation/examples/api-automation.mdx b/es/basic/automation/examples/api-automation.mdx
index 6560ec07..57a9f78c 100644
--- a/es/basic/automation/examples/api-automation.mdx
+++ b/es/basic/automation/examples/api-automation.mdx
@@ -17,7 +17,7 @@ La IA creará automáticamente el flujo de trabajo completo. Puedes revisar el s
## Requisitos previos
- Un token de acceso personal (PAT). Consulta [Token de acceso](/es/api-doc/token).
-- El ID de tu Base, el ID de la Tabla y los ID de los Campos. Consulta [Obtener ID](/es/api-doc/get-id).
+- El ID de tu Proyecto, el ID de la Tabla y los ID de los Campos. Consulta [Obtener ID](/es/api-doc/get-id).
## Funciones auxiliares
@@ -74,7 +74,7 @@ await api("PUT", `/base/${baseId}/workflow/${wf.id}/active`, {
## Prácticas recomendadas
-- Utiliza el PAT con menos privilegios posibles: limítalo a los Espacios y las Bases que necesite.
+- Utiliza el PAT con menos privilegios posibles: limítalo a los Espacios y los Proyectos que necesite.
- Almacena los tokens en variables de entorno; nunca los escribas directamente en el código.
- Utiliza **Probar nodo** para verificarlo antes de activarlo.
- Consulta la [Referencia completa de la API de Automatización](/es/api-reference/automation/put-base-workflow-action).
diff --git a/es/basic/automation/examples/cross-base-sync.mdx b/es/basic/automation/examples/cross-base-sync.mdx
index 0d06495f..0e226a03 100644
--- a/es/basic/automation/examples/cross-base-sync.mdx
+++ b/es/basic/automation/examples/cross-base-sync.mdx
@@ -1,6 +1,6 @@
---
-title: "Mantener sincronizados los Registros entre varias Bases"
-description: "Replica automáticamente Registros nuevos o actualizados en otra Base mediante el acceso entre Bases"
+title: "Mantener sincronizados los Registros entre varios Proyectos"
+description: "Replica automáticamente Registros nuevos o actualizados en otro Proyecto mediante el acceso entre Proyectos"
---
Recomendamos crear los ejemplos de Automatización directamente en el Chat de IA. Describe el flujo de trabajo que quieres y la IA se encargará de configurarlo por completo, incluidos el disparador, las acciones, el script y la configuración.
@@ -9,18 +9,18 @@ description: "Replica automáticamente Registros nuevos o actualizados en otra B
Abre el Chat de IA en la barra lateral derecha de tu Tabla y dile a la IA lo que quieres. Por ejemplo, puedes decir:
-*"Cuando se cree un pedido nuevo en la Base Ventas, crea un Registro correspondiente en la Base Cumplimiento con el ID del pedido, el nombre del cliente, el importe y el estado establecido en Pendiente"*
+*"Cuando se cree un pedido nuevo en el Proyecto Ventas, crea un Registro correspondiente en el Proyecto Cumplimiento con el ID del pedido, el nombre del cliente, el importe y el estado establecido en Pendiente"*
La IA creará automáticamente el flujo de trabajo completo. Puedes revisar el script generado, probarlo con datos reales y habilitar el flujo de trabajo cuando esté listo.
## Configuración manual
-1. **Crea un flujo de trabajo** en la Base **Ventas** con el disparador **Cuando se crea un Registro**.
+1. **Crea un flujo de trabajo** en el Proyecto **Ventas** con el disparador **Cuando se crea un Registro**.
2. Selecciona tu Tabla **Pedidos**.
3. Haz clic en **Probar**.
4. **Añade una acción** → **Crear Registro**.
-5. Haz clic en **Acceso entre Bases** junto al selector de Tabla.
-6. Ve a la Base **Cumplimiento** y selecciona la Tabla **Pedidos**.
+5. Haz clic en **Acceso entre Proyectos** junto al selector de Tabla.
+6. Ve al Proyecto **Cumplimiento** y selecciona la Tabla **Pedidos**.
7. Asigna los Campos:
- ID del pedido → ID del pedido del disparador (mediante **+**)
- Cliente → Cliente del disparador
@@ -31,6 +31,6 @@ La IA creará automáticamente el flujo de trabajo completo. Puedes revisar el s
## Sincronización bidireccional
Para sincronizar las actualizaciones en ambas direcciones:
-1. Crea un segundo flujo de trabajo en la Base **Cumplimiento**.
-2. Usa **Cuando se actualiza un Registro** → **Actualizar Registro** con el acceso entre Bases apuntando de nuevo a la Base Ventas.
+1. Crea un segundo flujo de trabajo en el Proyecto **Cumplimiento**.
+2. Usa **Cuando se actualiza un Registro** → **Actualizar Registro** con el acceso entre Proyectos apuntando de nuevo al Proyecto Ventas.
3. Usa un filtro para evitar bucles infinitos; por ejemplo, activa el flujo únicamente cuando cambien determinados Campos y comprueba que el valor sea realmente distinto antes de actualizar.
diff --git a/es/basic/automation/trigger/external/webhook-received.mdx b/es/basic/automation/trigger/external/webhook-received.mdx
index c37c3f43..76158c48 100644
--- a/es/basic/automation/trigger/external/webhook-received.mdx
+++ b/es/basic/automation/trigger/external/webhook-received.mdx
@@ -78,7 +78,7 @@ Vuelve a cambiar **Respuesta** a **Predeterminada** en cualquier momento para us
## Probar el webhook
-La forma más sencilla de probarlo es usar `curl` desde la línea de comandos. Copia la URL real del panel del disparador en lugar de escribirla: contiene los ID de la Base y del flujo de trabajo.
+La forma más sencilla de probarlo es usar `curl` desde la línea de comandos. Copia la URL real del panel del disparador en lugar de escribirla: contiene los ID del Proyecto y del flujo de trabajo.
**Sin autorización:**
@@ -120,7 +120,7 @@ Después de enviar una solicitud de prueba, comprueba el historial de ejecucione
| Ámbito | Límite |
|---|---|
-| Por Base | 50 solicitudes/segundo |
+| Por Proyecto | 50 solicitudes/segundo |
| Por flujo de trabajo | 2 solicitudes/segundo |
Las solicitudes que superen el límite de frecuencia recibirán una respuesta HTTP 429. Si tu sistema externo envía ráfagas de solicitudes, considera implementar una lógica de reintentos con espera exponencial.
diff --git a/es/basic/base.mdx b/es/basic/base.mdx
index b6454ccb..2c8d11e1 100644
--- a/es/basic/base.mdx
+++ b/es/basic/base.mdx
@@ -1,42 +1,44 @@
---
title: "Descripción general"
-description: "Crea, administra, importa y exporta Bases. Traslada datos entre Espacios de Teable Cloud o migra entre instancias de Cloud y autoalojadas mediante archivos .tea."
+description: "Crea, administra, importa y exporta Proyectos. Traslada datos entre Espacios de Teable Cloud o migra entre instancias de Cloud y autoalojadas mediante archivos .tea."
---
{/* mintlify-resync: 2026-05-26 */}
-Una Base es una herramienta para almacenar y procesar toda la información de un proyecto concreto. Cada Espacio puede contener varias Bases, y cada Base funciona de forma independiente para ofrecer una estructura de información clara a proyectos o conjuntos de Tablas concretos.
+Un proyecto reúne tablas, aplicaciones y automatizaciones relacionadas. Cada Espacio puede contener varios proyectos, y cada proyecto tiene sus propios recursos y permisos de colaboración.
-Si no estás familiarizado con las Bases, puedes considerarlas equivalentes a los libros de Excel, donde cada libro puede contener varias hojas.
+Proyecto es el nombre del recurso `base` en la interfaz. En la API y la CLI se conservan `base`, campos como `baseId`, el prefijo de ID `bse` y las URL `/base/...`.
-## Crear y administrar Bases
+Si no estás familiarizado con los Proyectos, puedes considerarlos equivalentes a los libros de Excel, donde cada libro puede contener varias hojas.
-### Añadir una Base
+## Crear y administrar Proyectos {#crear-y-administrar-bases}
+
+### Añadir un Proyecto {#añadir-una-base}
1. Entra en un Espacio
-2. Haz clic en «Crear Base» en la esquina superior derecha
+2. Haz clic en «Crear Proyecto» en la esquina superior derecha
-### Cambiar el nombre o eliminar una Base
+### Cambiar el nombre o eliminar un Proyecto {#cambiar-el-nombre-o-eliminar-una-base}
1. Entra en un Espacio
-2. Coloca el cursor sobre una Base
+2. Coloca el cursor sobre un Proyecto
3. Haz clic en el botón «···» para abrir el menú
4. Haz clic en «Renombrar» o «Eliminar»
-### Organizar los recursos de una Base
+### Organizar los recursos de un Proyecto {#organizar-los-recursos-de-una-base}
-Después de entrar en una Base, la barra lateral izquierda muestra sus recursos, como Tablas, aplicaciones y automatizaciones. Puedes usar carpetas para organizarlos y facilitar la navegación por Bases de gran tamaño.
+Después de entrar en un Proyecto, la barra lateral izquierda muestra sus recursos, como Tablas, aplicaciones y automatizaciones. Puedes usar carpetas para organizarlos y facilitar la navegación por Proyectos de gran tamaño.
Entre las operaciones habituales se incluyen:
@@ -46,40 +48,40 @@ Entre las operaciones habituales se incluyen:
- **Añadir descripciones**: Para las Tablas, aplicaciones y automatizaciones, haz clic en **Añadir descripción** bajo el nombre del recurso en el encabezado. Usa las descripciones para anotar la finalidad, el responsable, las notas de traspaso o las normas de uso. Teable abre una descripción la primera vez que accedes al recurso y vuelve a abrirla después de cada cambio.
- **Consultar la información del nodo**: Abre el menú `...` de un recurso y elige **Información del nodo** para consultar el ID de la carpeta, Tabla, automatización o aplicación, junto con la información de creación y modificación.
-### Duplicar una Base en otro Espacio {#duplicate-a-base-to-another-space}
+### Duplicar un Proyecto en otro Espacio {#duplicate-a-base-to-another-space}
-Paso 1: En el Espacio, selecciona la Base que quieres duplicar.
+Paso 1: En el Espacio, selecciona el Proyecto que quieres duplicar.
-Paso 2: Haz clic en el icono del menú y selecciona la opción Copiar Base.
+Paso 2: Haz clic en el icono del menú y selecciona la opción Copiar Proyecto.
Paso 3: En la ventana emergente, elige el Espacio de destino. Necesitas permisos de Creador en ese Espacio.
-En las Bases de mayor tamaño, Teable muestra el progreso en el cuadro de diálogo de duplicación mientras copia la estructura, los Registros y los archivos adjuntos de la Base. Mantén abierto el cuadro de diálogo hasta que termine la copia. El historial de revisiones y los colaboradores no se copian.
+En los Proyectos de mayor tamaño, Teable muestra el progreso en el cuadro de diálogo de duplicación mientras copia la estructura, los Registros y los archivos adjuntos del Proyecto. Mantén abierto el cuadro de diálogo hasta que termine la copia. El historial de revisiones y los colaboradores no se copian.
-Si la Base contiene Campos de Enlace, Búsqueda, Acumulación, Búsqueda condicional o Acumulación condicional que apuntan a otro Espacio, Teable muestra los Campos afectados antes de duplicarla. Si continúas, Teable convierte esos Campos en **Texto de una sola línea** en la Base duplicada.
+Si el Proyecto contiene Campos de Enlace, Búsqueda, Acumulación, Búsqueda condicional o Acumulación condicional que apuntan a otro Espacio, Teable muestra los Campos afectados antes de duplicarla. Si continúas, Teable convierte esos Campos en **Texto de una sola línea** en el Proyecto duplicado.
-### Mover una Base entre Espacios
+### Mover un Proyecto entre Espacios {#mover-una-base-entre-espacios}
-Si tienes los permisos de Espacio necesarios, puedes mover una Base a otro Espacio. Si el traslado provocaría que los Campos basados en relaciones apuntaran a otros Espacios, Teable te avisa y enumera los Campos afectados. Al confirmar, Teable convierte esos Campos en **Texto de una sola línea** como parte del traslado.
+Si tienes los permisos de Espacio necesarios, puedes mover un Proyecto a otro Espacio. Si el traslado provocaría que los Campos basados en relaciones apuntaran a otros Espacios, Teable te avisa y enumera los Campos afectados. Al confirmar, Teable convierte esos Campos en **Texto de una sola línea** como parte del traslado.
-## Importar y exportar Bases
+## Importar y exportar Proyectos {#importar-y-exportar-bases}
Usa el Chat de IA para migrar Airtable, Baserow, NocoDB, SmartSuite y otros sistemas a Teable.
-### Importar una Base (migración de datos)
+### Importar un Proyecto (migración de datos) {#importar-una-base-migración-de-datos}
-El formato de archivo `.tea` importa una Base completa con todas sus Tablas, Campos, datos y configuraciones. Resulta útil para:
-- **Migración de datos**: Trasladar Bases entre distintas instancias de Teable (p. ej., de Cloud a una instancia autoalojada)
-- **Restauración de copias de seguridad**: Restaurar una Base exportada anteriormente
-- **Compartir plantillas**: Compartir estructuras de Bases completas con otros equipos
+El formato de archivo `.tea` importa un Proyecto completo con todas sus Tablas, Campos, datos y configuraciones. Resulta útil para:
+- **Migración de datos**: Trasladar Proyectos entre distintas instancias de Teable (p. ej., de Cloud a una instancia autoalojada)
+- **Restauración de copias de seguridad**: Restaurar un Proyecto exportado anteriormente
+- **Compartir plantillas**: Compartir estructuras de Proyectos completas con otros equipos
**Pasos:**
1. Entra en el Espacio
@@ -89,19 +91,19 @@ El formato de archivo `.tea` importa una Base completa con todas sus Tablas, Cam
-Si quieres crear una Base desde Airtable, elige **Importar desde Airtable** en el mismo cuadro de diálogo de importación.
+Si quieres crear un Proyecto desde Airtable, elige **Importar desde Airtable** en el mismo cuadro de diálogo de importación.
-### Exportar una Base (copia de seguridad y migración) {#export-base-backup-&-migration}
+### Exportar un Proyecto (copia de seguridad y migración) {#export-base-backup-&-migration}
-Exporta tu Base a un archivo `.tea` para crear una copia de seguridad o migrarla. El archivo exportado contiene todas las Tablas, Campos, datos, Vistas y configuraciones.
+Exporta tu Proyecto a un archivo `.tea` para crear una copia de seguridad o migrarla. El archivo exportado contiene todas las Tablas, Campos, datos, Vistas y configuraciones.
**Pasos:**
1. Entra en el Espacio
-2. Coloca el cursor sobre la Base que quieres exportar
+2. Coloca el cursor sobre el Proyecto que quieres exportar
3. Haz clic en el botón 「···」 para abrir el menú
4. Haz clic en 「Exportar」
5. Mantén activada la opción **Incluir Registros** para exportar los datos de los Registros. Desactívala para exportar únicamente la estructura y la configuración.
@@ -110,28 +112,28 @@ Exporta tu Base a un archivo `.tea` para crear una copia de seguridad o migrarla
-- Para migrar datos entre instancias de Teable, exporta la Base desde la instancia de origen e importa después el archivo `.tea` en la instancia de destino. Se conservarán todos los datos y configuraciones.
-- Teable convierte los Campos de relación entre Bases en Campos de **Texto de una sola línea** en el archivo exportado.
-- Al duplicar o mover una Base entre Espacios, los Campos de relación entre Espacios se convierten en **Texto de una sola línea**.
+- Para migrar datos entre instancias de Teable, exporta el Proyecto desde la instancia de origen e importa después el archivo `.tea` en la instancia de destino. Se conservarán todos los datos y configuraciones.
+- Teable convierte los Campos de relación entre Proyectos en Campos de **Texto de una sola línea** en el archivo exportado.
+- Al duplicar o mover un Proyecto entre Espacios, los Campos de relación entre Espacios se convierten en **Texto de una sola línea**.
-## Compartir una Base
+## Compartir un Proyecto {#compartir-una-base}
-Las Bases pueden compartirse mediante enlaces públicos. El ámbito compartido puede abarcar toda la Base o el elemento seleccionado actualmente.
+Los Proyectos pueden compartirse mediante enlaces públicos. El ámbito compartido puede abarcar todo el Proyecto o el elemento seleccionado actualmente.
-1. Entra en la Base de destino
-2. Abre el menú para compartir de la Base o del elemento seleccionado
+1. Entra en el Proyecto de destino
+2. Abre el menú para compartir del Proyecto o del elemento seleccionado
3. Activa **Compartir en la web**
4. Copia el enlace para compartir o el código QR
@@ -139,29 +141,29 @@ Los ámbitos de uso compartido incluyen:
| Ámbito | Descripción |
|------|------|
-| **Compartir toda la Base** | Comparte todos los elementos de la Base actual. Las Tablas y carpetas que se añadan posteriormente se incluyen automáticamente. |
+| **Compartir todo el Proyecto** | Comparte todos los elementos del Proyecto actual. Las Tablas y carpetas que se añadan posteriormente se incluyen automáticamente. |
| **Compartir el elemento seleccionado** | Comparte el elemento seleccionado actualmente. Al compartir una carpeta, se incluyen sus elementos secundarios. |
En los ajustes de uso compartido puedes configurar los permisos del enlace, la opción **Permitir que los lectores copien datos**, el acceso mediante contraseña, volver a generar el enlace, eliminarlo o copiar la configuración de inserción.
Si el ámbito compartido incluye una aplicación, esta debe publicarse antes de poder acceder a ella mediante el enlace público.
-## Funciones de una Base
+## Funciones de un Proyecto {#funciones-de-una-base}
-Una Base puede contener varias Tablas para registrar y organizar información laboral o empresarial.
+Un Proyecto puede contener varias Tablas para registrar y organizar información laboral o empresarial.
-Por ejemplo, una Base de gestión de clientes puede tener Tablas independientes para «Empresas clientes», «Contactos de clientes» y «Registros de seguimiento de clientes», mientras que una Base de gestión de salas de reuniones puede incluir Tablas independientes para registrar «Gestión de salas de reuniones», «Equipamiento de salas de reuniones» y «Reservas de salas de reuniones».
+Por ejemplo, un Proyecto de gestión de clientes puede tener Tablas independientes para «Empresas clientes», «Contactos de clientes» y «Registros de seguimiento de clientes», mientras que un Proyecto de gestión de salas de reuniones puede incluir Tablas independientes para registrar «Gestión de salas de reuniones», «Equipamiento de salas de reuniones» y «Reservas de salas de reuniones».
-Por tanto, la mayoría de las funciones de una Base están relacionadas con las Tablas:
+Por tanto, la mayoría de las funciones de un Proyecto están relacionadas con las Tablas:
-* **Crear Tablas**: Las Bases permiten crear Tablas nuevas según las necesidades específicas del proyecto; los usuarios pueden definir la estructura de la Tabla, los Campos y los tipos de datos.
-* **Editar Tablas**: Los usuarios pueden editar las Tablas existentes en la Base, lo que incluye añadir, eliminar y modificar Registros.
-* **Exportar e importar datos**: Las Bases permiten exportar datos a CSV e importarlos en formatos CSV y XLSX.
+* **Crear Tablas**: Los Proyectos permiten crear Tablas nuevas según las necesidades específicas del proyecto; los usuarios pueden definir la estructura de la Tabla, los Campos y los tipos de datos.
+* **Editar Tablas**: Los usuarios pueden editar las Tablas existentes en el Proyecto, lo que incluye añadir, eliminar y modificar Registros.
+* **Exportar e importar datos**: Los Proyectos permiten exportar datos a CSV e importarlos en formatos CSV y XLSX.
Consulta la [sección Tablas](/es/basic/table) para obtener más información.
diff --git a/es/basic/credential.mdx b/es/basic/credential.mdx
index 0113148c..6c66d31a 100644
--- a/es/basic/credential.mdx
+++ b/es/basic/credential.mdx
@@ -39,7 +39,7 @@ Abre el panel de credenciales del recurso:
Cada concesión necesita un **Nombre de la variable**, el alias que esa credencial tiene dentro de la aplicación o automatización. Sigue las mismas reglas de nomenclatura que la clave de un secreto y es el nombre que lee el código.
-El panel también puede mostrar marcadores **Sin vincular**. Copiar una aplicación, duplicar un flujo de trabajo e importar o duplicar una base traen los alias que espera el código, pero ninguna credencial. Con **Vincular la mía** aportas la tuya para que la aplicación o automatización funcione.
+El panel también puede mostrar marcadores **Sin vincular**. Copiar una aplicación, duplicar un flujo de trabajo e importar o duplicar un proyecto traen los alias que espera el código, pero ninguna credencial. Con **Vincular la mía** aportas la tuya para que la aplicación o automatización funcione.
Cuando un alias tiene la credencial de otra persona, **Reemplazar por el mío** la sustituye por la tuya. **Solo quitar el permiso (mantener marcador)** deshace el vínculo y conserva el marcador, así que el código no cambia.
diff --git a/es/basic/security.mdx b/es/basic/security.mdx
index a9d5e0d9..e70408d3 100644
--- a/es/basic/security.mdx
+++ b/es/basic/security.mdx
@@ -112,13 +112,13 @@ Teable ofrece varias opciones para crear copias de seguridad de tus datos:
| Método | Descripción | Caso de uso |
|--------|-------------|----------|
-| **[Exportar una Base](/es/basic/base#export-base-backup-&-migration)** | Descarga una Base completa como archivo `.tea` (estructura, datos y Automatizaciones) | Copia de seguridad completa y migración |
-| **[Duplicar una Base](/es/basic/base#duplicate-a-base-to-another-space)** | Crea una copia de una Base dentro de Teable | Instantánea rápida |
+| **[Exportar un Proyecto](/es/basic/base#export-base-backup-&-migration)** | Descarga un Proyecto completo como archivo `.tea` (estructura, datos y Automatizaciones) | Copia de seguridad completa y migración |
+| **[Duplicar un Proyecto](/es/basic/base#duplicate-a-base-to-another-space)** | Crea una copia de un Proyecto dentro de Teable | Instantánea rápida |
| **[Exportar CSV](/es/basic/table/export)** | Exporta los datos de una Tabla concreta | Portabilidad de datos |
| **[Exportar mediante la API](/es/api-doc/record/get)** | Exporta Registros mediante programación a través de la API REST | Copias de seguridad automatizadas |
-Puedes crear copias de seguridad manuales de tus Bases exportando una Base completa como archivo `.tea`, exportando Tablas concretas como archivos CSV u obteniendo tus datos mediante la API de Teable.
+Puedes crear copias de seguridad manuales de tus Proyectos exportando un Proyecto completo como archivo `.tea`, exportando Tablas concretas como archivos CSV u obteniendo tus datos mediante la API de Teable.
## Inicio de sesión único (SSO)
diff --git a/es/basic/space.mdx b/es/basic/space.mdx
index ed9eba91..28b0dad0 100644
--- a/es/basic/space.mdx
+++ b/es/basic/space.mdx
@@ -64,15 +64,15 @@ Los Espacios eliminados se trasladan a la Papelera, donde puedes vaciarla para b
## Compartido conmigo
-Cuando alguien comparte una Base contigo como colaborador, la Base aparece en **Compartido conmigo**, en la barra lateral del Espacio.
+Cuando alguien comparte un Proyecto contigo como colaborador, el Proyecto aparece en **Compartido conmigo**, en la barra lateral del Espacio.
-Las Bases que han compartido contigo son diferentes de las Bases de tus propios Espacios:
+Los Proyectos que han compartido contigo son diferentes de los Proyectos de tus propios Espacios:
- La persona que comparte controla el acceso.
-- Las acciones disponibles dependen del permiso que se te haya concedido en la Base.
-- Si esa persona retira tu acceso, la Base deja de aparecer.
+- Las acciones disponibles dependen del permiso que se te haya concedido en el Proyecto.
+- Si esa persona retira tu acceso, el Proyecto deja de aparecer.
-Para obtener información sobre cómo compartir Bases públicamente, consulta [Base](/es/basic/base).
+Para obtener información sobre cómo compartir Proyectos públicamente, consulta [Proyecto](/es/basic/base).
## Ajustes del Espacio
@@ -95,7 +95,7 @@ En la página Ajustes de IA, los propietarios del Espacio pueden configurar prov
**Chat en IM**
-En la página **Chat en IM**, los administradores del Espacio pueden crear bots y configurar su modelo, las Bases accesibles, las Skills, los archivos y la integración con IM.
+En la página **Chat en IM**, los administradores del Espacio pueden crear bots y configurar su modelo, los Proyectos accesibles, las Skills, los archivos y la integración con IM.
**Plan**
diff --git a/es/basic/space/base-invite.mdx b/es/basic/space/base-invite.mdx
index 56e02388..0c4c0bd3 100644
--- a/es/basic/space/base-invite.mdx
+++ b/es/basic/space/base-invite.mdx
@@ -1,39 +1,39 @@
---
-title: "Invitación a una Base"
-description: "Administra los permisos a nivel de Base. Invita a miembros a una Base concreta sin concederles acceso a todo el Espacio para colaborar con los datos de forma más granular y segura."
+title: "Invitación a un Proyecto"
+description: "Administra los permisos a nivel de Proyecto. Invita a miembros a un Proyecto concreto sin concederles acceso a todo el Espacio para colaborar con los datos de forma más granular y segura."
---
-## ¿Qué es un colaborador de una Base?
+## ¿Qué es un colaborador de un Proyecto? {#qué-es-un-colaborador-de-una-base}
-Un colaborador de una Base es un miembro invitado únicamente a una Base concreta. A diferencia de los colaboradores del Espacio, solo puede acceder a las Bases a las que se le haya invitado y no puede ver otras Bases del Espacio.
+Un colaborador de un Proyecto es un miembro invitado únicamente a un Proyecto concreto. A diferencia de los colaboradores del Espacio, solo puede acceder a los Proyectos a los que se le haya invitado y no puede ver otros Proyectos del Espacio.
-## Añadir colaboradores a una Base
+## Añadir colaboradores a un Proyecto {#añadir-colaboradores-a-una-base}
-Entra en cualquier Base y haz clic en el botón `Invitar` de la esquina superior derecha. Se admiten dos métodos:
+Entra en cualquier Proyecto y haz clic en el botón `Invitar` de la esquina superior derecha. Se admiten dos métodos:
-- **Invitar por correo electrónico**: introduce la dirección de correo electrónico de la persona destinataria, establece el nivel de permisos de la Base (por ejemplo, «Creador») y haz clic en **Enviar invitación**.
+- **Invitar por correo electrónico**: introduce la dirección de correo electrónico de la persona destinataria, establece el nivel de permisos del Proyecto (por ejemplo, «Creador») y haz clic en **Enviar invitación**.
- **Invitar mediante enlace**: cambia a la pestaña «Invitar mediante enlace» para generar un enlace de invitación específico. Copia y comparte el enlace. Las personas destinatarias pueden incorporarse haciendo clic en él.
-Después de enviar una invitación por correo electrónico, puedes copiar el enlace directo a la Base que aparece en el panel y enviarlo por separado. La persona invitada también recibe una notificación dentro de la aplicación que abre la Base.
+Después de enviar una invitación por correo electrónico, puedes copiar el enlace directo al Proyecto que aparece en el panel y enviarlo por separado. La persona invitada también recibe una notificación dentro de la aplicación que abre el Proyecto.
-En el panel de invitaciones puedes ver todos los usuarios que tienen acceso a la Base en ese momento:
+En el panel de invitaciones puedes ver todos los usuarios que tienen acceso al Proyecto en ese momento:
-- **Colaboradores de la Base**: miembros invitados directamente y únicamente a esta Base.
-- **Colaboradores del Espacio**: aparecen con una insignia «Espacio» junto a su nombre, lo que indica que son miembros a nivel de Espacio y heredan automáticamente el acceso a esta Base.
+- **Colaboradores del Proyecto**: miembros invitados directamente y únicamente a este Proyecto.
+- **Colaboradores del Espacio**: aparecen con una insignia «Espacio» junto a su nombre, lo que indica que son miembros a nivel de Espacio y heredan automáticamente el acceso a este Proyecto.
-La Base ofrece cuatro roles de permisos para admitir distintos niveles de colaboración. Para consultar una comparación detallada, consulta [Detalles de los permisos](/es/basic/space/space-permission).
+El Proyecto ofrece cuatro roles de permisos para admitir distintos niveles de colaboración. Para consultar una comparación detallada, consulta [Detalles de los permisos](/es/basic/space/space-permission).
Para disponer de un control más granular a nivel de Tabla, Campo o Registro, utiliza la función [Matriz de Autoridad](/es/basic/authority-matrix).
@@ -46,11 +46,11 @@ La Base ofrece cuatro roles de permisos para admitir distintos niveles de colabo
## Casos de uso
-La invitación a una Base está pensada para colaboradores externos. Por ejemplo, puedes invitar únicamente a esa Base, con permiso de **Editor**, a un diseñador autónomo contratado para organizar una biblioteca de recursos, sin permitirle ver ninguna otra Base del Espacio.
+La invitación a un Proyecto está pensada para colaboradores externos. Por ejemplo, puedes invitar únicamente a ese Proyecto, con permiso de **Editor**, a un diseñador autónomo contratado para organizar una biblioteca de recursos, sin permitirle ver ningún otro Proyecto del Espacio.
## Notas
-- **Herencia de permisos**: un Gestor del Espacio tiene automáticamente acceso completo a todas las Bases de ese Espacio y sus permisos no se pueden reducir a nivel de Base.
-- **Seguridad del enlace**: cualquier persona que obtenga un enlace de invitación puede intentar incorporarse a la Base. Si se filtra un enlace, puedes revocarlo haciendo clic en la X situada junto a él en el panel de invitaciones.
+- **Herencia de permisos**: un Gestor del Espacio tiene automáticamente acceso completo a todos los Proyectos de ese Espacio y sus permisos no se pueden reducir a nivel de Proyecto.
+- **Seguridad del enlace**: cualquier persona que obtenga un enlace de invitación puede intentar incorporarse al Proyecto. Si se filtra un enlace, puedes revocarlo haciendo clic en la X situada junto a él en el panel de invitaciones.
Cuando coexisten la [Matriz de Autoridad](/es/basic/authority-matrix) y los [Detalles de los permisos](/es/basic/space/space-permission), solo los usuarios con rol de **Gestor** están exentos de las restricciones de la Matriz de Autoridad. Todos los demás usuarios están sujetos a ellas.
diff --git a/es/basic/space/billing.mdx b/es/basic/space/billing.mdx
index 34164d1b..07256f15 100644
--- a/es/basic/space/billing.mdx
+++ b/es/basic/space/billing.mdx
@@ -41,19 +41,19 @@ Supervisa el consumo de recursos de tu Espacio mediante estas métricas:
| Métrica | Descripción |
|--------|-------------|
-| **Total de colaboradores** | Número de colaboradores facturables del Espacio actual y sus Bases |
+| **Total de colaboradores** | Número de colaboradores facturables del Espacio actual y sus Proyectos |
| **Máximo de ejecuciones mensuales de Automatizaciones** | Cuota mensual de ejecuciones de Automatizaciones. Cada ejecución consume una unidad de la cuota |
| **Total de Registros** | Número total de filas de todas las Tablas del Espacio |
| **Almacenamiento de adjuntos** | Almacenamiento total utilizado por los archivos adjuntos cargados |
| **Total de correos electrónicos** | Correos electrónicos enviados mediante Automatizaciones con el servicio de correo electrónico de Teable |
-Los datos de la Papelera del Espacio y de la Papelera de las Bases se incluyen en las estadísticas del total de Registros. Para reducirlo, elimina datos en «Espacio → Papelera» o «Base → Papelera».
+Los datos de la Papelera del Espacio y de la Papelera de los Proyectos se incluyen en las estadísticas del total de Registros. Para reducirlo, elimina datos en «Espacio → Papelera» o «Proyecto → Papelera».
-Haz clic en **Detalles** en la tarjeta **Total de Registros** para consultar el uso de Registros por Base. El cuadro de diálogo muestra los Registros activos, los Registros de la Papelera y el total de Registros de cada Base. Desde él puedes abrir la página de la Papelera de una Base o eliminar permanentemente una Base que ya esté en la Papelera.
+Haz clic en **Detalles** en la tarjeta **Total de Registros** para consultar el uso de Registros por Proyecto. El cuadro de diálogo muestra los Registros activos, los Registros de la Papelera y el total de Registros de cada Proyecto. Desde él puedes abrir la página de la Papelera de un Proyecto o eliminar permanentemente un Proyecto que ya esté en la Papelera.
### Cuando se alcanza un límite
-Cuando el Espacio alcanza un límite del plan, Teable detiene la acción antes de ejecutarla y abre el cuadro de diálogo para mejorar el plan, que indica el límite alcanzado, muestra cuánto has utilizado y ofrece enlaces al uso por Base. Esto se aplica a pegar, rellenar y duplicar filas, crear Registros en bloque, importar y cargar archivos adjuntos.
+Cuando el Espacio alcanza un límite del plan, Teable detiene la acción antes de ejecutarla y abre el cuadro de diálogo para mejorar el plan, que indica el límite alcanzado, muestra cuánto has utilizado y ofrece enlaces al uso por Proyecto. Esto se aplica a pegar, rellenar y duplicar filas, crear Registros en bloque, importar y cargar archivos adjuntos.
Para continuar, mejora el plan o libera espacio eliminando Registros o archivos adjuntos.
@@ -129,9 +129,9 @@ Los cambios en una suscripción existente pasan por una página de confirmación
### Asientos
-Los asientos se compran por adelantado y puedes adquirirlos antes de ampliar tu equipo. Los colaboradores con rol de **Propietario**, **Creador** o **Editor** en el Espacio y sus Bases ocupan un asiento. Los roles de **Comentador** y **Espectador** son gratuitos.
+Los asientos se compran por adelantado y puedes adquirirlos antes de ampliar tu equipo. Los colaboradores con rol de **Propietario**, **Creador** o **Editor** en el Espacio y sus Proyectos ocupan un asiento. Los roles de **Comentador** y **Espectador** son gratuitos.
-En los planes Cloud, los asientos adquiridos constituyen un límite estricto. Teable bloquea cualquier acción que haga que el Espacio lo supere y ofrece la posibilidad de añadir asientos. Esto incluye las invitaciones por correo electrónico, crear un enlace de invitación con un rol facturable o cambiarlo a uno, incorporarse mediante dicho enlace, añadir colaboradores directamente y ascender a una persona a un rol facturable. Si una persona ya ocupa un asiento, puede incorporarse a otra Base o cambiar de rol sin ocupar otro.
+En los planes Cloud, los asientos adquiridos constituyen un límite estricto. Teable bloquea cualquier acción que haga que el Espacio lo supere y ofrece la posibilidad de añadir asientos. Esto incluye las invitaciones por correo electrónico, crear un enlace de invitación con un rol facturable o cambiarlo a uno, incorporarse mediante dicho enlace, añadir colaboradores directamente y ascender a una persona a un rol facturable. Si una persona ya ocupa un asiento, puede incorporarse a otro Proyecto o cambiar de rol sin ocupar otro.
Para continuar, añade asientos en la página Plan o asigna a la persona el rol gratuito de Comentador o Espectador. Solo el propietario del Espacio puede comprar asientos.
diff --git a/es/basic/space/space-invite.mdx b/es/basic/space/space-invite.mdx
index c2c9f497..45184e7a 100644
--- a/es/basic/space/space-invite.mdx
+++ b/es/basic/space/space-invite.mdx
@@ -5,7 +5,7 @@ description: "Invita a otras personas a convertirse en colaboradores de un Espac
## ¿Qué es un colaborador de un Espacio?
-Cuando compartes un Espacio con otro usuario, este se convierte en colaborador del Espacio y obtiene acceso a todas las Bases que contiene.
+Cuando compartes un Espacio con otro usuario, este se convierte en colaborador del Espacio y obtiene acceso a todos los Proyectos que contiene.
## Añadir colaboradores a un Espacio
@@ -14,7 +14,7 @@ Cuando compartes un Espacio con otro usuario, este se convierte en colaborador d
1. Haz clic en el Espacio al que quieras añadir colaboradores en la barra lateral izquierda.
2. Haz clic en el botón «Invitar» situado cerca de la parte superior del Espacio.
3. Se abrirá la ventana de invitación al Espacio, donde encontrarás opciones para invitar mediante correo electrónico o enlace. También verás los «Enlaces de invitación» configurados anteriormente y los «Colaboradores del Espacio» existentes en sus respectivas secciones.
-4. **Invitación por correo electrónico**: introduce una o varias direcciones de correo electrónico, separadas por comas. Después, establece el nivel de permisos que quieras conceder a los usuarios para todas las Bases del Espacio. Por último, haz clic en Enviar correo electrónico para invitarlos a colaborar.
+4. **Invitación por correo electrónico**: introduce una o varias direcciones de correo electrónico, separadas por comas. Después, establece el nivel de permisos que quieras conceder a los usuarios para todos los Proyectos del Espacio. Por último, haz clic en Enviar correo electrónico para invitarlos a colaborar.
Después de enviar una invitación por correo electrónico, puedes copiar el enlace directo al Espacio que aparece en el panel y enviarlo por separado. La persona invitada también recibe una notificación dentro de la aplicación que abre el Espacio.
@@ -24,7 +24,7 @@ Cuando compartes un Espacio con otro usuario, este se convierte en colaborador d
className="docs-screenshot"
/>
-5. **Invitación mediante enlace**: haz clic en la opción «Invitar mediante enlace». Después, establece el nivel de permisos que concederá el enlace de invitación para todas las Bases del Espacio. Por último, haz clic en Crear enlace. A continuación, puedes hacer clic en el icono del portapapeles situado junto al enlace creado para compartirlo como prefieras.
+5. **Invitación mediante enlace**: haz clic en la opción «Invitar mediante enlace». Después, establece el nivel de permisos que concederá el enlace de invitación para todos los Proyectos del Espacio. Por último, haz clic en Crear enlace. A continuación, puedes hacer clic en el icono del portapapeles situado junto al enlace creado para compartirlo como prefieras.
-Los colaboradores de un Espacio tienen acceso a todas sus Bases. Si alguien solo necesita trabajar en determinadas Bases, considera añadirlo como [colaborador de una Base](/es/basic/space/base-invite).
+Los colaboradores de un Espacio tienen acceso a todos sus Proyectos. Si alguien solo necesita trabajar en determinados Proyectos, considera añadirlo como [colaborador de un Proyecto](/es/basic/space/base-invite).
## Eliminar enlaces de invitación
@@ -56,7 +56,7 @@ Puedes eliminar colaboradores desde la ventana para compartir el Espacio. Haz cl
* **Restricción de permisos**: solo los usuarios con permisos de Gestor o Creador pueden eliminar a otros colaboradores.
* **Eliminar tu propio acceso**: puedes retirar tu propio acceso si queda al menos otro Gestor en el Espacio.
-* **Ámbito**: eliminar a una persona del Espacio no retira los permisos que tenga en Bases concretas.
+* **Ámbito**: eliminar a una persona del Espacio no retira los permisos que tenga en Proyectos concretos.
Al añadir usuarios nuevos a un Espacio, puedes asignarles los siguientes roles (consulta [Detalles de los permisos](/es/basic/space/space-permission)):
@@ -68,8 +68,8 @@ Al añadir usuarios nuevos a un Espacio, puedes asignarles los siguientes roles
| Comentador | Puede comentar los Registros, pero no modificar datos. |
| Espectador | Puede ver, pero no comentar. |
-## Revisar el acceso a las Bases
+## Revisar el acceso a los Proyectos {#revisar-el-acceso-a-las-bases}
-Cada persona o departamento aparece una sola vez en la lista de colaboradores del Espacio, incluso si también tiene permisos en Bases concretas. Una insignia **Permisos de Base** junto al rol indica a cuántas Bases se le ha invitado. Las personas que nunca se hayan añadido al propio Espacio aparecen como **Solo tiene acceso a las Bases seleccionadas**.
+Cada persona o departamento aparece una sola vez en la lista de colaboradores del Espacio, incluso si también tiene permisos en Proyectos concretos. Una insignia **Permisos de Proyecto** junto al rol indica a cuántos Proyectos se le ha invitado. Las personas que nunca se hayan añadido al propio Espacio aparecen como **Solo tiene acceso a los Proyectos seleccionados**.
-Expande una fila para ver esas Bases y el rol que tiene en cada una. Desde ahí, **Eliminar acceso a la Base** retira un permiso de Base y **Eliminar colaborador**, en una fila correspondiente únicamente a una Base, retira todos los permisos de Base que esa persona tenga en el Espacio.
+Expande una fila para ver esos Proyectos y el rol que tiene en cada uno. Desde ahí, **Eliminar acceso al Proyecto** retira un permiso de Proyecto y **Eliminar colaborador**, en una fila correspondiente únicamente a un Proyecto, retira todos los permisos de Proyecto que esa persona tenga en el Espacio.
diff --git a/es/basic/space/space-permission.mdx b/es/basic/space/space-permission.mdx
index f2e6ad0e..e22ffd1d 100644
--- a/es/basic/space/space-permission.mdx
+++ b/es/basic/space/space-permission.mdx
@@ -1,20 +1,20 @@
---
title: "Detalles de los permisos de colaboración"
-description: "Esta sección describe el ámbito operativo de cuatro niveles de permisos distintos en Espacios y Bases."
+description: "Esta sección describe el ámbito operativo de cuatro niveles de permisos distintos en Espacios y Proyectos."
---
Teable ofrece un control de permisos más granular a nivel de Tabla, Campo y Registro. Consulta la sección [Matriz de Autoridad](/es/basic/authority-matrix).
-### Operaciones de la Base
+### Operaciones del Proyecto {#operaciones-de-la-base}
| Descripción | Creador/Gestor | Editor | Comentador | Espectador |
| ----------- | :------------: | :----: | :-------: | :----: |
-| Ver los datos de la Base | ✅ | ✅ | ✅ | ✅ |
+| Ver los datos del Proyecto | ✅ | ✅ | ✅ | ✅ |
| Invitar a usuarios con permisos iguales o inferiores | ✅ | ✅ | ✅ | ✅ |
| Crear o eliminar enlaces para compartir Vistas | ✅ | ✅ | | |
| Crear y editar Automatizaciones | ✅ | | | |
| Activar la Matriz de Autoridad | ✅ | | | |
-| Crear o eliminar enlaces de invitación para colaborar en la Base | ✅ | | | |
-| Renombrar la Base | ✅ | | | |
+| Crear o eliminar enlaces de invitación para colaborar en el Proyecto | ✅ | | | |
+| Renombrar el Proyecto | ✅ | | | |
### Operaciones de los Registros
@@ -51,12 +51,12 @@ description: "Esta sección describe el ámbito operativo de cuatro niveles de p
| Descripción | Gestor | Creador | Editor | Comentador | Espectador |
| ----------- | :-----: | :-----: | :----: | :-------: | :----: |
-| Acceder a todas las Bases del Espacio | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Acceder a todos los Proyectos del Espacio | ✅ | ✅ | ✅ | ✅ | ✅ |
| Invitar a usuarios con permisos iguales o inferiores | ✅ | ✅ | ✅ | ✅ | ✅ |
| Renombrar el Espacio | ✅ | ✅ | | | |
-| Añadir y eliminar Bases del Espacio | ✅ | ✅ | | | |
-| Reordenar las Bases dentro del Espacio | ✅ | ✅ | | | |
-| Mover Bases entre Espacios | ✅ | ✅ | | | |
+| Añadir y eliminar Proyectos del Espacio | ✅ | ✅ | | | |
+| Reordenar los Proyectos dentro del Espacio | ✅ | ✅ | | | |
+| Mover Proyectos entre Espacios | ✅ | ✅ | | | |
| Ajustar la configuración de facturación y mejorar el plan del Espacio | ✅ | | | | |
| Conceder permisos de Gestor | ✅ | | | | |
diff --git a/es/basic/table.mdx b/es/basic/table.mdx
index f157d8b8..ebb22be8 100644
--- a/es/basic/table.mdx
+++ b/es/basic/table.mdx
@@ -1,16 +1,16 @@
---
title: "Descripción general"
-description: "Crea, importa, comparte y administra Tablas en una Base."
+description: "Crea, importa, comparte y administra Tablas en un Proyecto."
---
{/* mintlify-resync: 2026-05-14 */}
-Cada Base puede contener varias Tablas para almacenar y administrar datos relacionados. Las Tablas de Teable equivalen a las tablas de una base de datos; comprender [en qué se diferencian de las hojas de cálculo](/es/compare/teable-vs-excel) te ayudará a aprovechar Teable al máximo.
+Cada Proyecto puede contener varias Tablas para almacenar y administrar datos relacionados. Las Tablas de Teable equivalen a las tablas de una base de datos; comprender [en qué se diferencian de las hojas de cálculo](/es/compare/teable-vs-excel) te ayudará a aprovechar Teable al máximo.
## Crear y administrar Tablas
### Añadir Tablas
-En una Base, haz clic en el botón `+` del directorio y elige una opción:
+En un Proyecto, haz clic en el botón `+` del directorio y elige una opción:
-Cuando otras Tablas enlazan con la Tabla que estás eliminando, el cuadro de diálogo de confirmación enumera los Campos afectados y la Base y la Tabla a las que pertenece cada uno. Al eliminar la Tabla, esos Campos de enlace se convierten en Campos de texto de una línea que conservan los títulos de los Registros enlazados; los Campos de búsqueda o acumulación creados a partir de ellos dejan de funcionar.
+Cuando otras Tablas enlazan con la Tabla que estás eliminando, el cuadro de diálogo de confirmación enumera los Campos afectados y el Proyecto y la Tabla a los que pertenece cada uno. Al eliminar la Tabla, esos Campos de enlace se convierten en Campos de texto de una línea que conservan los títulos de los Registros enlazados; los Campos de búsqueda o acumulación creados a partir de ellos dejan de funcionar.
### Papelera
-Haz clic en el icono de la Papelera situado en la esquina superior izquierda de la Base para administrar las Tablas eliminadas.
+Haz clic en el icono de la Papelera situado en la esquina superior izquierda del Proyecto para administrar las Tablas eliminadas.
-- **Restaurar**: devuelve la Tabla a la Base con todos sus datos intactos
+- **Restaurar**: devuelve la Tabla al Proyecto con todos sus datos intactos
- **Vaciar Papelera**: elimina permanentemente todas las Tablas de la Papelera
Restaurar una Tabla no deshace la conversión de los enlaces. Los Campos de enlace de otras Tablas siguen siendo Campos de texto, por lo que deberás volver a crearlos si quieres recuperar la conexión.
diff --git a/es/basic/table/import.mdx b/es/basic/table/import.mdx
index 9abfcc1a..04cb875d 100644
--- a/es/basic/table/import.mdx
+++ b/es/basic/table/import.mdx
@@ -4,7 +4,7 @@ description: "Importa en Teable datos de CSV, Excel, Airtable o Google Sheets."
---
{/* mintlify-resync: 2026-05-14 */}
-Utiliza la importación para inicializar una Tabla nueva, añadir datos a una Tabla existente o incorporar Tablas de Airtable o Google Sheets a una Base de Teable. Airtable y Google Sheets también están disponibles al importar una Base completa.
+Utiliza la importación para inicializar una Tabla nueva, añadir datos a una Tabla existente o incorporar Tablas de Airtable o Google Sheets a un Proyecto de Teable. Airtable y Google Sheets también están disponibles al importar un Proyecto completo.
Utiliza Connect Everything en el Chat de IA para migrar Airtable, Baserow, NocoDB, SmartSuite y otros sistemas a Teable.
@@ -72,16 +72,16 @@ Después de cargar el archivo, asigna sus columnas a los Campos de la Tabla de d
Si la integración con Airtable está configurada en tu instancia, puedes utilizar la importación desde Airtable de dos maneras:
-- Para crear una Base de Teable nueva, abre el menú del Espacio de destino, haz clic en **Importar** y elige **Importar desde Airtable**.
-- Para importar Tablas en la Base de Teable que estás consultando, utiliza el menú de recursos de la Base:
+- Para crear un Proyecto de Teable nuevo, abre el menú del Espacio de destino, haz clic en **Importar** y elige **Importar desde Airtable**.
+- Para importar Tablas en el Proyecto de Teable que estás consultando, utiliza el menú de recursos del Proyecto:
-1. Abre la Base de Teable de destino.
+1. Abre el Proyecto de Teable de destino.
2. Haz clic en `+` en la parte superior del directorio de la izquierda.
3. En **Agregar de otras fuentes**, elige **Airtable**.
@@ -99,8 +99,8 @@ Durante la importación, Teable muestra el progreso por Tabla. Si es necesario a
Comienza desde cualquiera de estos puntos de acceso:
-- Para crear una Base de Teable nueva, abre el menú del Espacio de destino, haz clic en **Importar** y elige **Importar desde Google Sheets**.
-- Para añadir Tablas a la Base que estás consultando, haz clic en `+` en la parte superior del directorio de la izquierda y elige **Google Sheets** en **Agregar de otras fuentes**.
+- Para crear un Proyecto de Teable nuevo, abre el menú del Espacio de destino, haz clic en **Importar** y elige **Importar desde Google Sheets**.
+- Para añadir Tablas al Proyecto que estás consultando, haz clic en `+` en la parte superior del directorio de la izquierda y elige **Google Sheets** en **Agregar de otras fuentes**.
@@ -113,7 +113,7 @@ Comienza desde cualquiera de estos puntos de acceso:
Cada pestaña se muestra como una tarjeta con su número de filas y columnas. Selecciona las pestañas que quieras. Desactiva **Importar Registros** si solo quieres obtener la estructura de los Campos sin los datos.
- Haz clic en **Iniciar importación** y mantén abierto el cuadro de diálogo. Este muestra el progreso Tabla por Tabla y, al finalizar, cuántos Registros ha recibido cada una. Después de importar una Base nueva, usa **Abrir Base** para ir directamente al resultado.
+ Haz clic en **Iniciar importación** y mantén abierto el cuadro de diálogo. Este muestra el progreso Tabla por Tabla y, al finalizar, cuántos Registros ha recibido cada una. Después de importar un Proyecto nuevo, usa **Abrir Proyecto** para ir directamente al resultado.
diff --git a/es/basic/view/toolbar.mdx b/es/basic/view/toolbar.mdx
index 8ea794e4..2db52588 100644
--- a/es/basic/view/toolbar.mdx
+++ b/es/basic/view/toolbar.mdx
@@ -148,9 +148,9 @@ Utiliza el interruptor `Ordenar Registros automáticamente` del menú de ordenac
## Compartir una Vista
-**Compartir vista** publica la Vista actual mediante un enlace. Los visitantes ven los datos y el diseño de esa Vista. Esto no equivale a invitarlos como colaboradores de la Base.
+**Compartir vista** publica la Vista actual mediante un enlace. Los visitantes ven los datos y el diseño de esa Vista. Esto no equivale a invitarlos como colaboradores del Proyecto.
-Para compartir una Base completa, una Tabla concreta o una carpeta, utiliza las opciones para compartir Bases descritas en [Base](/es/basic/base).
+Para compartir un Proyecto completo, una Tabla concreta o una carpeta, utiliza las opciones para compartir Proyectos descritas en [Proyecto](/es/basic/base).
| Opción para compartir | Uso recomendado |
| --- | --- |
@@ -240,5 +240,5 @@ Si la Vista está bloqueada o no tienes permiso para editarla, puedes seguir uti
## Notas
- Los cambios en los filtros, los grupos, la ordenación, los Campos visibles o la altura de las filas afectan a todos los usuarios de la Vista actual, salvo que estés en modo personal.
-- Compartir una Vista publica el resultado de la Vista actual, no todos los permisos de la Base. Para una colaboración continua, utiliza los permisos de miembros o las opciones para compartir la Base.
+- Compartir una Vista publica el resultado de la Vista actual, no todos los permisos del Proyecto. Para una colaboración continua, utiliza los permisos de miembros o las opciones para compartir el Proyecto.
- En ambos modos, las modificaciones de los valores de las celdas se sincronizan para todos.
diff --git a/es/deploy/env.mdx b/es/deploy/env.mdx
index d0b40b40..f07d226f 100644
--- a/es/deploy/env.mdx
+++ b/es/deploy/env.mdx
@@ -71,7 +71,7 @@ mode: "wide"
| BACKEND_MAIL_AUTH_USER | Nombre de usuario predeterminado para autenticar el servidor de correo | - | - | username |
| BACKEND_MAIL_AUTH_PASS | Contraseña predeterminada para autenticar el servidor de correo | - | - | usertoken |
| BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH | Longitud máxima del nombre de quien invita en los asuntos de los correos de invitación. Un valor vacío o 0 desactiva el truncamiento | - | - | 32 |
-| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Longitud máxima del nombre del Espacio o la Base en los asuntos de los correos de invitación. Un valor vacío o 0 desactiva el truncamiento | - | - | 32 |
+| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Longitud máxima del nombre del Espacio o el Proyecto en los asuntos de los correos de invitación. Un valor vacío o 0 desactiva el truncamiento | - | - | 32 |
| **Configuración de sesiones/JWT** | | | | |
| BACKEND_SESSION_EXPIRES_IN | Tiempo de expiración de la sesión | 7d | - | 7d |
| BACKEND_SESSION_COOKIE_SECURE | Indica si se protege la cookie de sesión | false | - | true |
@@ -93,7 +93,7 @@ mode: "wide"
| TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | Número máximo de Registros por mutación | 20000 | - | 20000 |
| TABLE_LIMIT_COMPUTED_CELL_VALUE_MAX_BYTES | Número máximo de bytes del valor de una celda calculada | 262144 | - | 262144 |
| TABLE_LIMIT_FORMULA_MAX_LENGTH | Longitud máxima de una fórmula | 8192 | - | 8192 |
-| TABLE_LIMIT_TABLES_PER_BASE_MAX | Número máximo de Tablas por Base | 1000 | - | 1000 |
+| TABLE_LIMIT_TABLES_PER_BASE_MAX | Número máximo de Tablas por Proyecto | 1000 | - | 1000 |
| TABLE_LIMIT_FIELDS_PER_TABLE_MAX | Número máximo de Campos por Tabla | 500 | - | 500 |
| TABLE_LIMIT_VIEWS_PER_TABLE_MAX | Número máximo de Vistas por Tabla | 100 | - | 100 |
| TABLE_LIMIT_CREATE_TABLE_FIELDS_MAX | Número máximo de Campos aceptados al crear una Tabla | 1000 | - | 1000 |
@@ -133,10 +133,10 @@ mode: "wide"
| TELEMETRY_REPORT_DISABLED | Desactiva el envío de telemetría autoalojada, incluidos los informes de cumplimiento de licencias de las instancias conectadas | false | - | true |
| **Configuración de la base de datos** | | | | |
| PRISMA_DATABASE_URL | URL de conexión a la base de datos; debe configurarse | - | Sí | postgresql://teable:teable@127.0.0.1:5432/teable |
-| PUBLIC_DATABASE_PROXY | Dirección de la base de datos accesible externamente (host:puerto) utilizada en las credenciales que genera el panel «Conexión de base de datos» de la Base; establécela para activar el acceso SQL externo de solo lectura | - | - | db.example.com:42345 |
+| PUBLIC_DATABASE_PROXY | Dirección de la base de datos accesible externamente (host:puerto) utilizada en las credenciales que genera el panel «Conexión de base de datos» del Proyecto; establécela para activar el acceso SQL externo de solo lectura | - | - | db.example.com:42345 |
| PRISMA_TRANSACTION_TIMEOUT | Tiempo máximo (ms) que puede ejecutarse una transacción antes de agotarse. Auméntalo para transacciones largas (por ejemplo, actualizaciones en bloque con muchas claves foráneas) | 5000 | - | 60000 |
| PRISMA_TRANSACTION_MAX_WAIT | Tiempo máximo (ms) de espera para obtener una transacción del grupo de conexiones | 2000 | - | 5000 |
-| BIG_TRANSACTION_TIMEOUT | Tiempo de espera (ms) para transacciones internas grandes, como la exportación de Bases grandes | 600000 | - | 1200000 |
+| BIG_TRANSACTION_TIMEOUT | Tiempo de espera (ms) para transacciones internas grandes, como la exportación de Proyectos grandes | 600000 | - | 1200000 |
## Secretos y rotación {#secrets-and-rotation}
diff --git a/fr/api-doc/get-id.mdx b/fr/api-doc/get-id.mdx
index 93ccaa8c..0de68f96 100644
--- a/fr/api-doc/get-id.mdx
+++ b/fr/api-doc/get-id.mdx
@@ -14,11 +14,11 @@ Cliquez sur l’Espace cible et copiez depuis l’URL la chaîne commençant par
## BaseId
-Cliquez sur la Base cible et copiez depuis l’URL la chaîne commençant par « bse », par exemple : `bseXXXXXXXXXX`
+Cliquez sur le Projet cible et copiez depuis l’URL la chaîne commençant par « bse », par exemple : `bseXXXXXXXXXX`
diff --git a/fr/api-doc/oauth.mdx b/fr/api-doc/oauth.mdx
index ce63543c..3e947de0 100644
--- a/fr/api-doc/oauth.mdx
+++ b/fr/api-doc/oauth.mdx
@@ -33,7 +33,7 @@ Les scopes définissent les actions que votre application OAuth peut effectuer.
| Ressource | Scopes |
|----------|--------|
| **Application** | `app\|create`, `app\|read`, `app\|update`, `app\|delete` |
-| **Base** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
+| **Projet** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
| **Table** | `table\|create`, `table\|delete`, `table\|export`, `table\|import`, `table\|read`, `table\|update`, `table\|trash_read`, `table\|trash_update`, `table\|trash_reset` |
| **Vue** | `view\|create`, `view\|delete`, `view\|read`, `view\|update` |
| **Champ** | `field\|create`, `field\|delete`, `field\|read`, `field\|update` |
@@ -296,14 +296,14 @@ curl https://app.teable.ai/api/table/TABLE_ID/record \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-En général, la première étape après l’obtention d’un jeton consiste à récupérer toutes les Bases accessibles à l’utilisateur actuel :
+En général, la première étape après l’obtention d’un jeton consiste à récupérer tous les Projets accessibles à l’utilisateur actuel :
```bash
curl https://app.teable.ai/api/base/access/all \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Ce point de terminaison renvoie toutes les Bases auxquelles l’utilisateur actuel est autorisé à accéder. Vous pouvez utiliser le `baseId` de la réponse pour les appels API suivants.
+Ce point de terminaison renvoie tous les Projets auxquels l’utilisateur actuel est autorisé à accéder. Vous pouvez utiliser le `baseId` de la réponse pour les appels API suivants.
## Actualiser les jetons d’accès
diff --git a/fr/api-doc/record/interface.mdx b/fr/api-doc/record/interface.mdx
index c84cbd01..4139c72d 100644
--- a/fr/api-doc/record/interface.mdx
+++ b/fr/api-doc/record/interface.mdx
@@ -2,7 +2,7 @@
title: "Interface des Champs d’Enregistrement"
---
-Le Champ de recherche n’est pas un type de Champ spécifique. Nous pouvons rechercher n’importe quel type de Champ depuis une Base liée. Le type d’un Champ de recherche est déterminé par le Champ d’origine dans la Base liée et possède la propriété isLookup. Les Champs de recherche ne peuvent pas être modifiés.
+Le Champ de recherche n’est pas un type de Champ spécifique. Nous pouvons rechercher n’importe quel type de Champ depuis un Projet lié. Le type d’un Champ de recherche est déterminé par le Champ d’origine dans le Projet lié et possède la propriété isLookup. Les Champs de recherche ne peuvent pas être modifiés.
Toutes les valeurs de retour de Champ peuvent avoir `isMultipleCellValue: true` dans certains cas :
diff --git a/fr/api-doc/sql-query.mdx b/fr/api-doc/sql-query.mdx
index ab416be9..311d4081 100644
--- a/fr/api-doc/sql-query.mdx
+++ b/fr/api-doc/sql-query.mdx
@@ -11,12 +11,12 @@ Teable vous permet de vous connecter à sa base de données PostgreSQL sous-jace
### Créer une connexion à la base de données
-1. **Ouvrir une Table** : commencez par ouvrir une Table de la Base à laquelle vous souhaitez vous connecter.
-2. **Accéder à la page de conception** : cliquez sur l’icône ⚙️ en haut à droite pour accéder à la page de conception de la Base.
+1. **Ouvrir une Table** : commencez par ouvrir une Table du Projet auquel vous souhaitez vous connecter.
+2. **Accéder à la page de conception** : cliquez sur l’icône ⚙️ en haut à droite pour accéder à la page de conception du Projet.
@@ -50,7 +50,7 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
**Remarque :** dans PostgreSQL, utilisez des guillemets doubles `"` autour des noms de schéma et de Table afin de préserver la sensibilité à la casse.
Pour écrire cette requête, vous devez connaître trois éléments :
-- **Nom du schéma (BaseId)** : l’identifiant de la Base commençant par `bse`
+- **Nom du schéma (BaseId)** : l’identifiant du Projet commençant par `bse`
- **Nom de la Table** : le nom physique de la Table dans PostgreSQL
- **Noms des Champs** : les noms réels des colonnes dans la base de données
@@ -58,27 +58,27 @@ Les sections suivantes expliquent comment trouver chacun d’eux.
### Trouver le BaseId (nom du schéma)
-Chaque Base dans Teable correspond à un **schéma** dans PostgreSQL. Le BaseId est le nom du schéma utilisé dans les requêtes SQL.
+Chaque Projet dans Teable correspond à un **schéma** dans PostgreSQL. Le BaseId est le nom du schéma utilisé dans les requêtes SQL.
**Méthode 1 :** consultez l’URL ; la chaîne commençant par `bse` est le BaseId.
-**Méthode 2 :** dans l’interface de conception de la Base, le nom de schéma affiché est le BaseId.
+**Méthode 2 :** dans l’interface de conception du Projet, le nom de schéma affiché est le BaseId.
### Trouver les noms de Tables
-Les noms de Tables dans l’interface Teable ne se synchronisent pas automatiquement avec les noms des Tables physiques de la base de données. Consultez l’interface de conception de la Base pour connaître le nom réel de la Table de base de données.
+Les noms de Tables dans l’interface Teable ne se synchronisent pas automatiquement avec les noms des Tables physiques de la base de données. Consultez l’interface de conception du Projet pour connaître le nom réel de la Table de base de données.
diff --git a/fr/api-doc/token.mdx b/fr/api-doc/token.mdx
index 324822d2..e1f7ddc5 100644
--- a/fr/api-doc/token.mdx
+++ b/fr/api-doc/token.mdx
@@ -15,7 +15,7 @@ Si vous créez une intégration multi-locataire destinée à des utilisateurs ex
3. Ajoutez les périmètres d’autorisation appropriés à votre jeton.
-4. Indiquez les Bases et les Espaces auxquels le jeton peut accéder.
+4. Indiquez les Projets et les Espaces auxquels le jeton peut accéder.
Une fois votre jeton créé, il ne sera affiché qu’une seule fois. Nous vous recommandons de le copier et de le conserver dans un emplacement sécurisé.
diff --git a/fr/basic/admin-panel/announcements.mdx b/fr/basic/admin-panel/announcements.mdx
index e812eb1e..39e0874b 100644
--- a/fr/basic/admin-panel/announcements.mdx
+++ b/fr/basic/admin-panel/announcements.mdx
@@ -15,7 +15,7 @@ Cliquez sur **Publier une annonce** et remplissez le formulaire. L’aperçu lat
| Paramètre | Ce qu’il contrôle |
| --- | --- |
-| **Formulaire** | L’emplacement de l’annonce : une **Bannière** en haut de l’application, un **Toast** sous forme de notification temporaire, une **Fenêtre modale** sous forme de boîte de dialogue interrompant le travail, ou une **Carte latérale** dans les barres latérales de l’Espace et de la Base. |
+| **Formulaire** | L’emplacement de l’annonce : une **Bannière** en haut de l’application, un **Toast** sous forme de notification temporaire, une **Fenêtre modale** sous forme de boîte de dialogue interrompant le travail, ou une **Carte latérale** dans les barres latérales de l’Espace et du Projet. |
| **Niveau** | Le ton affiché aux utilisateurs : **Info**, **Maintenance**, **Critique** ou **Résolu**. |
| Titre et **Corps** | Le texte de l’annonce. |
| **Commence le** / **Se termine le** | La période pendant laquelle l’annonce est diffusée. L’heure de fin doit être postérieure à l’heure de début. |
diff --git a/fr/basic/admin-panel/audit-log.mdx b/fr/basic/admin-panel/audit-log.mdx
index fe2bb3d5..b0b34a89 100644
--- a/fr/basic/admin-panel/audit-log.mdx
+++ b/fr/basic/admin-panel/audit-log.mdx
@@ -11,9 +11,9 @@ Le **Journal d’audit** permet aux administrateurs d’examiner l’activité d
## Éléments consultables
-Le journal d’audit couvre les activités courantes d’administration et de collaboration, notamment les Espaces, Bases, Tables, Vues, Champs, Enregistrements, le partage, les invitations, les jetons d’accès et la matrice d’autorisations.
+Le journal d’audit couvre les activités courantes d’administration et de collaboration, notamment les Espaces, Projets, Tables, Vues, Champs, Enregistrements, le partage, les invitations, les jetons d’accès et la matrice d’autorisations.
-Chaque entrée du journal affiche l’heure de l’opération, l’opérateur, le type d’action, la Base ou l’Espace associé et la source de la requête. Ouvrez une entrée du journal pour afficher ses détails.
+Chaque entrée du journal affiche l’heure de l’opération, l’opérateur, le type d’action, le Projet ou l’Espace associé et la source de la requête. Ouvrez une entrée du journal pour afficher ses détails.
## Agir sur un opérateur
@@ -30,10 +30,10 @@ Utilisez les filtres en haut de la page pour affiner la liste des journaux :
- **Sélectionner un opérateur** : affiche les actions effectuées par un utilisateur spécifique.
- **Sélectionner un Espace** : affiche l’activité au sein d’un Espace spécifique.
-- **Sélectionner une Base** : affiche l’activité associée à une Base spécifique.
-- **Sélectionner une action** : filtre par type d’opération, par exemple les Enregistrements, Champs, Vues, Tables, Bases, le partage, la matrice d’autorisations, les rôles de la matrice d’autorisations, les Espaces, les invitations, les utilisateurs et les jetons d’accès.
+- **Sélectionner un Projet** : affiche l’activité associée à un Projet spécifique.
+- **Sélectionner une action** : filtre par type d’opération, par exemple les Enregistrements, Champs, Vues, Tables, Projets, le partage, la matrice d’autorisations, les rôles de la matrice d’autorisations, les Espaces, les invitations, les utilisateurs et les jetons d’accès.
-Si un utilisateur, une Base ou un Espace a été supprimé, l’entrée reste dans le journal et la ressource est marquée comme supprimée.
+Si un utilisateur, un Projet ou un Espace a été supprimé, l’entrée reste dans le journal et la ressource est marquée comme supprimée.
## Parcourir de longues listes de journaux
diff --git a/fr/basic/admin-panel/computed-outbox.mdx b/fr/basic/admin-panel/computed-outbox.mdx
index 8f2780ad..094827b1 100644
--- a/fr/basic/admin-panel/computed-outbox.mdx
+++ b/fr/basic/admin-panel/computed-outbox.mdx
@@ -30,7 +30,7 @@ Chaque ligne correspond par défaut à une tâche et celle-ci change d’état s
Pour affiner la liste :
- Cliquez sur les tuiles d’état au-dessus de la table pour filtrer par état : **En attente**, **Active**, **Différée**, **Échouée**, **Terminée (conservée)**, etc. Vous pouvez en sélectionner plusieurs à la fois ; survolez une tuile pour connaître la signification de cet état.
-- Filtrez par **Espace**, **Base**, **Cause** ou **Résultat**, recherchez une tâche, une Base, un Espace ou une erreur, ou définissez un temps de traitement minimal pour faire apparaître les tâches lentes.
+- Filtrez par **Espace**, **Projet**, **Cause** ou **Résultat**, recherchez une tâche, un Projet, un Espace ou une erreur, ou définissez un temps de traitement minimal pour faire apparaître les tâches lentes.
- Cliquez sur une ligne pour ouvrir la **Traçabilité calculée** : horodatages de la file d’attente, délai de livraison, temps de traitement, raison complète de l’échec avec le SQL masqué d’une livraison échouée, et détails de propagation décrits ci-dessous.
**Terminée** ne signifie pas que la tâche a effectué un travail. Le badge de résultat indique ce que la livraison a réellement fait : **Traitée** a exécuté la tâche, **Aucune opération** n’a rien trouvé à faire, **Différée** l’a replanifiée pour plus tard et **Mise en attente** signifie que son périmètre est suspendu. Le filtre **Résultat** restreint la liste selon ce résultat et indique le nombre de livraisons couvertes par chacun ; associer **Terminée (conservée)** à **Traitée** ne conserve donc que les livraisons ayant réellement exécuté la tâche.
@@ -58,7 +58,7 @@ Lorsqu’une valeur calculée semble incorrecte ou est arrivée tardivement, ouv
Le nombre **Échouée** et **Maintenance des anomalies** indiquent différents types de problèmes ; leurs nombres peuvent donc différer.
-**Maintenance des anomalies** regroupe les anomalies par groupes de problèmes, un par Base, table source et erreur, ce qui permet d’identifier facilement une cause racine unique. Examinez la raison de l’échec et corrigez le problème sous-jacent avant toute récupération. Développez un groupe pour consulter les détails de son erreur et les tâches qu’il couvre ; ces lignes sont destinées à l’inspection et la récupération s’exécute toujours sur le groupe dans son ensemble.
+**Maintenance des anomalies** regroupe les anomalies par groupes de problèmes, un par Projet, table source et erreur, ce qui permet d’identifier facilement une cause racine unique. Examinez la raison de l’échec et corrigez le problème sous-jacent avant toute récupération. Développez un groupe pour consulter les détails de son erreur et les tâches qu’il couvre ; ces lignes sont destinées à l’inspection et la récupération s’exécute toujours sur le groupe dans son ensemble.
Les actions proposées par un groupe dépendent de son type :
@@ -70,7 +70,7 @@ Les actions proposées par un groupe dépendent de son type :
Après la récupération d’un groupe, Teable indique le nombre de tâches restaurées, celles nouvellement mises en file d’attente ou déjà dans la file, et celles livrées ou différées. Les workers consomment ensuite le groupe selon les limites actuelles de concurrence et de fractionnement des tâches.
-Un groupe marqué **Base supprimée** appartient à une Base qui n’existe plus. Sa récupération échouerait immédiatement à nouveau ; **Ignorer le groupe** est donc la seule action proposée.
+Un groupe marqué **Projet supprimé** appartient à un Projet qui n’existe plus. Sa récupération échouerait immédiatement à nouveau ; **Ignorer le groupe** est donc la seule action proposée.
Déplacer une table vers la corbeille ne crée plus d’anomalies ici. Une tâche calculée qui référence toujours une table placée dans la corbeille ignore les étapes qui la lisent, termine les étapes ciblant des tables actives, puis se termine.
@@ -101,9 +101,9 @@ La section de la file d’attente comporte deux contrôles de concurrence. Chacu
| Contrôle | Ce qu’il limite |
| --- | --- |
| **Concurrence par processus** | Nombre de tâches calculées que chaque processus worker traite simultanément. |
-| **Plafonds de prise en charge par Base** | Nombre de tâches calculées exécutées simultanément pour une Base (**Par Base**) et pour une table source au sein de celle-ci (**Par table initiale**). Les deux valeurs sont définies sur 2 par défaut et acceptent des valeurs de 1 à 16. |
+| **Plafonds de prise en charge par Projet** | Nombre de tâches calculées exécutées simultanément pour un Projet (**Par Projet**) et pour une table source au sein de celle-ci (**Par table initiale**). Les deux valeurs sont définies sur 2 par défaut et acceptent des valeurs de 1 à 16. |
-Augmentez les plafonds de prise en charge lorsqu’une Base très sollicitée constitue le goulot d’étranglement, et la concurrence par processus lorsque de nombreuses Bases sont mises en file d’attente simultanément.
+Augmentez les plafonds de prise en charge lorsqu’un Projet très sollicité constitue le goulot d’étranglement, et la concurrence par processus lorsque de nombreux Projets sont mis en file d’attente simultanément.
Une concurrence plus élevée accroît la charge sur votre base de données. Les Espaces qui stockent leurs données dans un [locataire de base de données](/fr/basic/admin-panel/database-tenant) conservent les valeurs par défaut de l’environnement pour les plafonds de prise en charge, car leurs pools de connexions sont dimensionnés pour ces valeurs.
diff --git a/fr/basic/admin-panel/database-tenant.mdx b/fr/basic/admin-panel/database-tenant.mdx
index 10711875..ec10ff8c 100644
--- a/fr/basic/admin-panel/database-tenant.mdx
+++ b/fr/basic/admin-panel/database-tenant.mdx
@@ -26,7 +26,7 @@ Depuis **Panneau d’administration** → **BYODB**, un administrateur d’insta
Non. Il désigne l’Espace Teable dont les données sont stockées dans cette base de données.
- Non. Il modifie l’emplacement où Teable stocke et gère ses propres données d’Espace. Vous fournissez une base de données PostgreSQL hébergée ailleurs, et Teable y crée et gère ses propres données. Les tables et Enregistrements existants dans cette base de données ne sont pas connectés à Teable et ne sont pas automatiquement importés comme Bases.
+ Non. Il modifie l’emplacement où Teable stocke et gère ses propres données d’Espace. Vous fournissez une base de données PostgreSQL hébergée ailleurs, et Teable y crée et gère ses propres données. Les tables et Enregistrements existants dans cette base de données ne sont pas connectés à Teable et ne sont pas automatiquement importés comme Projets.
diff --git a/fr/basic/admin-panel/multitenancy.mdx b/fr/basic/admin-panel/multitenancy.mdx
index 643d7838..ea80dffa 100644
--- a/fr/basic/admin-panel/multitenancy.mdx
+++ b/fr/basic/admin-panel/multitenancy.mdx
@@ -16,10 +16,10 @@ Une instance Teable peut contenir plusieurs locataires d’organisation, chacun
Instance Teable
├── Locataire d’organisation A
│ ├── Administrateurs, membres et services de l’organisation
-│ └── Espaces, Bases et paramètres au niveau de l’organisation
+│ └── Espaces, Projets et paramètres au niveau de l’organisation
├── Locataire d’organisation B
│ ├── Administrateurs, membres et services de l’organisation
-│ └── Espaces, Bases et paramètres au niveau de l’organisation
+│ └── Espaces, Projets et paramètres au niveau de l’organisation
└── Locataire d’organisation C
```
@@ -107,7 +107,7 @@ Depuis le sélecteur d’Espace, un administrateur d’organisation peut ouvrir
| --- | --- |
| **Utilisateurs** | Afficher et gérer les utilisateurs de l’organisation actuelle |
| **Organisation** | Créer, déplacer, renommer et supprimer des services, et gérer les membres des services |
-| **Gestion des Espaces** | Ajouter des Espaces à l’organisation ou les en retirer, et afficher les nombres d’Espaces et de Bases |
+| **Gestion des Espaces** | Ajouter des Espaces à l’organisation ou les en retirer, et afficher les nombres d’Espaces et de Projets |
| **Paramètres d’authentification** | Configurer les fournisseurs d’authentification tiers pour l’organisation |
| **Paramètres de sécurité** | Vérifier les domaines d’e-mail afin que les nouveaux utilisateurs utilisant ces domaines rejoignent automatiquement l’organisation |
| **Paramètres de l’instance** | Modifier le nom de l’organisation, l’accès automatique aux Espaces et le périmètre des services |
diff --git a/fr/basic/admin-panel/skills.mdx b/fr/basic/admin-panel/skills.mdx
index f0b4a9e8..39eb5b24 100644
--- a/fr/basic/admin-panel/skills.mdx
+++ b/fr/basic/admin-panel/skills.mdx
@@ -9,7 +9,7 @@ Chemin : Panneau d’administration → Compétences
Utilisez **Compétences** pour publier des compétences pour toute l’instance. Une compétence ajoutée ici est disponible dans chaque conversation du Chat IA, du Créateur d’applications et de bot ; utilisez-la donc pour les méthodes de travail que votre organisation doit partager par défaut, telles qu’un style rédactionnel interne, une convention de rapport ou une procédure d’intégration commune.
-Les compétences ajoutées par les utilisateurs ailleurs restent dans leur propre périmètre. Consultez [Chat IA](/fr/basic/ai/ai-chat) pour les compétences personnelles, de Base et d’Espace.
+Les compétences ajoutées par les utilisateurs ailleurs restent dans leur propre périmètre. Consultez [Chat IA](/fr/basic/ai/ai-chat) pour les compétences personnelles, de Projet et d’Espace.
## Ajouter une compétence
@@ -34,5 +34,5 @@ La liste regroupe les compétences par périmètre et indique la provenance de c
## Lorsqu’un nom est utilisé deux fois
-Une compétence publiée ici est la compétence par défaut de l’instance. Si une compétence de Base, d’Espace, personnelle, d’Application ou de bot utilise le même nom, la compétence au périmètre plus restreint s’applique à cette conversation et la compétence de l’instance y est ignorée.
+Une compétence publiée ici est la compétence par défaut de l’instance. Si une compétence de Projet, d’Espace, personnelle, d’Application ou de bot utilise le même nom, la compétence au périmètre plus restreint s’applique à cette conversation et la compétence de l’instance y est ignorée.
diff --git a/fr/basic/admin-panel/spaces.mdx b/fr/basic/admin-panel/spaces.mdx
index 7db10152..3d7d3a31 100644
--- a/fr/basic/admin-panel/spaces.mdx
+++ b/fr/basic/admin-panel/spaces.mdx
@@ -8,7 +8,7 @@ description: "Gérez tous les espaces de votre instance depuis le panneau d’ad
### Informations sur l’Espace
* **Nom de l’Espace** : le nom d’affichage de l’Espace
-* **Bases** : le nombre total de Bases contenues dans l’Espace
+* **Projets** : le nombre total de Projets contenues dans l’Espace
* **Collaborateurs** : le nombre total d’utilisateurs ayant accès à l’Espace
* **Date de création** : la date à laquelle l’Espace a été créé
* **Adhésion automatique** : indique si l’Espace permet aux nouveaux utilisateurs de le rejoindre automatiquement
@@ -26,7 +26,7 @@ description: "Gérez tous les espaces de votre instance depuis le panneau d’ad
Lorsque vous supprimez un Espace depuis le panneau d’administration :
* L’Espace est immédiatement marqué comme supprimé
-* Toutes les Bases et données de l’Espace deviennent inaccessibles
+* Tous les Projets et toutes les données de l’Espace deviennent inaccessibles
* Les collaborateurs perdent l’accès à l’Espace
* Cette opération est irréversible
diff --git a/fr/basic/admin-panel/table-query-ops.mdx b/fr/basic/admin-panel/table-query-ops.mdx
index fef1a9ce..0a2e7859 100644
--- a/fr/basic/admin-panel/table-query-ops.mdx
+++ b/fr/basic/admin-panel/table-query-ops.mdx
@@ -26,7 +26,7 @@ La page s’ouvre sur la liste des Tables. Les boutons d’état en haut portent
| **Non configurée** | Tables sans couverture de recherche. |
| **Indisponible** | Tables qui ne peuvent pas utiliser la recherche indexée pour l’instant. La ligne en indique la raison. |
-Le champ de recherche accepte les noms ou identifiants de Table, de Base et d’Espace. Le tri se fait par **Plus de requêtes lentes** ou par **Nom de Table**. La **Fenêtre d’observation** couvre la dernière heure ou 24 heures, et toutes les valeurs d’observation de la liste suivent cette fenêtre. Les observations sont conservées 2 jours ; au-delà, elles n’apparaissent plus dans la liste.
+Le champ de recherche accepte les noms ou identifiants de Table, de Projet et d’Espace. Le tri se fait par **Plus de requêtes lentes** ou par **Nom de Table**. La **Fenêtre d’observation** couvre la dernière heure ou 24 heures, et toutes les valeurs d’observation de la liste suivent cette fenêtre. Les observations sont conservées 2 jours ; au-delà, elles n’apparaissent plus dans la liste.
Chaque ligne donne le nombre de lignes et la taille estimés de la Table, les requêtes et requêtes lentes de la fenêtre, la méthode de recherche actuelle et la couverture des Champs, le nombre d’index de filtre/tri, ainsi que les recommandations en attente et les tâches actives. Cliquez sur le nom d’une Table pour ouvrir son détail.
diff --git a/fr/basic/admin-panel/template-admin.mdx b/fr/basic/admin-panel/template-admin.mdx
index af4d8b11..ee051fb9 100644
--- a/fr/basic/admin-panel/template-admin.mdx
+++ b/fr/basic/admin-panel/template-admin.mdx
@@ -1,6 +1,6 @@
---
title: "Administration des modèles"
-description: "Gérez les modèles de flux de travail de votre organisation afin de permettre aux utilisateurs de démarrer rapidement avec des Bases préconfigurées."
+description: "Gérez les modèles de flux de travail de votre organisation afin de permettre aux utilisateurs de démarrer rapidement avec des Projets préconfigurées."
---
Disponible avec le forfait Business auto-hébergé et les forfaits supérieurs
@@ -16,12 +16,12 @@ Dans l’interface Administration des modèles, vous pouvez créer et configurer
* **Description Markdown** : une description détaillée prenant en charge la mise en forme de texte enrichi
* **Catégorie** : regroupe les modèles par scénarios métier (par exemple, RH, ventes, ingénierie)
* **Système** : indique si le modèle est un modèle système officiel
-* **Source** : la Base d’origine utilisée pour créer ce modèle
+* **Source** : le Projet d’origine utilisée pour créer ce modèle
#### Opérations sur les modèles
* **Nouveau modèle** : crée une nouvelle configuration de modèle
-* **Publier un instantané** : capture l’état actuel de la Base source. Vous devez publier un instantané avant de pouvoir répertorier le modèle.
+* **Publier un instantané** : capture l’état actuel du Projet source. Vous devez publier un instantané avant de pouvoir répertorier le modèle.
* **Statut (Publier)** : active ou désactive l’affichage du modèle dans le centre de modèles. Nécessite un nom, une description et un instantané.
* **Épingler** : épingle les modèles importants en haut de la liste
* **Supprimer** : supprime la configuration du modèle
@@ -31,8 +31,8 @@ Dans l’interface Administration des modèles, vous pouvez créer et configurer
Les utilisateurs auto-hébergés peuvent importer des modèles depuis Teable Cloud officiel :
1. **Télécharger** : récupérez le fichier `.tea` dans le [Centre de modèles officiel](https://teable.ai/templates)
-2. **Importer** : importez le fichier `.tea` en tant que nouvelle Base dans votre Espace
+2. **Importer** : importez le fichier `.tea` en tant que nouveau Projet dans votre Espace
3. **Créer un modèle** : accédez à Administration des modèles > Nouveau modèle
-4. **Sélectionner la source** : choisissez la Base importée comme source
+4. **Sélectionner la source** : choisissez le Projet importée comme source
5. **Publier** : configurez les détails, publiez l’instantané et activez le statut
diff --git a/fr/basic/ai/ai-chat.mdx b/fr/basic/ai/ai-chat.mdx
index 18c7be3f..40313608 100644
--- a/fr/basic/ai/ai-chat.mdx
+++ b/fr/basic/ai/ai-chat.mdx
@@ -35,7 +35,7 @@ Lorsque vous collez un long bloc de texte brut, Teable le convertit en pièce jo
- **Mes secrets** : ouvrez **+** → **Plus** → **Mes secrets** pour enregistrer des clés API ou d’autres identifiants dans **Paramètres** → **Intégrations**. Ces valeurs vous appartiennent, le Chat IA peut les lire à l’exécution comme variables d’environnement, et vous pouvez les accorder à telle application ou telle automatisation. Voir [Identifiants et intégrations](/fr/basic/credential).
- **Demandes d’identifiants** : lorsque l’IA a besoin d’un compte tiers ou d’un secret, elle épingle une carte de demande dans la conversation. Choisissez **Connecter mon compte** pour lancer un parcours OAuth, ou accordez un identifiant que vous possédez déjà. **Ignorer** ne le fournit pas ; l’IA poursuit les parties qu’elle peut réaliser sans lui.
- **Scraper** : ouvrez le menu **+** et choisissez **Scraper**, puis une plateforme et un type de données. Les entrées sont de deux sortes : certaines extraient à partir d’un lien que vous collez, par exemple **profil personnel** sur LinkedIn ou **avis sur le produit** sur Amazon ; d’autres cherchent par mot-clé, hashtag ou nom, par exemple **recherche de vidéos** sur TikTok ou **publications d'un subreddit** sur Reddit. Teable pré-remplit l’instruction correspondante dans la saisie du chat et laisse à la fin la partie que vous devez compléter. **Page web quelconque** accepte directement un lien collé.
-- **Compétences** : ouvrez le menu **+** et choisissez **Compétences** pour importer, activer, désactiver ou essayer des compétences dans le chat actuel. Lors de l’importation, choisissez qui peut l’utiliser : **Personnel** la réserve à votre usage, **Base** la donne aux collaborateurs de cette base et **Espace** la donne à tous les membres de cet espace. Saisissez `/` dans le champ de saisie pour choisir une compétence activée. Pour connecter ou migrer un système externe, consultez [Tout connecter et migrer](/fr/basic/ai/connect-everything).
+- **Compétences** : ouvrez le menu **+** et choisissez **Compétences** pour importer, activer, désactiver ou essayer des compétences dans le chat actuel. Lors de l’importation, choisissez qui peut l’utiliser : **Personnel** la réserve à votre usage, **Projet** la donne aux collaborateurs de ce projet et **Espace** la donne à tous les membres de cet espace. Saisissez `/` dans le champ de saisie pour choisir une compétence activée. Pour connecter ou migrer un système externe, consultez [Tout connecter et migrer](/fr/basic/ai/connect-everything).
- **Utilisation du contexte** : l’anneau à côté du champ de saisie indique la part de la fenêtre de contexte du modèle actuellement utilisée par la conversation. Cliquez dessus pour afficher le pourcentage et le nombre de jetons. Lorsque le contexte est plein, Teable compacte la conversation ; démarrez un nouveau chat si vous souhaitez un contexte vierge.
- **Gérer les fichiers** : ouvrez **+** → **Plus** → **Gérer les fichiers** pour consulter les fichiers dans le bac à sable du chat actuel. Vous pouvez prévisualiser les fichiers pris en charge, télécharger des fichiers ou supprimer les fichiers et dossiers dont vous n’avez plus besoin. Une conversation doit exister avant que ses fichiers puissent être gérés.
- **File de messages** : envoyer un autre message pendant que l’IA travaille ne l’interrompt pas. Le message attend dans une file au-dessus du champ de saisie et est envoyé lorsque l’exécution actuelle se termine. Les éléments en attente conservent les mêmes pastilles de table, vue, pièce jointe et sélection que la saisie du chat ; **Supprimer** en retire un, **...** → **Modifier le message** le replace dans le champ de saisie, et un élément uniquement textuel propose aussi **Orienter** pour transmettre son texte à l’exécution en cours au lieu d’attendre.
@@ -129,9 +129,9 @@ Lorsqu’une réponse présente plusieurs fichiers à la fois, utilisez **Tout t
### Mémoire
-La mémoire stocke les informations dont vous demandez explicitement à Cuppy de se souvenir. La mémoire est définie par utilisateur et par Base : chaque utilisateur dans chaque Base dispose d’un contexte de mémoire indépendant, et la mémoire enregistrée dans une autre Base n’apparaît pas automatiquement dans la Base actuelle.
+La mémoire stocke les informations dont vous demandez explicitement à Cuppy de se souvenir. La mémoire est définie par utilisateur et par Projet : chaque utilisateur dans chaque Projet dispose d’un contexte de mémoire indépendant, et la mémoire enregistrée dans un autre Projet n’apparaît pas automatiquement dans le Projet actuel.
-- Enregistrer la mémoire dans la Base actuelle
+- Enregistrer la mémoire dans le Projet actuel
Indiquez dans la conversation ce dont Cuppy doit se souvenir :
@@ -139,12 +139,12 @@ Indiquez dans la conversation ce dont Cuppy doit se souvenir :
Veuillez mémoriser xxx.
```
-- Réutiliser la mémoire d’une autre Base
+- Réutiliser la mémoire d’un autre Projet
-Demandez à Cuppy de lire une autre Base et d’enregistrer les parties pertinentes dans la Base actuelle :
+Demandez à Cuppy de lire un autre Projet et d’enregistrer les parties pertinentes dans le Projet actuel :
```text
-Cuppy, veuillez lire la mémoire de la Base ID bsexxxxxxxxxxxx et enregistrer la mémoire pertinente dans cette Base actuelle.
+Cuppy, veuillez lire la mémoire du Projet portant l’ID bsexxxxxxxxxxxx et enregistrer la mémoire pertinente dans ce Projet actuel.
```
### Gérer les tâches longues
@@ -228,8 +228,8 @@ Ouvrez **+** → **Plus** → **Gérer les artefacts** pour parcourir tout ce qu
Saisissez `@` dans le champ de saisie et sélectionnez le nœud que vous souhaitez référencer dans le Chat IA. Pour les sélections dans la vue Grille, vous pouvez également sélectionner des lignes, des colonnes, une cellule ou une plage de cellules, puis utiliser **Ajouter au Chat** dans le menu contextuel.
-
- Oui. L’IA n’est pas limitée à la Base à laquelle appartient le chat ; elle peut rechercher les autres Bases auxquelles vous avez accès et y travailler. Nommez la Base dans votre demande, par exemple « comparer cette table avec la table des commandes dans la Base Ventes ». `@` répertorie uniquement les nœuds de la Base actuelle, et tout ce que vous ne dirigez pas ailleurs se produit toujours dans la Base propre au chat.
+
+ Oui. L’IA n’est pas limitée au Projet auquel appartient le chat ; elle peut rechercher les autres Projets auxquels vous avez accès et y travailler. Nommez le Projet dans votre demande, par exemple « comparer cette table avec la table des commandes dans le Projet Ventes ». `@` répertorie uniquement les nœuds du Projet actuel, et tout ce que vous ne dirigez pas ailleurs se produit toujours dans le Projet propre au chat.
@@ -239,8 +239,8 @@ Ouvrez **+** → **Plus** → **Gérer les artefacts** pour parcourir tout ce qu
Pas par défaut. Vous seul pouvez ouvrir vos propres artefacts. Activez **Activer le partage** dans la visionneuse et envoyez le lien, en choisissant **Membres de l’espace** si l’artefact doit rester dans l’espace.
-
- Non. La mémoire est définie par utilisateur et par Base. Si vous souhaitez réutiliser la mémoire d’une autre Base, demandez à Cuppy de lire la mémoire de cette Base et d’enregistrer les parties pertinentes dans la Base actuelle.
+
+ Non. La mémoire est définie par utilisateur et par Projet. Si vous souhaitez réutiliser la mémoire d’un autre Projet, demandez à Cuppy de lire la mémoire de ce Projet et d’enregistrer les parties pertinentes dans le Projet actuel.
@@ -268,11 +268,11 @@ Ouvrez **+** → **Plus** → **Gérer les artefacts** pour parcourir tout ce qu
- Ouvrez le menu **+** et choisissez **Compétences** pour importer ou gérer des compétences, ou saisissez `/` dans le champ de saisie pour choisir une compétence activée. Lors de l’importation, choisissez qui peut utiliser la compétence : personnel pour vos propres chats, base lorsque les collaborateurs de la même Base en ont besoin, et espace lorsque tous les membres de l’espace doivent l’utiliser. Les utilisateurs qui peuvent gérer la Base peuvent ajouter des compétences de Base, et les propriétaires et créateurs d’espace peuvent ajouter des compétences d’espace. Si le Chat IA présente un fichier `.skill`, utilisez **Installer** sur la carte de fichier pour l’ajouter.
+ Ouvrez le menu **+** et choisissez **Compétences** pour importer ou gérer des compétences, ou saisissez `/` dans le champ de saisie pour choisir une compétence activée. Lors de l’importation, choisissez qui peut utiliser la compétence : personnel pour vos propres chats, projet lorsque les collaborateurs du même Projet en ont besoin, et espace lorsque tous les membres de l’espace doivent l’utiliser. Les utilisateurs qui peuvent gérer le Projet peuvent ajouter des compétences de Projet, et les propriétaires et créateurs d’espace peuvent ajouter des compétences d’espace. Si le Chat IA présente un fichier `.skill`, utilisez **Installer** sur la carte de fichier pour l’ajouter.
- Une seule version est toujours active, et la version d’équipe partagée l’emporte sur une copie personnelle : une compétence de Base prévaut sur une compétence d’espace, et une compétence d’espace prévaut sur une compétence personnelle. Dans une conversation d’application ou de bot, la compétence ajoutée pour cette application ou ce bot est prioritaire. Pour faire passer tout le monde à une nouvelle version, mettez à jour la copie dans la Base ou l’espace.
+ Une seule version est toujours active, et la version d’équipe partagée l’emporte sur une copie personnelle : une compétence de Projet prévaut sur une compétence d’espace, et une compétence d’espace prévaut sur une compétence personnelle. Dans une conversation d’application ou de bot, la compétence ajoutée pour cette application ou ce bot est prioritaire. Pour faire passer tout le monde à une nouvelle version, mettez à jour la copie dans le Projet ou l’espace.
diff --git a/fr/basic/ai/app-builder.mdx b/fr/basic/ai/app-builder.mdx
index 38fbc79a..30bf3c8f 100644
--- a/fr/basic/ai/app-builder.mdx
+++ b/fr/basic/ai/app-builder.mdx
@@ -5,21 +5,21 @@ description: Transformez vos données en applications web personnalisées grâce
Disponible avec toutes les offres Cloud ; l’auto-hébergement nécessite l’offre Business ou une offre supérieure.
-Le Créateur d’applications Teable vous permet de transformer vos bases de données en applications web personnalisées entièrement fonctionnelles, sans écrire de code. En associant la puissance de votre structure de données à une conception guidée par l’IA, vous pouvez lancer des outils internes, des portails clients et des tableaux de bord de données en quelques minutes.
+Le Créateur d’applications Teable vous permet de transformer vos projets en applications web personnalisées entièrement fonctionnelles, sans écrire de code. En associant la puissance de votre structure de données à une conception guidée par l’IA, vous pouvez lancer des outils internes, des portails clients et des tableaux de bord de données en quelques minutes.
## Présentation
Le Créateur d’applications suit un flux de travail « Prompt to App ». Vous décrivez ce que vous souhaitez, et l’IA crée pour vous la structure, les pages et la logique de l’application. Vous pouvez ensuite affiner chaque détail avec l’éditeur visuel ou le code.
-Utilisez le Créateur d’applications pour créer des interfaces personnalisées et des applications autonomes. Pour l’analyse interactive de données et les questions ponctuelles dans la base de données, utilisez [Chat IA](/fr/basic/ai/ai-chat).
+Utilisez le Créateur d’applications pour créer des interfaces personnalisées et des applications autonomes. Pour l’analyse interactive de données et les questions ponctuelles dans le Projet, utilisez [Chat IA](/fr/basic/ai/ai-chat).
## Créer une application
Il existe deux principales façons de créer une application :
-1. **Depuis une Base** : dans n’importe quelle Base, cliquez sur « Créer une application » pour générer une application liée à vos données actuelles.
+1. **Depuis un Projet** : dans n’importe quel Projet, cliquez sur « Créer une application » pour générer une application liée à vos données actuelles.
2. **Depuis le chat** : ouvrez Chat IA et dites « Crée une application CRM pour cette Table de clients ».
## Interface de l’éditeur d’application
@@ -37,7 +37,7 @@ Le centre de commande de votre application.
- **Modification en langage naturel** : décrivez des changements tels que *« Rends l’en-tête bleu »* ou *« Ajoute un formulaire de soumission pour les nouveaux Enregistrements »*.
- **Routage automatique** : l’IA comprend le composant ou la page auquel vous faites référence et le modifie directement.
- **Intégrations** : lorsqu’une tâche de l’application nécessite l’accès à un compte tiers, le Créateur d’applications peut afficher une carte telle que **Connecter Slack** dans le panneau de chat. Cliquez sur **Connecter** pour autoriser OAuth. Cliquez sur **Ignorer** pour annuler cette autorisation ; l’IA poursuit les parties qu’elle peut réaliser sans cette connexion.
-- **Compétences** : ouvrez le menu **+** et choisissez **Compétences** pour gérer les compétences de cette conversation d’application. Une compétence ajoutée ici est disponible uniquement pour l’application actuelle ; les compétences partagées avec la Base et l’Espace de l’application peuvent également être utilisées ici. Saisissez `/` dans le champ de saisie pour choisir une compétence activée.
+- **Compétences** : ouvrez le menu **+** et choisissez **Compétences** pour gérer les compétences de cette conversation d’application. Une compétence ajoutée ici est disponible uniquement pour l’application actuelle ; les compétences partagées avec le Projet et l’Espace de l’application peuvent également être utilisées ici. Saisissez `/` dans le champ de saisie pour choisir une compétence activée.
- **Gérer les fichiers** : ouvrez **+** → **Plus** → **Gérer les fichiers** pour afficher les fichiers dans le bac à sable de l’application. Utilisez cette option pour prévisualiser les fichiers pris en charge, télécharger les fichiers générés ou supprimer les fichiers et dossiers dont vous n’avez plus besoin.
- **Effacer la conversation** : si la conversation actuelle s’est écartée du sujet, cliquez sur **Effacer le chat** dans l’angle inférieur droit du panneau pour démarrer une nouvelle session. Cela efface l’historique de chat de la conversation actuelle, mais ne supprime pas l’application elle-même. Lors de la première utilisation, une confirmation s’affiche et vous pouvez choisir de ne plus l’afficher la prochaine fois.
diff --git a/fr/basic/ai/connect-everything/migrate-airtable.mdx b/fr/basic/ai/connect-everything/migrate-airtable.mdx
index d44335c8..b23fc0f3 100644
--- a/fr/basic/ai/connect-everything/migrate-airtable.mdx
+++ b/fr/basic/ai/connect-everything/migrate-airtable.mdx
@@ -13,7 +13,7 @@ Dans le [**Chat IA de Teable**](/fr/basic/ai/ai-chat), saisissez `/` et sélecti
## Démarrer la migration
1. Créez un [jeton d’accès personnel Airtable](https://airtable.com/create/tokens) donnant accès aux Bases que vous souhaitez migrer.
-2. Ouvrez la Base Teable cible et lancez le Chat IA.
+2. Ouvrez le Projet Teable cible et lancez le Chat IA.
3. Saisissez `/`, sélectionnez **Connecter tout**, puis fournissez le jeton.
4. Demandez à l’IA de Teable de migrer la Base Airtable, puis examinez le résultat.
diff --git a/fr/basic/ai/connect-everything/migrate-baserow.mdx b/fr/basic/ai/connect-everything/migrate-baserow.mdx
index a0de6f46..b1b08750 100644
--- a/fr/basic/ai/connect-everything/migrate-baserow.mdx
+++ b/fr/basic/ai/connect-everything/migrate-baserow.mdx
@@ -13,7 +13,7 @@ Utilisez **Connecter tout** dans le [Chat IA de Teable](/fr/basic/ai/ai-chat) po
## Démarrer la migration
1. Copiez l’URL de l’instance Baserow et créez un [jeton de base de données Baserow](https://baserow.io/user-docs/personal-api-tokens) avec un accès en lecture aux Tables source.
-2. Ouvrez la Base Teable cible et lancez le Chat IA.
+2. Ouvrez le Projet Teable cible et lancez le Chat IA.
3. Saisissez `/`, sélectionnez **Connecter tout**, puis fournissez l’URL de l’instance et le jeton de base de données.
4. Demandez à l’IA de Teable de migrer la base de données Baserow, puis examinez le résultat.
diff --git a/fr/basic/ai/connect-everything/migrate-clickup.mdx b/fr/basic/ai/connect-everything/migrate-clickup.mdx
index 7b98e996..35601d1b 100644
--- a/fr/basic/ai/connect-everything/migrate-clickup.mdx
+++ b/fr/basic/ai/connect-everything/migrate-clickup.mdx
@@ -16,7 +16,7 @@ Dans le [**Chat IA de Teable**](/fr/basic/ai/ai-chat), saisissez `/` et sélecti
## Démarrer la migration
1. Dans ClickUp, ouvrez **Settings → Apps**, puis copiez votre jeton API personnel. Consultez le [guide d’authentification de ClickUp](https://developer.clickup.com/docs/authentication).
-2. Ouvrez la Base Teable cible et lancez le Chat IA.
+2. Ouvrez le Projet Teable cible et lancez le Chat IA.
3. Saisissez `/`, sélectionnez **Connecter tout**, puis fournissez le jeton API personnel.
4. Demandez à l’IA de Teable de migrer les espaces de travail ClickUp accessibles et de créer les Vues de projet, tableaux de bord et Automatisations dont votre équipe a besoin.
diff --git a/fr/basic/ai/connect-everything/migrate-jira.mdx b/fr/basic/ai/connect-everything/migrate-jira.mdx
index 66063c77..8f2b2377 100644
--- a/fr/basic/ai/connect-everything/migrate-jira.mdx
+++ b/fr/basic/ai/connect-everything/migrate-jira.mdx
@@ -16,7 +16,7 @@ Dans le [**Chat IA de Teable**](/fr/basic/ai/ai-chat), saisissez `/` et sélecti
## Démarrer la migration
1. Créez un [jeton API Atlassian](https://id.atlassian.com/manage-profile/security/api-tokens) pour un compte ayant accès aux projets Jira que vous souhaitez migrer. Consultez l’[authentification de base pour les API REST d’Atlassian](https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/).
-2. Ouvrez la Base Teable cible et lancez le Chat IA.
+2. Ouvrez le Projet Teable cible et lancez le Chat IA.
3. Saisissez `/`, sélectionnez **Connecter tout**, puis fournissez l’URL du site Jira Cloud, l’e-mail du compte et le jeton API.
4. Demandez à l’IA de Teable de migrer les projets Jira accessibles et de créer les Vues de projet, tableaux de bord et Automatisations dont votre équipe a besoin.
diff --git a/fr/basic/ai/connect-everything/migrate-monday.mdx b/fr/basic/ai/connect-everything/migrate-monday.mdx
index 3ce71d4b..db0d1020 100644
--- a/fr/basic/ai/connect-everything/migrate-monday.mdx
+++ b/fr/basic/ai/connect-everything/migrate-monday.mdx
@@ -16,7 +16,7 @@ Dans le [**Chat IA de Teable**](/fr/basic/ai/ai-chat), saisissez `/` et sélecti
## Démarrer la migration
1. Dans monday.com, ouvrez le menu de votre profil, choisissez **Developers**, puis copiez votre jeton API personnel. Consultez le [guide d’authentification API de monday.com](https://developer.monday.com/api-reference/docs/authentication).
-2. Ouvrez la Base Teable cible et lancez le Chat IA.
+2. Ouvrez le Projet Teable cible et lancez le Chat IA.
3. Saisissez `/`, sélectionnez **Connecter tout**, puis fournissez le jeton API personnel.
4. Demandez à l’IA de Teable de migrer les espaces de travail monday.com accessibles et de créer les Vues de projet, tableaux de bord et Automatisations dont votre équipe a besoin.
diff --git a/fr/basic/ai/connect-everything/migrate-nocodb.mdx b/fr/basic/ai/connect-everything/migrate-nocodb.mdx
index 4da053a5..67a42a8b 100644
--- a/fr/basic/ai/connect-everything/migrate-nocodb.mdx
+++ b/fr/basic/ai/connect-everything/migrate-nocodb.mdx
@@ -13,7 +13,7 @@ Utilisez **Connecter tout** dans le [Chat IA de Teable](/fr/basic/ai/ai-chat) po
## Démarrer la migration
1. Copiez l’URL de l’instance NocoDB et créez un [jeton API NocoDB](https://nocodb.com/docs/product-docs/account-settings/api-tokens) avec accès à la Base source.
-2. Ouvrez la Base Teable cible et lancez le Chat IA.
+2. Ouvrez le Projet Teable cible et lancez le Chat IA.
3. Saisissez `/`, sélectionnez **Connecter tout**, puis fournissez l’URL de l’instance et le jeton API.
4. Demandez à l’IA de Teable de migrer la Base NocoDB, puis examinez le résultat.
diff --git a/fr/basic/ai/connect-everything/migrate-smartsheet.mdx b/fr/basic/ai/connect-everything/migrate-smartsheet.mdx
index ba62bc40..d9d46573 100644
--- a/fr/basic/ai/connect-everything/migrate-smartsheet.mdx
+++ b/fr/basic/ai/connect-everything/migrate-smartsheet.mdx
@@ -16,7 +16,7 @@ Dans le [**Chat IA de Teable**](/fr/basic/ai/ai-chat), saisissez `/` et sélecti
## Démarrer la migration
1. Dans Smartsheet, ouvrez **Account → Personal Settings → API Access**, puis générez un jeton d’accès. Consultez le [guide de prise en main de l’API Smartsheet](https://developers.smartsheet.com/api/smartsheet/guides/getting-started).
-2. Ouvrez la Base Teable cible et lancez le Chat IA.
+2. Ouvrez le Projet Teable cible et lancez le Chat IA.
3. Saisissez `/`, sélectionnez **Connecter tout**, puis fournissez le jeton d’accès et l’environnement du compte : standard, Regions Europe ou Gov.
4. Demandez à l’IA de Teable de migrer les espaces de travail Smartsheet accessibles et de créer les Vues de projet, tableaux de bord et Automatisations dont votre équipe a besoin.
diff --git a/fr/basic/ai/connect-everything/migrate-smartsuite.mdx b/fr/basic/ai/connect-everything/migrate-smartsuite.mdx
index 74525262..5d31a754 100644
--- a/fr/basic/ai/connect-everything/migrate-smartsuite.mdx
+++ b/fr/basic/ai/connect-everything/migrate-smartsuite.mdx
@@ -13,7 +13,7 @@ Utilisez **Connecter tout** dans le [Chat IA de Teable](/fr/basic/ai/ai-chat) po
## Démarrer la migration
1. Obtenez votre [clé API SmartSuite et ID d’espace de travail](https://help.smartsuite.com/en/articles/6096587-retrieving-your-api-key-and-workspace-id).
-2. Ouvrez la Base Teable cible et lancez le Chat IA.
+2. Ouvrez le Projet Teable cible et lancez le Chat IA.
3. Saisissez `/`, sélectionnez **Connecter tout**, puis fournissez la clé API et l’ID d’espace de travail.
4. Demandez à l’IA de Teable de migrer la solution SmartSuite, puis examinez le résultat.
diff --git a/fr/basic/ai/overview.mdx b/fr/basic/ai/overview.mdx
index 01b3b444..3f1f5b52 100644
--- a/fr/basic/ai/overview.mdx
+++ b/fr/basic/ai/overview.mdx
@@ -45,7 +45,7 @@ Teable intègre de puissantes capacités d’IA dans toute la plateforme pour vo
1. **Activer l’IA** (auto-hébergé uniquement) - Teable Cloud inclut une IA intégrée prête à l’emploi. Les utilisateurs auto-hébergés doivent d’abord terminer les [Paramètres d’IA](/fr/basic/admin-panel/ai-setting). Si vous souhaitez connecter vos propres modèles, poursuivez avec [Modèle d’IA personnalisé](/fr/basic/ai/custom-model).
2. **Utiliser le Chat IA** - Posez des questions sur vos données ou générez des graphiques
-3. **Créer des applications** - Transformez votre Base en application web avec une simple invite
+3. **Créer des applications** - Transformez votre Projet en application web avec une simple invite
4. **Créer des Champs IA** - Ajoutez des Champs alimentés par l’IA pour traiter automatiquement vos données
5. **Créer des automatisations** - Utilisez les actions Génération IA et Exécuter un script dans vos flux de travail
diff --git a/fr/basic/ai/teable-skill.mdx b/fr/basic/ai/teable-skill.mdx
index b9b4174a..b3dec587 100644
--- a/fr/basic/ai/teable-skill.mdx
+++ b/fr/basic/ai/teable-skill.mdx
@@ -24,7 +24,7 @@ Une fois la compétence installée, essayez ces invites.
```text Invites simples pour débuter wrap
-Créez une Table CRM simple dans {collez l’URL de la Base}.
+Créez une Table CRM simple dans {collez l’URL du Projet}.
```
```text Fichiers locaux → Teable wrap
diff --git a/fr/basic/authority-matrix.mdx b/fr/basic/authority-matrix.mdx
index 20941cdd..0e319322 100644
--- a/fr/basic/authority-matrix.mdx
+++ b/fr/basic/authority-matrix.mdx
@@ -1,13 +1,13 @@
---
title: "Présentation"
-description: "Définissez des périmètres d’accès pour différentes équipes dans la même base, afin que les membres ne puissent voir, modifier ou exporter que les données dont ils ont besoin."
+description: "Définissez des périmètres d’accès pour différentes équipes dans le même projet, afin que les membres ne puissent voir, modifier ou exporter que les données dont ils ont besoin."
---
{/* mintlify-resync: 2026-05-28 */}
Disponible avec le forfait Business et les forfaits supérieurs
-Lorsque les équipes commerciales, financières, opérationnelles et de direction partagent la même base,
-les autorisations déterminent qui peut accéder à la base, quelles données chacun peut consulter ou modifier,
+Lorsque les équipes commerciales, financières, opérationnelles et de direction partagent le même projet,
+les autorisations déterminent qui peut accéder au projet, quelles données chacun peut consulter ou modifier,
et si les données peuvent être importées ou exportées. La Matrice d’autorité aide les équipes
à centraliser les données tout en séparant les accès selon les responsabilités.
@@ -24,7 +24,7 @@ et la direction peut consulter l’ensemble des données.
| Accès au niveau des départements | L’équipe commerciale peut gérer les fiches clients, tandis que l’équipe financière ne voit que les champs de facturation. |
| Enregistrements basés sur l’attribution | Les commerciaux peuvent uniquement consulter et mettre à jour les enregistrements qui leur sont attribués. |
| Saisie de données restreinte | Les membres peuvent créer de nouveaux enregistrements sans modifier ni supprimer les enregistrements existants. |
-| Champs sensibles dans une base partagée | Les membres peuvent consulter les enregistrements de commande sans voir les champs de paiement ou de coût. |
+| Champs sensibles dans un projet partagé | Les membres peuvent consulter les enregistrements de commande sans voir les champs de paiement ou de coût. |
| Applications et workflows contrôlés | Les rôles peuvent ouvrir les applications ou workflows sélectionnés, tandis que les nœuds non autorisés restent masqués. |
## Fonctionnement des autorisations
@@ -45,7 +45,7 @@ La liste des rôles comprend une section `Administrateurs` et une section `Rôle
Utilisez `Ajouter un rôle` pour créer un rôle personnalisé. Dans la page de détail du rôle, attribuez
des collaborateurs, rédigez une courte description et configurez l’accès à chaque nœud de
-la base :
+le projet :
Pour en savoir plus sur les niveaux d’autorisation de base des Espaces et des bases, consultez les [Autorisations de collaboration](/fr/basic/space/space-permission).
+Pour en savoir plus sur les niveaux d’autorisation de projet des Espaces et des projets, consultez les [Autorisations de collaboration](/fr/basic/space/space-permission).
diff --git a/fr/basic/authority-matrix/authority-matrix-practical-guide.mdx b/fr/basic/authority-matrix/authority-matrix-practical-guide.mdx
index c081388d..0a175ade 100644
--- a/fr/basic/authority-matrix/authority-matrix-practical-guide.mdx
+++ b/fr/basic/authority-matrix/authority-matrix-practical-guide.mdx
@@ -4,9 +4,9 @@ description: "Configurez des rôles de Matrice d’autorité pour une équipe co
---
{/* mintlify-resync: 2026-05-28 */}
-Ce guide utilise une base commerciale composée de trois tables : `Clients`, `Commandes clients`
+Ce guide utilise un projet commerciale composée de trois tables : `Clients`, `Commandes clients`
et `Produits`. L’objectif est de permettre à chaque rôle de travailler avec les données dont il a besoin
-sans exposer l’ensemble de la base.
+sans exposer l’ensemble du projet.
| Rôle | Objectif d’accès |
| --- | --- |
@@ -26,7 +26,7 @@ sans exposer l’ensemble de la base.
- Ouvrez la page de la Matrice d’autorité dans la base et activez l’interrupteur principal. L’utilisateur
+ Ouvrez la page de la Matrice d’autorité dans le projet et activez l’interrupteur principal. L’utilisateur
qui l’active est ajouté comme administrateur.
diff --git a/fr/basic/automation.mdx b/fr/basic/automation.mdx
index 87e2c930..e75f9848 100644
--- a/fr/basic/automation.mdx
+++ b/fr/basic/automation.mdx
@@ -65,8 +65,8 @@ Les tentatives de relance sont marquées comme réessais et renvoient à l’ex
| Élément | Limite |
|---|---|
-| Débit d’envoi d’e-mails | 5 / seconde / base |
-| Débit de réception des webhooks | 50 / seconde / base, 2 / seconde / workflow |
+| Débit d’envoi d’e-mails | 5 / seconde / projet |
+| Débit de réception des webhooks | 50 / seconde / projet, 2 / seconde / workflow |
| Taille de la charge utile du webhook | 4 MB |
| Quota d’exécutions et conservation de l’historique | Varie selon le forfait |
@@ -82,7 +82,7 @@ Les tentatives de relance sont marquées comme réessais et renvoient à l’ex
Teable Cloud peut également envoyer des notifications critiques en cas d’utilisation inhabituelle, telle qu’une forte hausse quotidienne ou une augmentation soudaine sur une courte période. Le système utilise les tendances récentes d’exécution quotidiennes et horaires, et les seuils exacts peuvent changer.
- La notification ouvre **Paramètres de l’Espace** → **Facturation**. Lorsqu’elles sont disponibles, elle indique quel workflow et quelle Base ont contribué au plus grand nombre d’exécutions. Les rappels de quota sont basés sur les exécutions comptabilisées dans la limite de votre forfait ; les vérifications d’utilisation inhabituelle peuvent également prendre en compte les exécutions récentes avec l’état **success**, **failed** ou **pending**.
+ La notification ouvre **Paramètres de l’Espace** → **Facturation**. Lorsqu’elles sont disponibles, elle indique quel workflow et quel Projet ont contribué au plus grand nombre d’exécutions. Les rappels de quota sont basés sur les exécutions comptabilisées dans la limite de votre forfait ; les vérifications d’utilisation inhabituelle peuvent également prendre en compte les exécutions récentes avec l’état **success**, **failed** ou **pending**.
Si l’utilisation est attendue, envisagez d’acheter un quota d’automatisation supplémentaire ou de changer de forfait. Si elle est inattendue, examinez le principal workflow et ajustez ou suspendez l’automatisation concernée.
diff --git a/fr/basic/automation/actions/communication/send-email-overview.mdx b/fr/basic/automation/actions/communication/send-email-overview.mdx
index ccc107b4..f8d29c71 100644
--- a/fr/basic/automation/actions/communication/send-email-overview.mdx
+++ b/fr/basic/automation/actions/communication/send-email-overview.mdx
@@ -37,7 +37,7 @@ Par défaut, les e-mails sont envoyés depuis le service de messagerie intégré
\* Au moins l’un des champs **À** ou **CCI** est obligatoire.
-**Limite de débit :** 5 e-mails/seconde/base.
+**Limite de débit :** 5 e-mails/seconde/projet.
## Configuration de l’action
diff --git a/fr/basic/automation/actions/records/create-record.mdx b/fr/basic/automation/actions/records/create-record.mdx
index 72dd72dc..cc5c098d 100644
--- a/fr/basic/automation/actions/records/create-record.mdx
+++ b/fr/basic/automation/actions/records/create-record.mdx
@@ -30,7 +30,7 @@ Crée un nouvel enregistrement dans une table donnée. Vous pouvez associer les
## Configuration de l’action
1. Ajoutez une action **Créer un enregistrement** à votre workflow.
-2. Choisissez la **Table** dans laquelle créer l’enregistrement. Par défaut, il s’agit d’une table de la même base, mais vous pouvez utiliser l’[Accès inter-base](/fr/basic/automation/actions/records/cross-base) pour cibler une table d’une autre base.
+2. Choisissez la **Table** dans laquelle créer l’enregistrement. Par défaut, il s’agit d’une table du même projet, mais vous pouvez utiliser l’[Accès inter-projet](/fr/basic/automation/actions/records/cross-base) pour cibler une table d’un autre projet.
3. La zone d’association des champs affiche tous les champs de la table cible. Pour chaque champ à remplir :
- **Valeur fixe :** saisissez directement une valeur dans le champ (par exemple, « Nouveau » pour un champ Statut).
- **Valeur dynamique :** cliquez sur le bouton **+** près du champ pour insérer une variable provenant d’une étape précédente. Par exemple, insérez le champ « Nom » du déclencheur pour copier le nom de l’enregistrement déclencheur.
@@ -68,11 +68,11 @@ Cette fonction est utile pour enchaîner des actions. Par exemple : créez un en
- Vous pouvez créer des enregistrements en masse en associant cette action à [Boucle (traitement par lots)](../logic/loop-run). Par exemple, récupérez 50 enregistrements d’une table et créez 50 enregistrements correspondants dans une autre.
- Les champs non associés utilisent les valeurs par défaut de la table, le cas échéant, ou restent vides.
- Les champs d’enregistrements liés attendent des ID d’enregistrement, et non des valeurs d’affichage. Pour créer un lien vers un enregistrement, veillez à transmettre son ID, et non son nom.
-- Utilisez l’[Accès inter-base](/fr/basic/automation/actions/records/cross-base) lorsque la table cible se trouve dans une autre base que l’automatisation.
+- Utilisez l’[Accès inter-projet](/fr/basic/automation/actions/records/cross-base) lorsque la table cible se trouve dans un autre projet que l’automatisation.
## Pages connexes
- [Mettre à jour un enregistrement](/fr/basic/automation/actions/records/update-record) — modifiez des enregistrements existants au lieu d’en créer
- [Obtenir des enregistrements](/fr/basic/automation/actions/records/get-records) — récupérez des enregistrements à utiliser comme données d’entrée pour en créer de nouveaux
-- [Accès inter-base](/fr/basic/automation/actions/records/cross-base) — créez des enregistrements dans des tables extérieures à la base actuelle
+- [Accès inter-projet](/fr/basic/automation/actions/records/cross-base) — créez des enregistrements dans des tables extérieures au projet actuel
- [Boucle (traitement par lots)](../logic/loop-run) — créez plusieurs enregistrements au cours d’une seule étape d’action
diff --git a/fr/basic/automation/actions/records/cross-base.mdx b/fr/basic/automation/actions/records/cross-base.mdx
index 9e9c46e3..21f46149 100644
--- a/fr/basic/automation/actions/records/cross-base.mdx
+++ b/fr/basic/automation/actions/records/cross-base.mdx
@@ -1,6 +1,6 @@
---
-title: "Accès inter-base"
-description: "Lisez et écrivez des données dans différentes bases au sein d’un même workflow"
+title: "Accès inter-projet"
+description: "Lisez et écrivez des données dans différents projets au sein d’un même workflow"
---
{/* mintlify-resync: 2026-05-26 */}
@@ -10,74 +10,74 @@ Nous vous recommandons vivement d’utiliser Exécuter un script pour créer des
Remarque : si vous ajoutez des actions manuellement, l’IA ne pourra ni les reconnaître ni les modifier par la suite.
-Par défaut, les actions d’automatisation agissent sur les tables de la base propre au workflow. L’Accès inter-base permet à un workflow de lire et d’écrire dans une autre base. Utilisez-le pour des workflows couvrant plusieurs services, projets ou jeux de données.
+Par défaut, les actions d’automatisation agissent sur les tables du projet propre au workflow. L’Accès inter-projet permet à un workflow de lire et d’écrire dans un autre projet. Utilisez-le pour des workflows couvrant plusieurs services, projets ou jeux de données.
-Par exemple, une automatisation d’une base Ventes peut créer un enregistrement de traitement dans une base Opérations distincte, ou un workflow de reporting peut regrouper les données de plusieurs bases de projets dans un même récapitulatif.
+Par exemple, une automatisation d’un projet Ventes peut créer un enregistrement de traitement dans un projet Opérations distinct, ou un workflow de reporting peut regrouper les données de plusieurs projets dans un même récapitulatif.
## Actions prises en charge
-| Action | Prise en charge inter-base |
+| Action | Prise en charge inter-projet |
|---|---|
| Créer un enregistrement | Oui |
| Mettre à jour un enregistrement | Oui |
| Obtenir des enregistrements | Oui |
-Il s’agit des trois actions qui ciblent les enregistrements. Les autres actions (Envoyer un e-mail, Requête HTTP, etc.) n’ont pas besoin d’un accès inter-base, car elles ne ciblent pas une table donnée.
+Il s’agit des trois actions qui ciblent les enregistrements. Les autres actions (Envoyer un e-mail, Requête HTTP, etc.) n’ont pas besoin d’un accès inter-projet, car elles ne ciblent pas une table donnée.
## Configuration
1. Ouvrez dans votre workflow une action prise en charge (Créer un enregistrement, Mettre à jour un enregistrement ou Obtenir des enregistrements).
-2. À côté du sélecteur de **Table**, cliquez sur **Accès inter-base**.
-3. Un panneau affiche tous les espaces et toutes les bases auxquels votre compte a accès. Sélectionnez l’**Espace** cible, puis la **Base** cible.
-4. Choisissez la **Table** dans cette base. Si l’action le permet, vous pouvez également sélectionner une **Vue** précise.
-5. Associez les champs et configurez l’action comme d’habitude. La liste des champs correspond désormais à ceux de la table cible, et non à ceux de la base actuelle.
+2. À côté du sélecteur de **Table**, cliquez sur **Accès inter-projet**.
+3. Un panneau affiche tous les espaces et tous les projets auxquels votre compte a accès. Sélectionnez l’**Espace** cible, puis le **Projet** cible.
+4. Choisissez la **Table** dans ce projet. Si l’action le permet, vous pouvez également sélectionner une **Vue** précise.
+5. Associez les champs et configurez l’action comme d’habitude. La liste des champs correspond désormais à ceux de la table cible, et non à ceux du projet actuel.
6. Enregistrez l’action.
## Exemple concret : des ventes au traitement des commandes
-Imaginez que vous disposiez de deux bases :
+Imaginez que vous disposiez de deux projets :
-- **Base Ventes** — contient une table « Affaires » dans laquelle l’équipe commerciale suit les affaires conclues.
-- **Base Opérations** — contient une table « Traitement » dans laquelle l’équipe opérationnelle gère les expéditions.
+- **Projet Ventes** — contient une table « Affaires » dans laquelle l’équipe commerciale suit les affaires conclues.
+- **Projet Opérations** — contient une table « Traitement » dans laquelle l’équipe opérationnelle gère les expéditions.
Vous souhaitez créer automatiquement un enregistrement de traitement lorsqu’une affaire est conclue :
-1. **Déclencheur :** dans la Base Ventes, utilisez « Lorsqu’un enregistrement remplit les conditions » avec le filtre : `Étape` est égale à `Gagnée`.
-2. **Action :** Créer un enregistrement avec un Accès inter-base pointant vers la table Traitement de la Base Opérations.
+1. **Déclencheur :** dans le Projet Ventes, utilisez « Lorsqu’un enregistrement remplit les conditions » avec le filtre : `Étape` est égale à `Gagnée`.
+2. **Action :** Créer un enregistrement avec un Accès inter-projet pointant vers la table Traitement du Projet Opérations.
3. **Association des champs :** associez le Nom du client, le Produit, la Quantité et l’Adresse de livraison de l’affaire aux champs correspondants de la table Traitement.
-Désormais, chaque fois qu’une affaire est conclue, un enregistrement de traitement est automatiquement créé dans la Base Opérations, sans transfert manuel.
+Désormais, chaque fois qu’une affaire est conclue, un enregistrement de traitement est automatiquement créé dans le Projet Opérations, sans transfert manuel.
## Modèle d’autorisations
-Lorsque vous créez, modifiez ou appliquez des mises à jour de workflow, Teable vérifie chaque action inter-base par rapport aux autorisations de l’éditeur actuel :
+Lorsque vous créez, modifiez ou appliquez des mises à jour de workflow, Teable vérifie chaque action inter-projet par rapport aux autorisations de l’éditeur actuel :
-| Action | Autorisation requise sur la base cible |
+| Action | Autorisation requise sur le projet cible |
|---|---|
| Obtenir des enregistrements | Lire les champs et les enregistrements |
| Créer un enregistrement | Lire les champs et les enregistrements, et créer des enregistrements |
| Mettre à jour un enregistrement | Lire les champs et les enregistrements, et mettre à jour des enregistrements |
-Les exécutions du workflow actif utilisent l’identité d’exécution des automatisations de Teable pour la base cible. Les enregistrements créés ou mis à jour par une action inter-base apparaissent comme **Robot d’automatisation** dans les métadonnées des enregistrements et les interfaces d’audit.
+Les exécutions du workflow actif utilisent l’identité d’exécution des automatisations de Teable pour le projet cible. Les enregistrements créés ou mis à jour par une action inter-projet apparaissent comme **Robot d’automatisation** dans les métadonnées des enregistrements et les interfaces d’audit.
### Lorsque les accès changent
-Si l’éditeur actuel ne dispose pas de l’autorisation requise sur la base cible, Teable l’empêche d’ajouter ou de modifier des actions inter-base pointant vers cette base. Si un brouillon contient déjà des actions inter-base auxquelles l’éditeur ne peut pas accéder, Teable l’empêche également d’appliquer ce brouillon. La version déjà active continue de s’exécuter ; Teable vérifie de nouveau les autorisations lors de la prochaine modification ou application du workflow.
+Si l’éditeur actuel ne dispose pas de l’autorisation requise sur le projet cible, Teable l’empêche d’ajouter ou de modifier des actions inter-projet pointant vers ce projet. Si un brouillon contient déjà des actions inter-projet auxquelles l’éditeur ne peut pas accéder, Teable l’empêche également d’appliquer ce brouillon. La version déjà active continue de s’exécuter ; Teable vérifie de nouveau les autorisations lors de la prochaine modification ou application du workflow.
Pour corriger une erreur d’autorisation lors de la modification ou de l’application d’un workflow :
-1. Demandez à une personne ayant accès aux deux bases de modifier et d’appliquer le workflow.
-2. Ou rétablissez les autorisations requises sur la base cible, puis appliquez de nouveau le workflow.
+1. Demandez à une personne ayant accès aux deux projets de modifier et d’appliquer le workflow.
+2. Ou rétablissez les autorisations requises sur le projet cible, puis appliquez de nouveau le workflow.
## Conseils
-- L’accès inter-base peut atteindre des bases situées dans différents **Espaces**. L’éditeur qui configure ou applique le workflow doit disposer des autorisations requises sur la base cible.
-- Lors de l’association de champs entre plusieurs bases, les types de champs doivent être compatibles. Par exemple, vous ne pouvez pas associer un champ de texte à un champ de pièce jointe.
-- Si vous restructurez une base cible (renommage de tables, suppression de champs), les actions inter-base qui référencent ces tables et champs cesseront de fonctionner. Mettez à jour votre workflow après toute modification structurelle.
-- Pour les workflows inter-base complexes, envisagez de centraliser vos automatisations dans une base « centrale » afin de faciliter leur organisation.
+- L’accès inter-projet peut atteindre des projets situés dans différents **Espaces**. L’éditeur qui configure ou applique le workflow doit disposer des autorisations requises sur le projet cible.
+- Lors de l’association de champs entre plusieurs projets, les types de champs doivent être compatibles. Par exemple, vous ne pouvez pas associer un champ de texte à un champ de pièce jointe.
+- Si vous restructurez un projet cible (renommage de tables, suppression de champs), les actions inter-projet qui référencent ces tables et champs cesseront de fonctionner. Mettez à jour votre workflow après toute modification structurelle.
+- Pour les workflows inter-projet complexes, envisagez de centraliser vos automatisations dans un projet « central » afin de faciliter leur organisation.
## Pages connexes
-- [Créer un enregistrement](/fr/basic/automation/actions/records/create-record) — créez des enregistrements dans la base actuelle ou une autre base
-- [Mettre à jour un enregistrement](/fr/basic/automation/actions/records/update-record) — mettez à jour des enregistrements dans la base actuelle ou une autre base
-- [Obtenir des enregistrements](/fr/basic/automation/actions/records/get-records) — récupérez des enregistrements depuis la base actuelle ou une autre base
+- [Créer un enregistrement](/fr/basic/automation/actions/records/create-record) — créez des enregistrements dans le projet actuel ou un autre projet
+- [Mettre à jour un enregistrement](/fr/basic/automation/actions/records/update-record) — mettez à jour des enregistrements dans le projet actuel ou un autre projet
+- [Obtenir des enregistrements](/fr/basic/automation/actions/records/get-records) — récupérez des enregistrements depuis le projet actuel ou un autre projet
diff --git a/fr/basic/automation/actions/records/get-records.mdx b/fr/basic/automation/actions/records/get-records.mdx
index 5220bdd5..0d1e46ab 100644
--- a/fr/basic/automation/actions/records/get-records.mdx
+++ b/fr/basic/automation/actions/records/get-records.mdx
@@ -33,7 +33,7 @@ Récupère les enregistrements d’une table et les renvoie sous forme de tablea
## Configuration de l’action
1. Ajoutez une action **Obtenir des enregistrements** à votre workflow.
-2. Choisissez la **Table** à interroger. Utilisez l’[Accès inter-base](/fr/basic/automation/actions/records/cross-base) si la table se trouve dans une autre base.
+2. Choisissez la **Table** à interroger. Utilisez l’[Accès inter-projet](/fr/basic/automation/actions/records/cross-base) si la table se trouve dans un autre projet.
3. (Facultatif) Sélectionnez une **Vue** pour hériter de ses paramètres de filtre, de tri et de visibilité des champs.
4. (Facultatif) Ajoutez des conditions de **Filtre** pour affiner les résultats. Par exemple, `Statut` est égal à `Actif` et `Date d’échéance` est antérieure à aujourd’hui.
5. (Facultatif) Définissez **Ignorer** et **Prendre** pour la pagination. Par exemple, Ignorer 0 et Prendre 100 pour récupérer les 100 premiers enregistrements.
@@ -80,11 +80,11 @@ Pour traiter une grande table entière, vous pouvez utiliser plusieurs étapes O
- Obtenir des enregistrements ne modifie aucune donnée : cette action est en lecture seule.
- Si la requête ne renvoie aucun enregistrement, les étapes suivantes qui référencent les résultats reçoivent un tableau vide. Veillez à ce que votre workflow gère correctement ce cas (par exemple, n’envoyez pas un e-mail annonçant « voici vos résultats » s’il n’y en a aucun).
- Les filtres d’Obtenir des enregistrements fonctionnent comme ceux des vues : vous pouvez combiner les conditions avec une logique ET/OU.
-- Lors de l’utilisation de l’Accès inter-base, la requête s’exécute avec les autorisations du créateur du workflow. Si celui-ci perd l’accès à la base cible, l’étape échoue.
+- Lors de l’utilisation de l’Accès inter-projet, la requête s’exécute avec les autorisations du créateur du workflow. Si celui-ci perd l’accès au projet cible, l’étape échoue.
## Pages connexes
-- [Accès inter-base](/fr/basic/automation/actions/records/cross-base) — interrogez des tables situées dans d’autres bases
+- [Accès inter-projet](/fr/basic/automation/actions/records/cross-base) — interrogez des tables situées dans d’autres projets
- [Boucle (traitement par lots)](../logic/loop-run) — parcourez le tableau de résultats
- [Créer un enregistrement](/fr/basic/automation/actions/records/create-record) — créez des enregistrements à partir des données récupérées
- [Mettre à jour un enregistrement](/fr/basic/automation/actions/records/update-record) — mettez à jour les enregistrements trouvés par Obtenir des enregistrements
diff --git a/fr/basic/automation/actions/records/update-record.mdx b/fr/basic/automation/actions/records/update-record.mdx
index 36caaccd..8d5318e2 100644
--- a/fr/basic/automation/actions/records/update-record.mdx
+++ b/fr/basic/automation/actions/records/update-record.mdx
@@ -93,11 +93,11 @@ Si votre automatisation est déclenchée par **Lorsqu’un enregistrement est mi
- La mise à jour d’un enregistrement peut déclencher d’autres automatisations surveillant la même table. Tenez compte des effets en cascade.
- Lorsque vous mettez à jour plusieurs enregistrements avec des ID séparés par des virgules, tous reçoivent les mêmes valeurs de champ. Pour appliquer des valeurs différentes à chacun, utilisez plutôt une étape [Boucle](../logic/loop-run).
- Pour effacer un champ, associez-le à une valeur vide. Le laisser simplement sans association ne l’effacera *pas*.
-- Utilisez l’[Accès inter-base](/fr/basic/automation/actions/records/cross-base) pour mettre à jour les enregistrements d’une table située dans une autre base.
+- Utilisez l’[Accès inter-projet](/fr/basic/automation/actions/records/cross-base) pour mettre à jour les enregistrements d’une table située dans un autre projet.
## Pages connexes
- [Créer un enregistrement](/fr/basic/automation/actions/records/create-record) — ajoutez de nouveaux enregistrements au lieu de modifier ceux qui existent
- [Obtenir des enregistrements](/fr/basic/automation/actions/records/get-records) — récupérez des enregistrements afin de trouver leurs ID avant une mise à jour
-- [Accès inter-base](/fr/basic/automation/actions/records/cross-base) — mettez à jour des enregistrements dans des tables extérieures à la base actuelle
+- [Accès inter-projet](/fr/basic/automation/actions/records/cross-base) — mettez à jour des enregistrements dans des tables extérieures au projet actuel
- [Boucle (traitement par lots)](../logic/loop-run) — mettez à jour plusieurs enregistrements avec des valeurs différentes
diff --git a/fr/basic/automation/ai/scripting/runscript.mdx b/fr/basic/automation/ai/scripting/runscript.mdx
index f7906683..896f050e 100644
--- a/fr/basic/automation/ai/scripting/runscript.mdx
+++ b/fr/basic/automation/ai/scripting/runscript.mdx
@@ -210,7 +210,7 @@ output.set("records", data);
### Appeler l’IA depuis un script
-`POST /api/automation/runtime/ai` envoie un prompt au modèle d’IA de votre base. La base est déterminée par le contexte de l’automatisation ; aucun ID de base n’est donc nécessaire. Le corps accepte `prompt`, ainsi que les paramètres facultatifs `attachments`, `modelKey`, `temperature` et `outputType` ; la réponse est `{ "message": ... }`.
+`POST /api/automation/runtime/ai` envoie un prompt au modèle d’IA de votre projet. Le projet est déterminée par le contexte de l’automatisation ; aucun ID de projet n’est donc nécessaire. Le corps accepte `prompt`, ainsi que les paramètres facultatifs `attachments`, `modelKey`, `temperature` et `outputType` ; la réponse est `{ "message": ... }`.
Les pièces jointes sont des éléments `{ url, mimetype, name }`, dans la limite de 10 par appel, chacun inférieur à 20 Mo et téléchargeable en moins de 30 secondes. Elles peuvent être des images, des PDF ou des documents Office. Le modèle de chat par défaut peut ne pas lire les images et pièces jointes similaires ; transmettez donc `modelKey` lorsque vous envoyez des fichiers. Chaque appel consomme des crédits.
diff --git a/fr/basic/automation/examples/api-automation.mdx b/fr/basic/automation/examples/api-automation.mdx
index dd779080..9fee495b 100644
--- a/fr/basic/automation/examples/api-automation.mdx
+++ b/fr/basic/automation/examples/api-automation.mdx
@@ -17,7 +17,7 @@ L’IA créera automatiquement le workflow complet. Vous pourrez examiner le scr
## Prérequis
- Un jeton d’accès personnel (PAT). Consultez [Jeton d’accès](/fr/api-doc/token).
-- L’ID de votre base, l’ID de votre table et les ID de vos champs. Consultez [Obtenir les ID](/fr/api-doc/get-id).
+- L’ID de votre projet, l’ID de votre table et les ID de vos champs. Consultez [Obtenir les ID](/fr/api-doc/get-id).
## Fonctions utilitaires
@@ -74,7 +74,7 @@ await api("PUT", `/base/${baseId}/workflow/${wf.id}/active`, {
## Bonnes pratiques
-- Utilisez le PAT disposant des privilèges minimaux : limitez-le aux espaces et bases nécessaires.
+- Utilisez le PAT disposant des privilèges minimaux : limitez-le aux espaces et projets nécessaires.
- Stockez les jetons dans des variables d’environnement ; ne les inscrivez jamais directement dans le code.
- Utilisez **Tester le nœud** pour effectuer une vérification avant l’activation.
- Consultez la [Référence complète de l’API Automation](/fr/api-reference/automation/put-base-workflow-action).
diff --git a/fr/basic/automation/examples/cross-base-sync.mdx b/fr/basic/automation/examples/cross-base-sync.mdx
index 0513b163..bfd21045 100644
--- a/fr/basic/automation/examples/cross-base-sync.mdx
+++ b/fr/basic/automation/examples/cross-base-sync.mdx
@@ -1,6 +1,6 @@
---
-title: "Synchroniser les enregistrements entre plusieurs bases"
-description: "Répliquez automatiquement les enregistrements nouveaux ou mis à jour dans une autre base grâce à l’accès inter-base"
+title: "Synchroniser les enregistrements entre plusieurs projets"
+description: "Répliquez automatiquement les enregistrements nouveaux ou mis à jour dans un autre projet grâce à l’accès inter-projet"
---
Nous vous recommandons de créer les exemples d’automatisation directement dans le Chat IA. Décrivez simplement le flux de travail souhaité : l’IA se chargera de toute la configuration, y compris du déclencheur, des actions, du script et des paramètres.
@@ -9,18 +9,18 @@ description: "Répliquez automatiquement les enregistrements nouveaux ou mis à
Ouvrez le Chat IA dans la barre latérale droite de votre table et indiquez à l’IA ce que vous souhaitez. Par exemple, vous pouvez dire :
-*"Lorsqu’une nouvelle commande est créée dans la base Ventes, crée un enregistrement correspondant dans la base Traitement des commandes avec l’identifiant de commande, le nom du client, le montant et le statut défini sur En attente"*
+*"Lorsqu’une nouvelle commande est créée dans le projet Ventes, crée un enregistrement correspondant dans le projet Traitement des commandes avec l’identifiant de commande, le nom du client, le montant et le statut défini sur En attente"*
L’IA créera automatiquement le flux de travail complet. Vous pourrez examiner le script généré, le tester avec des données réelles et activer le flux de travail lorsqu’il sera prêt.
## Configuration manuelle
-1. **Créez un flux de travail** dans la base **Ventes** avec le déclencheur **Lorsqu’un enregistrement est créé**.
+1. **Créez un flux de travail** dans le projet **Ventes** avec le déclencheur **Lorsqu’un enregistrement est créé**.
2. Sélectionnez votre table **Commandes**.
3. Cliquez sur **Tester**.
4. **Ajoutez une action** → **Créer un enregistrement**.
-5. Cliquez sur **Accès inter-base** à côté du sélecteur de table.
-6. Accédez à la base **Traitement des commandes** et sélectionnez la table **Commandes**.
+5. Cliquez sur **Accès inter-projet** à côté du sélecteur de table.
+6. Accédez au projet **Traitement des commandes** et sélectionnez la table **Commandes**.
7. Associez les champs :
- Identifiant de commande → Identifiant de commande du déclencheur (via **+**)
- Client → Client du déclencheur
@@ -31,6 +31,6 @@ L’IA créera automatiquement le flux de travail complet. Vous pourrez examiner
## Synchronisation bidirectionnelle
Pour synchroniser les mises à jour dans les deux sens :
-1. Créez un second flux de travail dans la base **Traitement des commandes**.
-2. Utilisez **Lorsqu’un enregistrement est mis à jour** → **Mettre à jour l’enregistrement**, avec l’accès inter-base pointant vers la base Ventes.
+1. Créez un second flux de travail dans le projet **Traitement des commandes**.
+2. Utilisez **Lorsqu’un enregistrement est mis à jour** → **Mettre à jour l’enregistrement**, avec l’accès inter-projet pointant vers le projet Ventes.
3. Utilisez un filtre pour éviter les boucles infinies : par exemple, ne déclenchez le flux de travail que lorsque certains champs changent et vérifiez que la valeur est effectivement différente avant de la mettre à jour.
diff --git a/fr/basic/automation/trigger/external/webhook-received.mdx b/fr/basic/automation/trigger/external/webhook-received.mdx
index 8cb6a7a5..dc4fcc7c 100644
--- a/fr/basic/automation/trigger/external/webhook-received.mdx
+++ b/fr/basic/automation/trigger/external/webhook-received.mdx
@@ -78,7 +78,7 @@ Vous pouvez à tout moment faire repasser **Réponse** à **Par défaut** pour r
## Tester votre webhook
-La méthode la plus simple consiste à utiliser `curl` depuis la ligne de commande. Copiez l’URL réelle depuis le panneau du déclencheur plutôt que de la saisir manuellement : elle contient les identifiants de la base et du flux de travail.
+La méthode la plus simple consiste à utiliser `curl` depuis la ligne de commande. Copiez l’URL réelle depuis le panneau du déclencheur plutôt que de la saisir manuellement : elle contient les identifiants du projet et du flux de travail.
**Sans autorisation :**
@@ -120,7 +120,7 @@ Après l’envoi d’une requête de test, consultez l’historique d’exécuti
| Portée | Limite |
|---|---|
-| Par base | 50 requêtes/seconde |
+| Par projet | 50 requêtes/seconde |
| Par flux de travail | 2 requêtes/seconde |
Les requêtes qui dépassent la limite de débit reçoivent une réponse HTTP 429. Si votre système externe envoie des rafales de requêtes, envisagez de mettre en œuvre une logique de nouvelle tentative avec délai exponentiel.
diff --git a/fr/basic/base.mdx b/fr/basic/base.mdx
index e05c1381..3bcf3699 100644
--- a/fr/basic/base.mdx
+++ b/fr/basic/base.mdx
@@ -1,42 +1,44 @@
---
title: "Vue d’ensemble"
-description: "Créez, gérez, importez et exportez des bases. Déplacez des données entre les Espaces Teable Cloud ou migrez entre des instances Cloud et auto-hébergées à l’aide de fichiers .tea."
+description: "Créez, gérez, importez et exportez des projets. Déplacez des données entre les Espaces Teable Cloud ou migrez entre des instances Cloud et auto-hébergées à l’aide de fichiers .tea."
---
{/* mintlify-resync: 2026-05-26 */}
-Une Base est un outil permettant de stocker et de traiter toutes les informations d’un projet spécifique. Chaque Espace peut contenir plusieurs Bases, et chaque Base peut fonctionner indépendamment, en fournissant une structure d’information claire pour des projets spécifiques ou des collections de Tables.
+Un projet regroupe des tables, des applications et des automatisations liées. Chaque Espace peut contenir plusieurs projets, avec leurs propres ressources et autorisations de collaboration.
-Pour les utilisateurs qui ne connaissent pas les Bases, vous pouvez les considérer comme des classeurs Excel, chaque classeur pouvant contenir plusieurs feuilles.
+Projet est le nom affiché de la ressource `base` dans l’API et la CLI. Les champs comme `baseId`, le préfixe d’ID `bse` et les URL `/base/...` restent inchangés.
-## Créer et gérer des Bases
+Pour les utilisateurs qui ne connaissent pas les Projets, vous pouvez les considérer comme des classeurs Excel, chaque classeur pouvant contenir plusieurs feuilles.
-### Ajouter une Base
+## Créer et gérer des Projets {#créer-et-gérer-des-bases}
+
+### Ajouter un Projet {#ajouter-une-base}
1. Accédez à un Espace
-2. Cliquez sur « Créer une Base » dans l’angle supérieur droit
+2. Cliquez sur « Créer un Projet » dans l’angle supérieur droit
-### Renommer/supprimer une Base
+### Renommer/supprimer un Projet {#renommersupprimer-une-base}
1. Accédez à un Espace
-2. Survolez une Base
+2. Survolez un Projet
3. Cliquez sur le bouton « ··· » pour ouvrir le menu
4. Cliquez sur « Renommer » ou « Supprimer »
-### Organiser les ressources dans une Base
+### Organiser les ressources dans un Projet {#organiser-les-ressources-dans-une-base}
-Après avoir accédé à une Base, la barre latérale gauche affiche les ressources de la Base actuelle, telles que les Tables, applications et automatisations. Vous pouvez utiliser des dossiers pour organiser ces ressources et faciliter la navigation dans les grandes Bases.
+Après avoir accédé à un Projet, la barre latérale gauche affiche les ressources du Projet actuel, telles que les Tables, applications et automatisations. Vous pouvez utiliser des dossiers pour organiser ces ressources et faciliter la navigation dans les grands Projets.
Les opérations courantes incluent :
@@ -46,40 +48,40 @@ Les opérations courantes incluent :
- **Ajouter des descriptions** : pour les Tables, applications et automatisations, cliquez sur **Ajouter une description** sous le nom de la ressource dans l’en-tête. Utilisez les descriptions pour consigner l’objectif, le responsable, les notes de transmission ou les règles d’utilisation. Teable ouvre une description lorsque vous ouvrez sa ressource pour la première fois, puis de nouveau après sa modification.
- **Vérifier les informations du nœud** : ouvrez le menu `...` d’une ressource et choisissez **Informations sur le nœud** pour afficher l’ID du dossier, de la Table, de l’automatisation ou de l’application, ainsi que les informations de création et de modification.
-### Dupliquer une Base dans un autre Espace {#duplicate-a-base-to-another-space}
+### Dupliquer un Projet dans un autre Espace {#duplicate-a-base-to-another-space}
-Étape 1 : dans l’Espace, sélectionnez la Base que vous souhaitez dupliquer ;
+Étape 1 : dans l’Espace, sélectionnez le Projet que vous souhaitez dupliquer ;
-Étape 2 : cliquez sur l’icône de menu et sélectionnez l’option Copier la Base ;
+Étape 2 : cliquez sur l’icône de menu et sélectionnez l’option Copier le Projet ;
Étape 3 : dans la fenêtre contextuelle, choisissez l’Espace cible. Vous devez disposer des autorisations de Créateur dans cet Espace.
-Pour les Bases volumineuses, Teable affiche la progression dans la boîte de dialogue de duplication pendant la copie de la structure de la Base, des Enregistrements et des pièces jointes. Gardez la boîte de dialogue ouverte jusqu’à la fin de la copie. L’historique des révisions et les collaborateurs ne sont pas copiés.
+Pour les Projets volumineux, Teable affiche la progression dans la boîte de dialogue de duplication pendant la copie de la structure du Projet, des Enregistrements et des pièces jointes. Gardez la boîte de dialogue ouverte jusqu’à la fin de la copie. L’historique des révisions et les collaborateurs ne sont pas copiés.
-Si la Base contient des Champs Lien, Recherche, Agrégation, Recherche conditionnelle ou Agrégation conditionnelle pointant vers un autre Espace, Teable affiche les Champs concernés avant la duplication. Si vous continuez, Teable convertit ces Champs en **Texte sur une ligne** dans la Base dupliquée.
+Si le Projet contient des Champs Lien, Recherche, Agrégation, Recherche conditionnelle ou Agrégation conditionnelle pointant vers un autre Espace, Teable affiche les Champs concernés avant la duplication. Si vous continuez, Teable convertit ces Champs en **Texte sur une ligne** dans le Projet dupliqué.
-### Déplacer une Base entre des Espaces
+### Déplacer un Projet entre des Espaces {#déplacer-une-base-entre-des-espaces}
-Si vous disposez des autorisations d’Espace requises, vous pouvez déplacer une Base vers un autre Espace. Si le déplacement laisse des Champs basés sur des relations pointer entre des Espaces, Teable vous avertit et répertorie les Champs concernés. Lorsque vous confirmez, Teable convertit ces Champs en **Texte sur une ligne** dans le cadre du déplacement.
+Si vous disposez des autorisations d’Espace requises, vous pouvez déplacer un Projet vers un autre Espace. Si le déplacement laisse des Champs basés sur des relations pointer entre des Espaces, Teable vous avertit et répertorie les Champs concernés. Lorsque vous confirmez, Teable convertit ces Champs en **Texte sur une ligne** dans le cadre du déplacement.
-## Importer et exporter des Bases
+## Importer et exporter des Projets {#importer-et-exporter-des-bases}
Utilisez AI Chat pour migrer Airtable, Baserow, NocoDB, SmartSuite et d’autres systèmes vers Teable.
-### Importer une Base (migration de données)
+### Importer un Projet (migration de données) {#importer-une-base-migration-de-données}
-Le format de fichier `.tea` importe une Base complète avec toutes ses Tables, tous ses Champs, ses données et ses configurations. Il est utile pour :
-- **Migration de données** : déplacer des Bases entre différentes instances Teable (par exemple, de Cloud vers une instance auto-hébergée)
-- **Restauration de sauvegarde** : restaurer une Base précédemment exportée
-- **Partage de modèles** : partager des structures de Base complètes avec d’autres équipes
+Le format de fichier `.tea` importe un Projet complet avec toutes ses Tables, tous ses Champs, ses données et ses configurations. Il est utile pour :
+- **Migration de données** : déplacer des Projets entre différentes instances Teable (par exemple, de Cloud vers une instance auto-hébergée)
+- **Restauration de sauvegarde** : restaurer un Projet précédemment exporté
+- **Partage de modèles** : partager des structures de Projet complètes avec d’autres équipes
**Étapes :**
1. Accédez à l’Espace
@@ -89,19 +91,19 @@ Le format de fichier `.tea` importe une Base complète avec toutes ses Tables, t
-Si vous souhaitez créer une Base à partir d’Airtable, choisissez **Importer depuis Airtable** dans la même boîte de dialogue d’importation.
+Si vous souhaitez créer un Projet à partir d’Airtable, choisissez **Importer depuis Airtable** dans la même boîte de dialogue d’importation.
-### Exporter une Base (sauvegarde et migration) {#export-base-backup-&-migration}
+### Exporter un Projet (sauvegarde et migration) {#export-base-backup-&-migration}
-Exportez votre Base vers un fichier `.tea` à des fins de sauvegarde ou de migration. Le fichier exporté contient toutes les Tables, tous les Champs, toutes les données, toutes les Vues et toutes les configurations.
+Exportez votre Projet vers un fichier `.tea` à des fins de sauvegarde ou de migration. Le fichier exporté contient toutes les Tables, tous les Champs, toutes les données, toutes les Vues et toutes les configurations.
**Étapes :**
1. Accédez à l’Espace
-2. Survolez la Base que vous souhaitez exporter
+2. Survolez le Projet que vous souhaitez exporter
3. Cliquez sur le bouton 「···」 pour ouvrir le menu
4. Cliquez sur 「Exporter」
5. Laissez **Inclure les Enregistrements** activé pour exporter les données des Enregistrements. Désactivez cette option pour exporter uniquement la structure et la configuration.
@@ -110,28 +112,28 @@ Exportez votre Base vers un fichier `.tea` à des fins de sauvegarde ou de migra
-- Pour migrer des données entre des instances Teable, exportez votre Base depuis l’instance source, puis importez le fichier `.tea` dans l’instance cible. Toutes les données et configurations seront préservées.
-- Teable convertit les Champs de relation inter-Bases en Champs **Texte sur une ligne** dans le fichier exporté.
-- Lorsque vous dupliquez ou déplacez une Base entre des Espaces, les Champs de relation inter-Espaces sont convertis en **Texte sur une ligne**.
+- Pour migrer des données entre des instances Teable, exportez votre Projet depuis l’instance source, puis importez le fichier `.tea` dans l’instance cible. Toutes les données et configurations seront préservées.
+- Teable convertit les Champs de relation inter-Projets en Champs **Texte sur une ligne** dans le fichier exporté.
+- Lorsque vous dupliquez ou déplacez un Projet entre des Espaces, les Champs de relation inter-Espaces sont convertis en **Texte sur une ligne**.
-## Partager une Base
+## Partager un Projet {#partager-une-base}
-Les Bases peuvent être partagées via des liens publics. La portée du partage peut être l’ensemble de la Base ou l’élément actuellement sélectionné.
+Les Projets peuvent être partagés via des liens publics. La portée du partage peut être l’ensemble du Projet ou l’élément actuellement sélectionné.
-1. Accédez à la Base cible
-2. Ouvrez le menu de partage de la Base ou de l’élément sélectionné
+1. Accédez au Projet cible
+2. Ouvrez le menu de partage du Projet ou de l’élément sélectionné
3. Activez **Partager sur le Web**
4. Copiez le lien de partage ou le code QR
@@ -139,30 +141,30 @@ Les portées de partage incluent :
| Portée | Description |
|------|------|
-| **Partager toute la Base** | Partage tous les éléments de la Base actuelle. Les nouvelles Tables et dossiers ajoutés ultérieurement sont automatiquement inclus. |
+| **Partager tout le Projet** | Partage tous les éléments du Projet actuel. Les nouvelles Tables et dossiers ajoutés ultérieurement sont automatiquement inclus. |
| **Partager l’élément sélectionné** | Partage l’élément actuellement sélectionné. Lorsqu’un dossier est partagé, ses éléments enfants sont inclus. |
Dans les paramètres de partage, vous pouvez configurer les autorisations du lien, **Autoriser les utilisateurs à copier les données**, l’accès par mot de passe, régénérer le lien, supprimer le lien de partage ou copier la configuration d’intégration.
Si la portée du partage inclut une application, l’application doit être publiée avant de pouvoir être accessible via le lien public.
-## Fonctionnalités au sein d’une Base
+## Fonctionnalités au sein d’un Projet {#fonctionnalités-au-sein-dune-base}
-Une Base peut contenir plusieurs Tables pour enregistrer et organiser des informations liées au travail ou à l’activité professionnelle.
+Un Projet peut contenir plusieurs Tables pour enregistrer et organiser des informations liées au travail ou à l’activité professionnelle.
-Par exemple : une Base de gestion des clients peut comporter des Tables distinctes pour « Entreprises clientes », « Contacts clients » et « Enregistrements de suivi client », tandis qu’une Base de gestion des salles de réunion peut comporter des Tables distinctes pour enregistrer « Gestion des salles de réunion », « Équipements des salles de réunion » et « Réservations de salles de réunion ».
+Par exemple : un Projet de gestion des clients peut comporter des Tables distinctes pour « Entreprises clientes », « Contacts clients » et « Enregistrements de suivi client », tandis qu’un Projet de gestion des salles de réunion peut comporter des Tables distinctes pour enregistrer « Gestion des salles de réunion », « Équipements des salles de réunion » et « Réservations de salles de réunion ».
-Par conséquent, la plupart des fonctionnalités d’une Base sont liées aux Tables :
+Par conséquent, la plupart des fonctionnalités d’un Projet sont liées aux Tables :
-* **Créer des Tables** : les Bases permettent aux utilisateurs de créer de nouvelles Tables selon les besoins propres au projet, dans lesquelles ils peuvent définir la structure de la Table, les Champs et les types de données.
-* **Modifier des Tables** : les utilisateurs peuvent modifier les Tables existantes dans la Base, notamment en ajoutant, supprimant et modifiant des Enregistrements.
-* **Exporter et importer des données** : les Bases permettent d’exporter les données au format CSV et d’importer des données aux formats CSV et XLSX.
+* **Créer des Tables** : les Projets permettent aux utilisateurs de créer de nouvelles Tables selon les besoins propres au projet, dans lesquelles ils peuvent définir la structure de la Table, les Champs et les types de données.
+* **Modifier des Tables** : les utilisateurs peuvent modifier les Tables existantes dans le Projet, notamment en ajoutant, supprimant et modifiant des Enregistrements.
+* **Exporter et importer des données** : les Projets permettent d’exporter les données au format CSV et d’importer des données aux formats CSV et XLSX.
Consultez la [section Tables](/fr/basic/table) pour en savoir plus sur les Tables.
diff --git a/fr/basic/credential.mdx b/fr/basic/credential.mdx
index aab83c70..6cde1d29 100644
--- a/fr/basic/credential.mdx
+++ b/fr/basic/credential.mdx
@@ -39,7 +39,7 @@ Ouvrez le panneau d’identifiants de la ressource :
Chaque autorisation demande un **Nom de la variable**, l’alias de cet identifiant dans cette application ou automatisation. Les règles de nommage sont celles d’une clé de secret, et c’est ce nom que lit le code.
-Le panneau peut aussi afficher des emplacements **Pas encore lié**. Copier une application, dupliquer un workflow, importer ou dupliquer une base reprend les alias attendus par le code, mais aucun identifiant. **Lier le mien** fournit les vôtres pour que l’application ou l’automatisation fonctionne.
+Le panneau peut aussi afficher des emplacements **Pas encore lié**. Copier une application, dupliquer un workflow, importer ou dupliquer un projet reprend les alias attendus par le code, mais aucun identifiant. **Lier le mien** fournit les vôtres pour que l’application ou l’automatisation fonctionne.
Quand un alias porte les identifiants de quelqu’un d’autre, **Remplacer par le mien** les reprend. **Retirer seulement l’autorisation (garder l’emplacement)** rompt le lien et conserve l’emplacement, sans toucher au code.
diff --git a/fr/basic/security.mdx b/fr/basic/security.mdx
index 6ca39a7d..d55ff8fa 100644
--- a/fr/basic/security.mdx
+++ b/fr/basic/security.mdx
@@ -112,13 +112,13 @@ Teable propose plusieurs options pour sauvegarder vos données :
| Méthode | Description | Cas d’utilisation |
|--------|-------------|----------|
-| **[Exportation de Base](/fr/basic/base#export-base-backup-&-migration)** | Télécharger toute la Base sous forme de fichier `.tea` (structure, données, automatisations) | Sauvegarde complète, migration |
-| **[Duplication de Base](/fr/basic/base#duplicate-a-base-to-another-space)** | Créer une copie d’une Base dans Teable | Instantané rapide |
+| **[Exportation de Projet](/fr/basic/base#export-base-backup-&-migration)** | Télécharger tout le Projet sous forme de fichier `.tea` (structure, données, automatisations) | Sauvegarde complète, migration |
+| **[Duplication de Projet](/fr/basic/base#duplicate-a-base-to-another-space)** | Créer une copie d’un Projet dans Teable | Instantané rapide |
| **[Exportation CSV](/fr/basic/table/export)** | Exporter les données d’une table individuelle | Portabilité des données |
| **[Exportation API](/fr/api-doc/record/get)** | Exporter par programmation les enregistrements via l’API REST | Sauvegardes automatisées |
-Vous pouvez sauvegarder manuellement vos Bases en exportant toute la Base sous forme de fichier `.tea`, en exportant des tables individuelles sous forme de fichiers CSV ou en récupérant vos données via l’API Teable.
+Vous pouvez sauvegarder manuellement vos Projets en exportant tout le Projet sous forme de fichier `.tea`, en exportant des tables individuelles sous forme de fichiers CSV ou en récupérant vos données via l’API Teable.
## Authentification unique (SSO)
diff --git a/fr/basic/space.mdx b/fr/basic/space.mdx
index a9c02edd..2a4e76fe 100644
--- a/fr/basic/space.mdx
+++ b/fr/basic/space.mdx
@@ -64,15 +64,15 @@ Les Espaces supprimés sont placés dans la corbeille, où vous pouvez choisir d
## Partagé avec moi
-Lorsqu'une personne partage une Base avec vous en tant que collaborateur, celle-ci apparaît sous **Partagé avec moi** dans la barre latérale de l'Espace.
+Lorsqu'une personne partage un Projet avec vous en tant que collaborateur, le Projet apparaît sous **Partagé avec moi** dans la barre latérale de l'Espace.
-Les Bases partagées avec vous diffèrent des Bases de vos propres Espaces :
+Les Projets partagés avec vous diffèrent des Projets de vos propres Espaces :
- L'accès est contrôlé par la personne qui partage.
-- Les actions disponibles dépendent de l'autorisation de Base qui vous a été accordée.
-- Si la personne qui partage supprime votre accès, la Base n'apparaît plus.
+- Les actions disponibles dépendent de l'autorisation de Projet qui vous a été accordée.
+- Si la personne qui partage supprime votre accès, le Projet n'apparaît plus.
-Pour le partage public d'une Base, consultez [Base](/fr/basic/base).
+Pour le partage public d'un Projet, consultez [Projet](/fr/basic/base).
## Paramètres de l'Espace
@@ -95,7 +95,7 @@ Dans la page Paramètres d'IA, les propriétaires d'Espace peuvent configurer de
**Discuter dans la messagerie instantanée**
-Sur la page **Discuter dans la messagerie instantanée**, les administrateurs de l'Espace peuvent créer des bots et configurer leur modèle, les Bases accessibles, les Skills, les fichiers et l'intégration de messagerie instantanée.
+Sur la page **Discuter dans la messagerie instantanée**, les administrateurs de l'Espace peuvent créer des bots et configurer leur modèle, les Projets accessibles, les Skills, les fichiers et l'intégration de messagerie instantanée.
**Forfait**
@@ -108,4 +108,3 @@ Dans la page Facturation, vous pouvez consulter votre forfait d'abonnement actue
**Authentification**
Dans la page Authentification, vous pouvez configurer des fournisseurs SSO pour l'Espace et gérer **Connexion par URL** et **Connexion par bouton**. Consultez [Authentification unique (SSO)](/fr/basic/sso/overview).
-
diff --git a/fr/basic/space/base-invite.mdx b/fr/basic/space/base-invite.mdx
index 0e3bf8a6..80442022 100644
--- a/fr/basic/space/base-invite.mdx
+++ b/fr/basic/space/base-invite.mdx
@@ -1,39 +1,39 @@
---
-title: "Invitation à une Base"
-description: "Gérez les autorisations au niveau de la Base. Invitez des membres dans une Base spécifique sans leur accorder l'accès à l'ensemble de l'Espace, pour une collaboration sur les données plus précise et plus sécurisée."
+title: "Invitation à un Projet"
+description: "Gérez les autorisations au niveau du Projet. Invitez des membres dans un Projet spécifique sans leur accorder l'accès à l'ensemble de l'Espace, pour une collaboration sur les données plus précise et plus sécurisée."
---
-## Qu'est-ce qu'un collaborateur de Base ?
+## Qu'est-ce qu'un collaborateur de Projet ? {#quest-ce-quun-collaborateur-de-base-}
-Un collaborateur de Base est un membre invité uniquement dans une Base spécifique. Contrairement aux collaborateurs d'Espace, il ne peut accéder qu'aux Bases auxquelles il a été invité et ne peut pas voir les autres Bases de l'Espace.
+Un collaborateur de Projet est un membre invité uniquement dans un Projet spécifique. Contrairement aux collaborateurs d'Espace, il ne peut accéder qu'aux Projets auxquels il a été invité et ne peut pas voir les autres Projets de l'Espace.
-## Ajouter des collaborateurs de Base
+## Ajouter des collaborateurs de Projet {#ajouter-des-collaborateurs-de-base}
-Accédez à une Base et cliquez sur le bouton `Inviter` dans l'angle supérieur droit. Deux méthodes sont prises en charge :
+Accédez à un Projet et cliquez sur le bouton `Inviter` dans l'angle supérieur droit. Deux méthodes sont prises en charge :
-- **Invitation par e-mail** : saisissez l'adresse e-mail du destinataire, définissez le niveau d'autorisation de la Base (par exemple, « Créateur »), puis cliquez sur **Envoyer l'invitation**.
-- **Invitation par lien** : passez à l'onglet « Inviter via un lien » pour générer un lien d'invitation dédié. Copiez et partagez le lien. Les destinataires peuvent rejoindre la Base en cliquant dessus.
+- **Invitation par e-mail** : saisissez l'adresse e-mail du destinataire, définissez le niveau d'autorisation du Projet (par exemple, « Créateur »), puis cliquez sur **Envoyer l'invitation**.
+- **Invitation par lien** : passez à l'onglet « Inviter via un lien » pour générer un lien d'invitation dédié. Copiez et partagez le lien. Les destinataires peuvent rejoindre le Projet en cliquant dessus.
-Après avoir envoyé une invitation par e-mail, vous pouvez copier le lien direct de la Base affiché dans le panneau et l'envoyer séparément. La personne invitée reçoit également une notification dans l'application qui ouvre la Base.
+Après avoir envoyé une invitation par e-mail, vous pouvez copier le lien direct du Projet affiché dans le panneau et l'envoyer séparément. La personne invitée reçoit également une notification dans l'application qui ouvre le Projet.
-Dans le panneau d'invitation, vous pouvez voir tous les utilisateurs qui ont actuellement accès à la Base :
+Dans le panneau d'invitation, vous pouvez voir tous les utilisateurs qui ont actuellement accès au Projet :
-- **Collaborateurs de Base** : membres invités directement dans cette Base uniquement.
-- **Collaborateurs d'Espace** : affichés avec un badge « Espace » à côté de leur nom, indiquant qu'il s'agit de membres au niveau de l'Espace qui héritent automatiquement de l'accès à cette Base.
+- **Collaborateurs de Projet** : membres invités directement dans ce Projet uniquement.
+- **Collaborateurs d'Espace** : affichés avec un badge « Espace » à côté de leur nom, indiquant qu'il s'agit de membres au niveau de l'Espace qui héritent automatiquement de l'accès à ce Projet.
-La Base propose quatre rôles d'autorisation pour prendre en charge différents niveaux de collaboration. Pour une comparaison détaillée des autorisations, consultez [Détails des autorisations](/fr/basic/space/space-permission).
+Le Projet propose quatre rôles d'autorisation pour prendre en charge différents niveaux de collaboration. Pour une comparaison détaillée des autorisations, consultez [Détails des autorisations](/fr/basic/space/space-permission).
Pour un contrôle plus précis au niveau de la Table, du Champ ou de l'Enregistrement, utilisez la fonctionnalité [Matrice d'autorisations](/fr/basic/authority-matrix).
@@ -46,12 +46,12 @@ La Base propose quatre rôles d'autorisation pour prendre en charge différents
## Cas d'utilisation
-L'invitation à une Base est conçue pour les collaborateurs externes. Par exemple, un designer indépendant chargé d'organiser une bibliothèque de ressources peut être invité uniquement dans cette Base avec l'autorisation **Éditeur**, sans voir les autres Bases de l'Espace.
+L'invitation à un Projet est conçue pour les collaborateurs externes. Par exemple, un designer indépendant chargé d'organiser une bibliothèque de ressources peut être invité uniquement dans ce Projet avec l'autorisation **Éditeur**, sans voir les autres Projets de l'Espace.
## Remarques
-- **Héritage des autorisations** : un Gestionnaire d'Espace dispose automatiquement d'un accès complet à toutes les Bases de cet Espace et son rôle ne peut pas être rétrogradé au niveau de la Base.
-- **Sécurité des liens** : toute personne qui obtient un lien d'invitation peut tenter de rejoindre la Base. Si un lien est divulgué, vous pouvez le révoquer en cliquant sur le X à côté de celui-ci dans le panneau d'invitation.
+- **Héritage des autorisations** : un Gestionnaire d'Espace dispose automatiquement d'un accès complet à tous les Projets de cet Espace et son rôle ne peut pas être rétrogradé au niveau du Projet.
+- **Sécurité des liens** : toute personne qui obtient un lien d'invitation peut tenter de rejoindre le Projet. Si un lien est divulgué, vous pouvez le révoquer en cliquant sur le X à côté de celui-ci dans le panneau d'invitation.
Lorsque la [Matrice d'autorisations](/fr/basic/authority-matrix) et les [Détails des autorisations](/fr/basic/space/space-permission) coexistent, seuls les utilisateurs **Gestionnaire** sont exemptés des restrictions de la Matrice d'autorisations. Tous les autres utilisateurs y sont soumis.
diff --git a/fr/basic/space/billing.mdx b/fr/basic/space/billing.mdx
index 6ab3f030..6b1c0a5e 100644
--- a/fr/basic/space/billing.mdx
+++ b/fr/basic/space/billing.mdx
@@ -41,19 +41,19 @@ Suivez la consommation de ressources de votre espace à l’aide de ces indicate
| Indicateur | Description |
|--------|-------------|
-| **Total des collaborateurs** | Nombre de collaborateurs facturables dans l’espace actuel et ses bases |
+| **Total des collaborateurs** | Nombre de collaborateurs facturables dans l’espace actuel et ses projets |
| **Nombre maximal mensuel d’exécutions d’automatisation** | Quota mensuel d’exécutions d’automatisation. Chaque exécution d’automatisation consomme 1 unité de quota |
| **Total des enregistrements** | Nombre total de lignes dans toutes les tables de l’espace |
| **Stockage des pièces jointes** | Stockage total utilisé par les pièces jointes importées |
| **Total des e-mails** | E-mails envoyés via une automatisation utilisant le service e-mail Teable |
-Les données de la corbeille de l’espace et de la corbeille des bases sont comptabilisées dans les statistiques du total des enregistrements. Pour réduire ce total, nettoyez les données dans « Espace → Corbeille » ou « Base → Corbeille ».
+Les données de la corbeille de l’espace et de la corbeille des projets sont comptabilisées dans les statistiques du total des enregistrements. Pour réduire ce total, nettoyez les données dans « Espace → Corbeille » ou « Projet → Corbeille ».
-Cliquez sur **Détails** sur la carte **Total des enregistrements** pour consulter l’utilisation des enregistrements par Base. La boîte de dialogue affiche les enregistrements actifs, les enregistrements dans la corbeille et le total des enregistrements pour chaque Base. Vous pouvez ouvrir la page de corbeille d’une Base depuis cette boîte de dialogue, ou supprimer définitivement une Base déjà dans la corbeille.
+Cliquez sur **Détails** sur la carte **Total des enregistrements** pour consulter l’utilisation des enregistrements par Projet. La boîte de dialogue affiche les enregistrements actifs, les enregistrements dans la corbeille et le total des enregistrements pour chaque Projet. Vous pouvez ouvrir la page de corbeille d’un Projet depuis cette boîte de dialogue, ou supprimer définitivement un Projet déjà dans la corbeille.
### Lorsqu’une limite est atteinte
-Lorsque l’espace atteint une limite du forfait, Teable arrête l’action avant son exécution et ouvre la boîte de dialogue de mise à niveau, qui indique la limite atteinte, votre utilisation et un lien vers l’utilisation par Base. Cela s’applique au collage, au remplissage, à la duplication de lignes, à la création groupée d’enregistrements, à l’importation et à l’importation de pièces jointes.
+Lorsque l’espace atteint une limite du forfait, Teable arrête l’action avant son exécution et ouvre la boîte de dialogue de mise à niveau, qui indique la limite atteinte, votre utilisation et un lien vers l’utilisation par Projet. Cela s’applique au collage, au remplissage, à la duplication de lignes, à la création groupée d’enregistrements, à l’importation et à l’importation de pièces jointes.
Pour continuer, mettez à niveau le forfait ou libérez de l’espace en supprimant des enregistrements ou des pièces jointes.
@@ -129,9 +129,9 @@ La modification d’un abonnement existant passe par une page de confirmation du
### Sièges
-Les sièges sont achetés à l’avance, et vous pouvez en acheter avant que votre équipe n’en ait besoin. Un siège est occupé par les collaborateurs ayant le rôle **Propriétaire**, **Créateur** ou **Éditeur** dans l’espace et ses bases. Les rôles **Commentateur** et **Lecteur** sont gratuits.
+Les sièges sont achetés à l’avance, et vous pouvez en acheter avant que votre équipe n’en ait besoin. Un siège est occupé par les collaborateurs ayant le rôle **Propriétaire**, **Créateur** ou **Éditeur** dans l’espace et ses projets. Les rôles **Commentateur** et **Lecteur** sont gratuits.
-Sur les forfaits Cloud, les sièges achetés constituent une limite stricte. Teable bloque toute action qui ferait dépasser cette limite à l’espace et propose d’ajouter des sièges. Cela couvre les invitations par e-mail, la création d’un lien d’invitation avec un rôle facturable ou le passage d’un lien à un tel rôle, l’accès via un tel lien, l’ajout direct de collaborateurs et la promotion d’une personne vers un rôle facturable. Une personne qui occupe déjà un siège peut rejoindre une autre Base ou changer de rôle sans utiliser un nouveau siège.
+Sur les forfaits Cloud, les sièges achetés constituent une limite stricte. Teable bloque toute action qui ferait dépasser cette limite à l’espace et propose d’ajouter des sièges. Cela couvre les invitations par e-mail, la création d’un lien d’invitation avec un rôle facturable ou le passage d’un lien à un tel rôle, l’accès via un tel lien, l’ajout direct de collaborateurs et la promotion d’une personne vers un rôle facturable. Une personne qui occupe déjà un siège peut rejoindre un autre Projet ou changer de rôle sans utiliser un nouveau siège.
Pour continuer, ajoutez des sièges sur la page Forfait ou attribuez à la personne le rôle gratuit Commentateur ou Lecteur. Seul le propriétaire de l’espace peut acheter des sièges.
diff --git a/fr/basic/space/space-invite.mdx b/fr/basic/space/space-invite.mdx
index c73c173e..57752557 100644
--- a/fr/basic/space/space-invite.mdx
+++ b/fr/basic/space/space-invite.mdx
@@ -5,7 +5,7 @@ description: "Invitez d'autres personnes à devenir collaborateurs d'Espace par
## Qu'est-ce qu'un collaborateur d'Espace ?
-Lorsque vous partagez un Espace avec un autre utilisateur, celui-ci devient un collaborateur d'Espace ayant accès à toutes les Bases de cet Espace.
+Lorsque vous partagez un Espace avec un autre utilisateur, celui-ci devient un collaborateur d'Espace ayant accès à tous les Projets de cet Espace.
## Ajouter des collaborateurs d'Espace
@@ -14,7 +14,7 @@ Lorsque vous partagez un Espace avec un autre utilisateur, celui-ci devient un c
1. Cliquez sur l'Espace dans lequel vous souhaitez ajouter des collaborateurs dans la barre latérale gauche.
2. Cliquez sur le bouton « Inviter » près du haut de l'Espace.
3. La fenêtre d'invitation à l'Espace s'ouvre ; vous y verrez des options pour inviter par e-mail ou par lien. Vous y trouverez également les « Liens d'invitation » précédemment configurés et les « Collaborateurs d'Espace » existants dans leurs sections respectives.
-4. **Invitation par e-mail** : saisissez une adresse e-mail ou plusieurs adresses (séparées par des virgules). Définissez ensuite le niveau d'autorisation que vous souhaitez accorder aux utilisateurs pour toutes les Bases de l'Espace. Enfin, cliquez sur envoyer l'e-mail pour inviter les utilisateurs à collaborer.
+4. **Invitation par e-mail** : saisissez une adresse e-mail ou plusieurs adresses (séparées par des virgules). Définissez ensuite le niveau d'autorisation que vous souhaitez accorder aux utilisateurs pour tous les Projets de l'Espace. Enfin, cliquez sur envoyer l'e-mail pour inviter les utilisateurs à collaborer.
Après avoir envoyé une invitation par e-mail, vous pouvez copier le lien direct de l'Espace affiché dans le panneau et l'envoyer séparément. La personne invitée reçoit également une notification dans l'application qui ouvre l'Espace.
@@ -24,7 +24,7 @@ Lorsque vous partagez un Espace avec un autre utilisateur, celui-ci devient un c
className="docs-screenshot"
/>
-5. **Invitation par lien** : cliquez sur l'option « Inviter via un lien ». Définissez ensuite le niveau d'autorisation que le lien d'invitation accordera pour toutes les Bases de l'Espace. Enfin, cliquez sur créer le lien. Vous pouvez maintenant cliquer sur l'icône de presse-papiers à côté du lien créé pour le partager comme vous le souhaitez.
+5. **Invitation par lien** : cliquez sur l'option « Inviter via un lien ». Définissez ensuite le niveau d'autorisation que le lien d'invitation accordera pour tous les Projets de l'Espace. Enfin, cliquez sur créer le lien. Vous pouvez maintenant cliquer sur l'icône de presse-papiers à côté du lien créé pour le partager comme vous le souhaitez.
-Les collaborateurs d'Espace ont accès à toutes les Bases de l'Espace. Si une personne doit travailler uniquement sur des Bases spécifiques, envisagez de l'ajouter comme [collaborateur de Base](/fr/basic/space/base-invite).
+Les collaborateurs d'Espace ont accès à tous les Projets de l'Espace. Si une personne doit travailler uniquement sur des Projets spécifiques, envisagez de l'ajouter comme [collaborateur de Projet](/fr/basic/space/base-invite).
## Supprimer des liens d'invitation
@@ -56,7 +56,7 @@ Vous pouvez retirer des collaborateurs d'Espace depuis la fenêtre de partage de
* **Restriction d'autorisation** : seuls les utilisateurs disposant des autorisations Gestionnaire ou Créateur peuvent retirer d'autres collaborateurs.
* **Auto-suppression** : vous pouvez supprimer votre propre accès s'il existe au moins un autre Gestionnaire dans l'Espace.
-* **Portée** : retirer une personne de l'Espace ne supprime pas les autorisations qu'elle détient sur des Bases individuelles.
+* **Portée** : retirer une personne de l'Espace ne supprime pas les autorisations qu'elle détient sur des Projets individuels.
Lorsque vous ajoutez de nouveaux utilisateurs à un Espace, vous pouvez attribuer les rôles suivants (consultez [Détails des autorisations](/fr/basic/space/space-permission)) :
@@ -68,9 +68,9 @@ Lorsque vous ajoutez de nouveaux utilisateurs à un Espace, vous pouvez attribue
| Commentateur | Peut commenter les Enregistrements, mais ne peut pas modifier les données. |
| Lecteur | Peut consulter, mais ne peut pas commenter. |
-## Examiner les accès aux Bases
+## Examiner les accès aux Projets {#examiner-les-accès-aux-bases}
-Chaque personne ou service apparaît une fois dans la liste des collaborateurs d'Espace, même lorsqu'elle détient également des autorisations sur des Bases individuelles. Un badge **Autorisations de Base** à côté du rôle indique le nombre de Bases auxquelles elle a été invitée. Une personne qui n'a jamais été ajoutée à l'Espace lui-même est indiquée comme **A accès uniquement aux Bases sélectionnées**.
+Chaque personne ou service apparaît une fois dans la liste des collaborateurs d'Espace, même lorsqu'elle détient également des autorisations sur des Projets individuels. Un badge **Autorisations de Projet** à côté du rôle indique le nombre de Projets auxquels elle a été invitée. Une personne qui n'a jamais été ajoutée à l'Espace lui-même est indiquée comme **A accès uniquement aux Projets sélectionnés**.
-Développez une ligne pour voir ces Bases et le rôle détenu pour chacune. À partir de là, **Retirer l'accès à la Base** retire une autorisation sur une Base, et **Retirer le collaborateur** sur une ligne réservée aux Bases retire toutes les autorisations de Base détenues par cette personne dans cet Espace.
+Développez une ligne pour voir ces Projets et le rôle détenu pour chacun. À partir de là, **Retirer l'accès au Projet** retire une autorisation sur un Projet, et **Retirer le collaborateur** sur une ligne réservée aux Projets retire toutes les autorisations de Projet détenues par cette personne dans cet Espace.
diff --git a/fr/basic/space/space-permission.mdx b/fr/basic/space/space-permission.mdx
index 85b0ca1c..a5b13a7e 100644
--- a/fr/basic/space/space-permission.mdx
+++ b/fr/basic/space/space-permission.mdx
@@ -1,20 +1,20 @@
---
title: "Détails des autorisations de collaboration"
-description: "Cette section présente le périmètre opérationnel de quatre niveaux d'autorisation différents dans les Espaces et les Bases."
+description: "Cette section présente le périmètre opérationnel de quatre niveaux d'autorisation différents dans les Espaces et les Projets."
---
Teable offre un contrôle des autorisations plus précis au niveau des Tables, des Champs et des Enregistrements. Consultez la section [Matrice d'autorisations](/fr/basic/authority-matrix).
-### Opérations sur les Bases
+### Opérations sur les Projets {#opérations-sur-les-bases}
| Description | Créateur/Gestionnaire | Éditeur | Commentateur | Lecteur |
| ----------- | :-------------------: | :------: | :-----------: | :-----: |
-| Consulter les données de la Base | ✅ | ✅ | ✅ | ✅ |
+| Consulter les données du Projet | ✅ | ✅ | ✅ | ✅ |
| Inviter des utilisateurs avec des autorisations égales ou inférieures | ✅ | ✅ | ✅ | ✅ |
| Créer ou supprimer des liens de partage de Vue | ✅ | ✅ | | |
| Créer et modifier des automatisations | ✅ | | | |
| Activer la matrice d'autorisations | ✅ | | | |
-| Créer ou supprimer des liens d'invitation à la collaboration de Base | ✅ | | | |
-| Renommer la Base | ✅ | | | |
+| Créer ou supprimer des liens d'invitation à la collaboration de Projet | ✅ | | | |
+| Renommer le Projet | ✅ | | | |
### Opérations sur les Enregistrements
@@ -51,12 +51,12 @@ description: "Cette section présente le périmètre opérationnel de quatre niv
| Description | Gestionnaire | Créateur | Éditeur | Commentateur | Lecteur |
| ----------- | :----------: | :------: | :------: | :-----------: | :-----: |
-| Accéder à toutes les Bases de l'Espace | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Accéder à tous les Projets de l'Espace | ✅ | ✅ | ✅ | ✅ | ✅ |
| Inviter des utilisateurs avec des autorisations égales ou inférieures | ✅ | ✅ | ✅ | ✅ | ✅ |
| Renommer l'Espace | ✅ | ✅ | | | |
-| Ajouter et supprimer des Bases dans l'Espace | ✅ | ✅ | | | |
-| Réorganiser les Bases dans l'Espace | ✅ | ✅ | | | |
-| Déplacer des Bases entre des Espaces | ✅ | ✅ | | | |
+| Ajouter et supprimer des Projets dans l'Espace | ✅ | ✅ | | | |
+| Réorganiser les Projets dans l'Espace | ✅ | ✅ | | | |
+| Déplacer des Projets entre des Espaces | ✅ | ✅ | | | |
| Ajuster les paramètres de facturation, mettre à niveau l'Espace | ✅ | | | | |
| Accorder des autorisations de Gestionnaire | ✅ | | | | |
diff --git a/fr/basic/table.mdx b/fr/basic/table.mdx
index e9a91eb0..a8afe50b 100644
--- a/fr/basic/table.mdx
+++ b/fr/basic/table.mdx
@@ -1,16 +1,16 @@
---
title: "Vue d’ensemble"
-description: "Créez, importez, partagez et gérez des tables dans une base."
+description: "Créez, importez, partagez et gérez des tables dans un projet."
---
{/* mintlify-resync: 2026-05-14 */}
-Chaque base peut contenir plusieurs tables pour stocker et gérer des données associées. Les tables Teable sont équivalentes aux tables de base de données — comprendre [leurs différences avec les feuilles de calcul](/fr/compare/teable-vs-excel) vous aidera à tirer le meilleur parti de Teable.
+Chaque projet peut contenir plusieurs tables pour stocker et gérer des données associées. Les tables Teable sont équivalentes aux tables de base de données — comprendre [leurs différences avec les feuilles de calcul](/fr/compare/teable-vs-excel) vous aidera à tirer le meilleur parti de Teable.
## Créer et gérer des tables
### Ajouter des tables
-Dans une base, cliquez sur le bouton `+` dans le répertoire et choisissez de :
+Dans un projet, cliquez sur le bouton `+` dans le répertoire et choisissez de :
-Lorsque d’autres tables sont liées à la table que vous supprimez, la boîte de dialogue de confirmation répertorie les champs concernés par la suppression, ainsi que la Base et la table auxquelles ils appartiennent. La suppression de la table convertit ces champs de liaison en champs de texte sur une ligne qui conservent les titres des enregistrements liés ; les champs de recherche ou de cumul créés à partir de ceux-ci cessent alors de fonctionner.
+Lorsque d’autres tables sont liées à la table que vous supprimez, la boîte de dialogue de confirmation répertorie les champs concernés par la suppression, ainsi que le Projet et la table auxquels ils appartiennent. La suppression de la table convertit ces champs de liaison en champs de texte sur une ligne qui conservent les titres des enregistrements liés ; les champs de recherche ou de cumul créés à partir de ceux-ci cessent alors de fonctionner.
### Corbeille
-Cliquez sur l’icône de corbeille en haut à gauche de la base pour gérer les tables supprimées.
+Cliquez sur l’icône de corbeille en haut à gauche du projet pour gérer les tables supprimées.
-- **Restaurer** : replace la table dans la base avec toutes ses données intactes
+- **Restaurer** : replace la table dans le projet avec toutes ses données intactes
- **Vider la corbeille** : supprime définitivement toutes les tables mises à la corbeille
La restauration d’une table n’annule pas la conversion des liaisons. Les champs de liaison des autres tables restent des champs de texte ; recréez-les si vous devez rétablir la connexion.
diff --git a/fr/basic/table/import.mdx b/fr/basic/table/import.mdx
index a7d71be6..67c47fbb 100644
--- a/fr/basic/table/import.mdx
+++ b/fr/basic/table/import.mdx
@@ -4,7 +4,7 @@ description: "Importez des données CSV, Excel, Airtable ou Google Sheets dans T
---
{/* mintlify-resync: 2026-05-14 */}
-Utilisez l’importation pour initialiser une nouvelle Table, ajouter de nouvelles données à une Table existante ou importer des Tables depuis Airtable ou Google Sheets dans une Base Teable. Airtable et Google Sheets sont également disponibles lorsque vous importez une Base entière.
+Utilisez l’importation pour initialiser une nouvelle Table, ajouter de nouvelles données à une Table existante ou importer des Tables depuis Airtable ou Google Sheets dans un Projet Teable. Airtable et Google Sheets sont également disponibles lorsque vous importez un Projet entier.
Utilisez Connect Everything dans AI Chat pour migrer Airtable, Baserow, NocoDB, SmartSuite et d’autres systèmes vers Teable.
@@ -72,16 +72,16 @@ Après le téléversement, associez les colonnes du fichier aux Champs de la Tab
Si l’intégration Airtable est configurée pour votre instance, vous pouvez utiliser l’importation Airtable de deux manières :
-- Pour créer une nouvelle Base Teable, ouvrez le menu de l’Espace cible, cliquez sur **Importer**, puis choisissez **Importer depuis Airtable**.
-- Pour importer des Tables dans la Base Teable que vous consultez, utilisez le menu des ressources de la Base :
+- Pour créer un nouveau Projet Teable, ouvrez le menu de l’Espace cible, cliquez sur **Importer**, puis choisissez **Importer depuis Airtable**.
+- Pour importer des Tables dans le Projet Teable que vous consultez, utilisez le menu des ressources du Projet :
-1. Ouvrez la Base Teable cible.
+1. Ouvrez le Projet Teable cible.
2. Cliquez sur `+` en haut du répertoire de gauche.
3. Sous **Ajouter depuis d’autres sources**, choisissez **Airtable**.
@@ -99,8 +99,8 @@ Pendant l’importation, Teable affiche la progression par Table. Si certains Ch
Commencez depuis l’un ou l’autre point d’entrée :
-- Pour créer une nouvelle Base Teable, ouvrez le menu de l’Espace cible, cliquez sur **Importer**, puis choisissez **Importer depuis Google Sheets**.
-- Pour ajouter des Tables à la Base que vous consultez, cliquez sur `+` en haut du répertoire de gauche et choisissez **Google Sheets** sous **Ajouter depuis d’autres sources**.
+- Pour créer un nouveau Projet Teable, ouvrez le menu de l’Espace cible, cliquez sur **Importer**, puis choisissez **Importer depuis Google Sheets**.
+- Pour ajouter des Tables au Projet que vous consultez, cliquez sur `+` en haut du répertoire de gauche et choisissez **Google Sheets** sous **Ajouter depuis d’autres sources**.
@@ -113,7 +113,7 @@ Commencez depuis l’un ou l’autre point d’entrée :
Chaque onglet est affiché sous forme de carte avec son nombre de lignes et de colonnes. Sélectionnez les onglets souhaités. Désactivez **Importer les Enregistrements** si vous souhaitez uniquement la structure des Champs sans les données.
- Cliquez sur **Démarrer l’importation** et laissez la boîte de dialogue ouverte. Elle indique la progression Table par Table et, à la fin, le nombre d’Enregistrements reçus par chaque Table. Après l’importation d’une nouvelle Base, utilisez **Ouvrir la Base** pour accéder directement au résultat.
+ Cliquez sur **Démarrer l’importation** et laissez la boîte de dialogue ouverte. Elle indique la progression Table par Table et, à la fin, le nombre d’Enregistrements reçus par chaque Table. Après l’importation d’un nouveau Projet, utilisez **Ouvrir le Projet** pour accéder directement au résultat.
diff --git a/fr/basic/view/toolbar.mdx b/fr/basic/view/toolbar.mdx
index dd73ffb8..6906ced2 100644
--- a/fr/basic/view/toolbar.mdx
+++ b/fr/basic/view/toolbar.mdx
@@ -148,9 +148,9 @@ Utilisez l’option `Trier automatiquement les Enregistrements` dans le menu de
## Partager la Vue
-**Partager la Vue** publie la Vue actuelle sous forme de lien. Les visiteurs voient les données et la mise en page de cette Vue. Cela ne revient pas à les inviter en tant que collaborateurs de la Base.
+**Partager la Vue** publie la Vue actuelle sous forme de lien. Les visiteurs voient les données et la mise en page de cette Vue. Cela ne revient pas à les inviter en tant que collaborateurs du Projet.
-Pour partager une Base entière, une Table précise ou un dossier, utilisez le partage de Base dans [Base](/fr/basic/base).
+Pour partager un Projet entier, une Table précise ou un dossier, utilisez le partage de Projet dans [Projet](/fr/basic/base).
| Option de partage | Idéal pour |
| --- | --- |
@@ -240,5 +240,5 @@ Si la Vue est verrouillée ou si vous n’êtes pas autorisé à la modifier, vo
## Remarques
- La modification des filtres, des groupes, des tris, des Champs visibles ou de la hauteur des lignes affecte tous les utilisateurs de la Vue actuelle, sauf si vous êtes en mode Personnel.
-- Partager la Vue publie le résultat de la Vue actuelle, et non l’ensemble des autorisations de la Base. Pour une collaboration continue, utilisez les autorisations des membres ou le partage de Base.
+- Partager la Vue publie le résultat de la Vue actuelle, et non l’ensemble des autorisations du Projet. Pour une collaboration continue, utilisez les autorisations des membres ou le partage de Projet.
- Dans les deux modes, les modifications apportées aux valeurs des cellules restent synchronisées pour tous.
diff --git a/fr/deploy/env.mdx b/fr/deploy/env.mdx
index cfeef0ed..632ff85c 100644
--- a/fr/deploy/env.mdx
+++ b/fr/deploy/env.mdx
@@ -71,7 +71,7 @@ mode: "wide"
| BACKEND_MAIL_AUTH_USER | Nom d’utilisateur d’authentification du serveur de messagerie par défaut | - | - | username |
| BACKEND_MAIL_AUTH_PASS | Mot de passe d’authentification du serveur de messagerie par défaut | - | - | usertoken |
| BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH | Longueur maximale du nom de l’invitant dans les objets des e-mails d’invitation. Une valeur vide ou 0 désactive la troncature | - | - | 32 |
-| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Longueur maximale du nom de l’Espace ou de la Base dans les objets des e-mails d’invitation. Une valeur vide ou 0 désactive la troncature | - | - | 32 |
+| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Longueur maximale du nom de l’Espace ou du Projet dans les objets des e-mails d’invitation. Une valeur vide ou 0 désactive la troncature | - | - | 32 |
| **Configuration Session/JWT** | | | | |
| BACKEND_SESSION_EXPIRES_IN | Durée d’expiration de la session | 7d | - | 7d |
| BACKEND_SESSION_COOKIE_SECURE | Indique si le cookie de session doit être sécurisé | false | - | true |
@@ -93,7 +93,7 @@ mode: "wide"
| TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | Nombre maximal d’Enregistrements par mutation | 20000 | - | 20000 |
| TABLE_LIMIT_COMPUTED_CELL_VALUE_MAX_BYTES | Nombre maximal d’octets de valeur de cellule calculée | 262144 | - | 262144 |
| TABLE_LIMIT_FORMULA_MAX_LENGTH | Longueur maximale de formule | 8192 | - | 8192 |
-| TABLE_LIMIT_TABLES_PER_BASE_MAX | Nombre maximal de Tables par Base | 1000 | - | 1000 |
+| TABLE_LIMIT_TABLES_PER_BASE_MAX | Nombre maximal de Tables par Projet | 1000 | - | 1000 |
| TABLE_LIMIT_FIELDS_PER_TABLE_MAX | Nombre maximal de Champs par Table | 500 | - | 500 |
| TABLE_LIMIT_VIEWS_PER_TABLE_MAX | Nombre maximal de Vues par Table | 100 | - | 100 |
| TABLE_LIMIT_CREATE_TABLE_FIELDS_MAX | Nombre maximal de Champs acceptés lors de la création d’une Table | 1000 | - | 1000 |
@@ -133,10 +133,10 @@ mode: "wide"
| TELEMETRY_REPORT_DISABLED | Désactive les rapports de télémétrie Auto-hébergé, y compris les rapports de conformité des licences des instances connectées | false | - | true |
| **Configuration de la base de données** | | | | |
| PRISMA_DATABASE_URL | URL de connexion à la base de données, doit être configurée | - | Oui | postgresql://teable:teable@127.0.0.1:5432/teable |
-| PUBLIC_DATABASE_PROXY | Adresse de base de données accessible de l’extérieur (hôte:port) utilisée dans les identifiants générés par le panneau « Connexion à la base de données » de la base ; définissez-la pour activer l’accès SQL externe en lecture seule | - | - | db.example.com:42345 |
+| PUBLIC_DATABASE_PROXY | Adresse de base de données accessible de l’extérieur (hôte:port) utilisée dans les identifiants générés par le panneau « Connexion à la base de données » du projet ; définissez-la pour activer l’accès SQL externe en lecture seule | - | - | db.example.com:42345 |
| PRISMA_TRANSACTION_TIMEOUT | Durée maximale (ms) pendant laquelle une transaction peut s’exécuter avant expiration. Augmentez-la pour les transactions longues (par ex., mises à jour en masse avec de nombreuses clés étrangères) | 5000 | - | 60000 |
| PRISMA_TRANSACTION_MAX_WAIT | Durée maximale (ms) d’attente pour acquérir une transaction du pool | 2000 | - | 5000 |
-| BIG_TRANSACTION_TIMEOUT | Délai d’expiration (ms) des grandes transactions internes, comme l’exportation de grandes Bases | 600000 | - | 1200000 |
+| BIG_TRANSACTION_TIMEOUT | Délai d’expiration (ms) des grandes transactions internes, comme l’exportation de grands Projets | 600000 | - | 1200000 |
## Secrets et rotation {#secrets-and-rotation}
diff --git a/it/api-doc/get-id.mdx b/it/api-doc/get-id.mdx
index bdd535c7..cce51cef 100644
--- a/it/api-doc/get-id.mdx
+++ b/it/api-doc/get-id.mdx
@@ -14,11 +14,11 @@ Fai clic sullo Spazio desiderato e copia dall'URL la stringa che inizia con 'spc
## BaseId
-Fai clic sulla Base desiderata e copia dall'URL la stringa che inizia con 'bse', ad esempio: `bseXXXXXXXXXX`
+Fai clic sul Progetto desiderato e copia dall'URL la stringa che inizia con 'bse', ad esempio: `bseXXXXXXXXXX`
diff --git a/it/api-doc/oauth.mdx b/it/api-doc/oauth.mdx
index 5baa393a..93efbd5e 100644
--- a/it/api-doc/oauth.mdx
+++ b/it/api-doc/oauth.mdx
@@ -33,7 +33,7 @@ Gli ambiti definiscono le azioni che l'app OAuth può eseguire. Gli ambiti dispo
| Risorsa | Ambiti |
|----------|--------|
| **App** | `app\|create`, `app\|read`, `app\|update`, `app\|delete` |
-| **Base** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
+| **Progetto** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
| **Tabella** | `table\|create`, `table\|delete`, `table\|export`, `table\|import`, `table\|read`, `table\|update`, `table\|trash_read`, `table\|trash_update`, `table\|trash_reset` |
| **Vista** | `view\|create`, `view\|delete`, `view\|read`, `view\|update` |
| **Campo** | `field\|create`, `field\|delete`, `field\|read`, `field\|update` |
@@ -296,14 +296,14 @@ curl https://app.teable.ai/api/table/TABLE_ID/record \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-In genere, il primo passaggio dopo aver ottenuto un token consiste nel recuperare tutte le Base accessibili all'utente corrente:
+In genere, il primo passaggio dopo aver ottenuto un token consiste nel recuperare tutti i Progetti accessibili all'utente corrente:
```bash
curl https://app.teable.ai/api/base/access/all \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Questo endpoint restituisce tutte le Base a cui l'utente corrente è autorizzato ad accedere. Puoi utilizzare il `baseId` presente nella risposta per le chiamate API successive.
+Questo endpoint restituisce tutti i Progetti a cui l'utente corrente è autorizzato ad accedere. Puoi utilizzare il `baseId` presente nella risposta per le chiamate API successive.
## Aggiornare i token di accesso
diff --git a/it/api-doc/record/interface.mdx b/it/api-doc/record/interface.mdx
index 05b57c3d..b6e6b6cf 100644
--- a/it/api-doc/record/interface.mdx
+++ b/it/api-doc/record/interface.mdx
@@ -2,7 +2,7 @@
title: "Interfaccia dei Campi dei Record"
---
-Il Campo lookup non è un tipo di Campo specifico. È possibile eseguire il lookup di qualsiasi tipo di Campo da una Base collegata. Il tipo di un Campo lookup è determinato dal Campo originale nella Base collegata e dispone della proprietà isLookup. I Campi lookup non possono essere modificati.
+Il Campo lookup non è un tipo di Campo specifico. È possibile eseguire il lookup di qualsiasi tipo di Campo da un Progetto collegato. Il tipo di un Campo lookup è determinato dal Campo originale nel Progetto collegato e dispone della proprietà isLookup. I Campi lookup non possono essere modificati.
In alcuni casi, tutti i valori restituiti dai Campi possono avere `isMultipleCellValue: true`:
diff --git a/it/api-doc/sql-query.mdx b/it/api-doc/sql-query.mdx
index e2494bfb..53cc16b8 100644
--- a/it/api-doc/sql-query.mdx
+++ b/it/api-doc/sql-query.mdx
@@ -11,12 +11,12 @@ Teable consente di collegarsi al database PostgreSQL sottostante tramite strumen
### Creare una connessione al database
-1. **Apri una Tabella**: per prima cosa, apri una Tabella qualsiasi nella Base a cui vuoi collegarti.
-2. **Accedi alla pagina Progettazione**: fai clic sull'icona ⚙️ nell'angolo in alto a destra per accedere alla pagina Progettazione della Base.
+1. **Apri una Tabella**: per prima cosa, apri una Tabella qualsiasi nel Progetto a cui vuoi collegarti.
+2. **Accedi alla pagina Progettazione**: fai clic sull'icona ⚙️ nell'angolo in alto a destra per accedere alla pagina Progettazione del Progetto.
@@ -50,7 +50,7 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
**Nota:** in PostgreSQL, racchiudi i nomi di schemi e Tabelle tra virgolette doppie `"` per mantenere la distinzione tra maiuscole e minuscole.
Per scrivere questa query, devi conoscere tre elementi:
-- **Nome dello schema (BaseId)**: l'identificatore della Base che inizia con `bse`
+- **Nome dello schema (BaseId)**: l'identificatore del Progetto che inizia con `bse`
- **Nome della Tabella**: il nome fisico della Tabella in PostgreSQL
- **Nomi dei Campi**: i nomi effettivi delle colonne nel database
@@ -58,27 +58,27 @@ Le sezioni seguenti spiegano come trovare ciascuno di questi elementi.
### Trovare il BaseId (nome dello schema)
-Ogni Base in Teable corrisponde a uno **schema** in PostgreSQL. Il BaseId è il nome dello schema utilizzato nelle query SQL.
+Ogni Progetto in Teable corrisponde a uno **schema** in PostgreSQL. Il BaseId è il nome dello schema utilizzato nelle query SQL.
**Metodo 1:** osserva l'URL: la stringa che inizia con `bse` è il BaseId.
-**Metodo 2:** nell'interfaccia Progettazione della Base, il nome dello schema visualizzato è il BaseId.
+**Metodo 2:** nell'interfaccia Progettazione del Progetto, il nome dello schema visualizzato è il BaseId.
### Trovare i nomi delle Tabelle
-I nomi delle Tabelle nell'interfaccia di Teable non vengono sincronizzati automaticamente con i nomi fisici delle Tabelle del database. Controlla il nome effettivo della Tabella del database nell'interfaccia Progettazione della Base.
+I nomi delle Tabelle nell'interfaccia di Teable non vengono sincronizzati automaticamente con i nomi fisici delle Tabelle del database. Controlla il nome effettivo della Tabella del database nell'interfaccia Progettazione del Progetto.
diff --git a/it/api-doc/token.mdx b/it/api-doc/token.mdx
index 0aa63167..d91b277a 100644
--- a/it/api-doc/token.mdx
+++ b/it/api-doc/token.mdx
@@ -15,7 +15,7 @@ Se stai creando un'integrazione multi-tenant per utenti esterni, usa invece OAut
3. Aggiungi al token gli ambiti di autorizzazione appropriati.
-4. Specifica a quali Base e Spazi può accedere il token.
+4. Specifica a quali Progetti e Spazi può accedere il token.
Una volta creato, il token verrà mostrato una sola volta. Ti consigliamo di copiarlo e conservarlo in un luogo sicuro.
diff --git a/it/basic/admin-panel/announcements.mdx b/it/basic/admin-panel/announcements.mdx
index acddb878..0bb5ea0e 100644
--- a/it/basic/admin-panel/announcements.mdx
+++ b/it/basic/admin-panel/announcements.mdx
@@ -15,7 +15,7 @@ Fai clic su **Pubblica annuncio** e compila il modulo. L'anteprima laterale most
| Impostazione | Elemento controllato |
| --- | --- |
-| **Formato** | Dove appare l'annuncio: **Banner** nella parte superiore dell'app, **Toast** come notifica temporanea, **Finestra modale** come finestra di dialogo che interrompe l'attività o **Scheda nella barra laterale** nelle barre laterali di Spazio e Base. |
+| **Formato** | Dove appare l'annuncio: **Banner** nella parte superiore dell'app, **Toast** come notifica temporanea, **Finestra modale** come finestra di dialogo che interrompe l'attività o **Scheda nella barra laterale** nelle barre laterali di Spazio e Progetto. |
| **Livello** | Il tono mostrato agli utenti: **Informazioni**, **Manutenzione**, **Critico** o **Risolto**. |
| Titolo e **Corpo** | Il testo dell'annuncio. |
| **Inizia alle** / **Termina alle** | L'intervallo durante il quale viene mostrato l'annuncio. L'ora di fine deve essere successiva a quella di inizio. |
diff --git a/it/basic/admin-panel/audit-log.mdx b/it/basic/admin-panel/audit-log.mdx
index ebdf4c12..6d5d5048 100644
--- a/it/basic/admin-panel/audit-log.mdx
+++ b/it/basic/admin-panel/audit-log.mdx
@@ -11,9 +11,9 @@ Il **Registro di controllo** consente agli amministratori di esaminare le attivi
## Cosa puoi esaminare
-Il registro di controllo copre le attività comuni di amministrazione e collaborazione, tra cui Spazi, Base, Tabelle, Viste, Campi, Record, condivisioni, inviti, token di accesso e Matrice delle autorizzazioni.
+Il registro di controllo copre le attività comuni di amministrazione e collaborazione, tra cui Spazi, Progetti, Tabelle, Viste, Campi, Record, condivisioni, inviti, token di accesso e Matrice delle autorizzazioni.
-Ogni voce di registro mostra l'ora dell'operazione, l'operatore, il tipo di azione, la Base o lo Spazio correlato e l'origine della richiesta. Apri una voce di registro per visualizzarne i dettagli.
+Ogni voce di registro mostra l'ora dell'operazione, l'operatore, il tipo di azione, il Progetto o lo Spazio correlato e l'origine della richiesta. Apri una voce di registro per visualizzarne i dettagli.
## Intervenire su un operatore
@@ -30,10 +30,10 @@ Usa i filtri nella parte superiore della pagina per restringere l'elenco dei reg
- **Seleziona operatore**: mostra le azioni eseguite da un utente specifico.
- **Seleziona Spazio**: mostra le attività all'interno di uno Spazio specifico.
-- **Seleziona Base**: mostra le attività relative a una Base specifica.
-- **Seleziona azione**: filtra per tipo di operazione, ad esempio Record, Campi, Viste, Tabelle, Base, condivisione, Matrice delle autorizzazioni, ruoli della Matrice delle autorizzazioni, Spazi, inviti, utenti e token di accesso.
+- **Seleziona Progetto**: mostra le attività relative a un Progetto specifico.
+- **Seleziona azione**: filtra per tipo di operazione, ad esempio Record, Campi, Viste, Tabelle, Progetti, condivisione, Matrice delle autorizzazioni, ruoli della Matrice delle autorizzazioni, Spazi, inviti, utenti e token di accesso.
-Se un utente, una Base o uno Spazio è stato eliminato, la voce rimane nel registro e la risorsa viene contrassegnata come eliminata.
+Se un utente, un Progetto o uno Spazio è stato eliminato, la voce rimane nel registro e la risorsa viene contrassegnata come eliminata.
## Consultare elenchi di registro estesi
diff --git a/it/basic/admin-panel/computed-outbox.mdx b/it/basic/admin-panel/computed-outbox.mdx
index 50123581..a3cc13e0 100644
--- a/it/basic/admin-panel/computed-outbox.mdx
+++ b/it/basic/admin-panel/computed-outbox.mdx
@@ -30,7 +30,7 @@ Per impostazione predefinita, ogni riga rappresenta un'attività e cambia stato
Per restringere l'elenco:
- Fai clic sui riquadri di stato sopra la Tabella per filtrare in base allo stato: **In attesa**, **Attivo**, **Ritardato**, **Non riuscito**, **Completato (conservato)** e così via. Puoi selezionarne più di uno contemporaneamente; passando il puntatore su un riquadro viene spiegato il significato dello stato.
-- Filtra per **Spazio**, **Base**, **Causa** o **Esito**, cerca un'attività, una Base, uno Spazio o un errore oppure imposta un tempo minimo di elaborazione per far emergere le attività lente.
+- Filtra per **Spazio**, **Progetto**, **Causa** o **Esito**, cerca un'attività, un Progetto, uno Spazio o un errore oppure imposta un tempo minimo di elaborazione per far emergere le attività lente.
- Fai clic su una riga per aprire la **Discendenza dei calcoli**: timestamp della coda, ritardo di consegna, tempo di elaborazione, motivo completo dell'errore con SQL oscurato per una consegna non riuscita e i dettagli di propagazione descritti di seguito.
**Completato** non significa che l'attività abbia eseguito operazioni. Il badge dell'esito indica cosa ha effettivamente fatto la consegna: **Elaborato** ha eseguito l'attività, **Nessuna operazione** non ha trovato altro da fare, **Rinviato** l'ha riprogrammata per un momento successivo e **Parcheggiato** indica che il suo ambito è in pausa. Il filtro **Esito** restringe l'elenco in base a tale risultato e mostra quante consegne comprende ciascuno, pertanto abbinando **Completato (conservato)** a **Elaborato** rimangono soltanto le consegne che hanno realmente eseguito l'attività.
@@ -58,7 +58,7 @@ Quando un valore calcolato appare errato o arriva in ritardo, apri **Discendenza
Il conteggio **Non riuscite** e la **Manutenzione anomalie** mostrano tipi di problemi differenti, pertanto i numeri possono non coincidere.
-**Manutenzione anomalie** raccoglie le anomalie in gruppi di problemi, uno per Base, Tabella di origine ed errore, rendendo semplice individuare un'unica causa principale. Esamina il motivo dell'errore e correggi il problema sottostante prima di eseguire qualsiasi ripristino. Espandi un gruppo per leggerne i dettagli dell'errore e le attività incluse; tali righe servono all'ispezione e il ripristino viene sempre eseguito sull'intero gruppo.
+**Manutenzione anomalie** raccoglie le anomalie in gruppi di problemi, uno per Progetto, Tabella di origine ed errore, rendendo semplice individuare un'unica causa principale. Esamina il motivo dell'errore e correggi il problema sottostante prima di eseguire qualsiasi ripristino. Espandi un gruppo per leggerne i dettagli dell'errore e le attività incluse; tali righe servono all'ispezione e il ripristino viene sempre eseguito sull'intero gruppo.
Le azioni offerte da un gruppo dipendono dal relativo tipo:
@@ -70,7 +70,7 @@ Le azioni offerte da un gruppo dipendono dal relativo tipo:
Dopo il ripristino di un gruppo, Teable indica quante attività ha ripristinato, quante sono state appena accodate o erano già in coda e quante sono state consegnate o rinviate. I worker elaborano quindi il gruppo nel rispetto dei limiti correnti di concorrenza e suddivisione delle attività.
-Un gruppo contrassegnato come **Base eliminata** appartiene a una Base non più esistente. Il suo ripristino fallirebbe di nuovo immediatamente, pertanto **Elimina gruppo** è l'unica azione disponibile.
+Un gruppo contrassegnato come **Progetto eliminato** appartiene a un Progetto non più esistente. Il suo ripristino fallirebbe di nuovo immediatamente, pertanto **Elimina gruppo** è l'unica azione disponibile.
Lo spostamento di una Tabella nel cestino non crea più anomalie in questa sezione. Un'attività di calcolo che fa ancora riferimento a una Tabella nel cestino ignora i passaggi che la leggono, completa quelli destinati alle Tabelle attive e termina.
@@ -101,8 +101,8 @@ La sezione della coda include due controlli di concorrenza. Ciascuno imposta una
| Controllo | Elemento limitato |
| --- | --- |
| **Concorrenza per processo** | Numero di attività di calcolo gestite contemporaneamente da ciascun processo worker. |
-| **Limiti di acquisizione per Base** | Numero di attività di calcolo eseguite contemporaneamente per una Base (**Per Base**) e per una Tabella di origine al suo interno (**Per Tabella iniziale**). Entrambi hanno come valore predefinito 2 e accettano valori da 1 a 16. |
+| **Limiti di acquisizione per Progetto** | Numero di attività di calcolo eseguite contemporaneamente per un Progetto (**Per Progetto**) e per una Tabella di origine al suo interno (**Per Tabella iniziale**). Entrambi hanno come valore predefinito 2 e accettano valori da 1 a 16. |
-Aumenta i limiti di acquisizione quando il collo di bottiglia è una singola Base molto attiva, e la concorrenza per processo quando sono accodate contemporaneamente molte Base.
+Aumenta i limiti di acquisizione quando il collo di bottiglia è un singolo Progetto molto attivo, e la concorrenza per processo quando sono accodati contemporaneamente molti Progetti.
Una concorrenza maggiore aumenta il carico sul database. Gli Spazi che archiviano i dati in un [tenant di database](/it/basic/admin-panel/database-tenant) mantengono i valori predefiniti dell'ambiente per i limiti di acquisizione, poiché i relativi pool di connessioni sono dimensionati per tali valori.
diff --git a/it/basic/admin-panel/database-tenant.mdx b/it/basic/admin-panel/database-tenant.mdx
index 18c0fba9..e4a3ef89 100644
--- a/it/basic/admin-panel/database-tenant.mdx
+++ b/it/basic/admin-panel/database-tenant.mdx
@@ -26,6 +26,6 @@ Da **Amministrazione di sistema** → **BYODB**, un amministratore dell'istanza
No. Indica lo Spazio Teable i cui dati sono archiviati in tale database.
- No. Modifica la posizione in cui Teable archivia e gestisce i propri dati dello Spazio. Tu fornisci un database PostgreSQL ospitato altrove e Teable crea e gestisce al suo interno i propri dati. Le Tabelle e i Record esistenti in tale database non vengono collegati a Teable né importati automaticamente come Base.
+ No. Modifica la posizione in cui Teable archivia e gestisce i propri dati dello Spazio. Tu fornisci un database PostgreSQL ospitato altrove e Teable crea e gestisce al suo interno i propri dati. Le Tabelle e i Record esistenti in tale database non vengono collegati a Teable né importati automaticamente come Progetti.
diff --git a/it/basic/admin-panel/multitenancy.mdx b/it/basic/admin-panel/multitenancy.mdx
index 61199d1f..62cfe662 100644
--- a/it/basic/admin-panel/multitenancy.mdx
+++ b/it/basic/admin-panel/multitenancy.mdx
@@ -16,10 +16,10 @@ Un'istanza Teable può contenere più tenant organizzativi, ciascuno con membri,
Istanza Teable
├── Tenant organizzativo A
│ ├── Amministratori dell'organizzazione, membri e reparti
-│ └── Spazi, Base e impostazioni a livello di organizzazione
+│ └── Spazi, Progetti e impostazioni a livello di organizzazione
├── Tenant organizzativo B
│ ├── Amministratori dell'organizzazione, membri e reparti
-│ └── Spazi, Base e impostazioni a livello di organizzazione
+│ └── Spazi, Progetti e impostazioni a livello di organizzazione
└── Tenant organizzativo C
```
@@ -107,7 +107,7 @@ Dal selettore degli Spazi, un amministratore dell'organizzazione può aprire il
| --- | --- |
| **Utenti** | Visualizzare e gestire gli utenti nell'organizzazione corrente |
| **Organizzazione** | Creare, spostare, rinominare ed eliminare reparti e gestirne i membri |
-| **Gestione degli Spazi** | Aggiungere Spazi all'organizzazione o rimuoverli e visualizzare il numero di Spazi e Base |
+| **Gestione degli Spazi** | Aggiungere Spazi all'organizzazione o rimuoverli e visualizzare il numero di Spazi e Progetti |
| **Impostazioni di autenticazione** | Configurare provider di autenticazione di terze parti per l'organizzazione |
| **Impostazioni di sicurezza** | Verificare i domini email affinché i nuovi utenti con tali domini entrino automaticamente nell'organizzazione |
| **Impostazioni dell'istanza** | Modificare il nome dell'organizzazione, l'accesso automatico agli Spazi e l'ambito dei reparti |
diff --git a/it/basic/admin-panel/skills.mdx b/it/basic/admin-panel/skills.mdx
index 243c3dc2..bab4d176 100644
--- a/it/basic/admin-panel/skills.mdx
+++ b/it/basic/admin-panel/skills.mdx
@@ -9,7 +9,7 @@ Percorso: Amministrazione di sistema → Skill
Usa **Skill** per pubblicare skill per l'intera istanza. Una skill aggiunta qui è disponibile in ogni conversazione di AI Chat, App Builder e bot; utilizzala quindi per metodi di lavoro che l'organizzazione dovrebbe condividere per impostazione predefinita, come uno stile editoriale interno, una convenzione per i report o una procedura d'integrazione condivisa.
-Le skill aggiunte dagli utenti altrove rimangono nel rispettivo ambito. Consulta [AI Chat](/it/basic/ai/ai-chat) per le skill personali, della Base e dello Spazio.
+Le skill aggiunte dagli utenti altrove rimangono nel rispettivo ambito. Consulta [AI Chat](/it/basic/ai/ai-chat) per le skill personali, del Progetto e dello Spazio.
## Aggiungere una skill
@@ -34,4 +34,4 @@ L'elenco raggruppa le skill per ambito e mostra l'origine di ciascuna. Le skill
## Quando un nome viene utilizzato due volte
-Una skill pubblicata qui è l'impostazione predefinita dell'istanza. Se una skill della Base, dello Spazio, personale, dell'app o del bot utilizza lo stesso nome, per quella conversazione ha effetto quella con l'ambito più ristretto e la skill dell'istanza viene ignorata.
+Una skill pubblicata qui è l'impostazione predefinita dell'istanza. Se una skill del Progetto, dello Spazio, personale, dell'app o del bot utilizza lo stesso nome, per quella conversazione ha effetto quella con l'ambito più ristretto e la skill dell'istanza viene ignorata.
diff --git a/it/basic/admin-panel/spaces.mdx b/it/basic/admin-panel/spaces.mdx
index 99417a64..38657bfd 100644
--- a/it/basic/admin-panel/spaces.mdx
+++ b/it/basic/admin-panel/spaces.mdx
@@ -8,7 +8,7 @@ description: "Gestisci tutti gli Spazi dell'istanza tramite l'Amministrazione di
### Informazioni sullo Spazio
* **Nome dello Spazio**: nome visualizzato dello Spazio
-* **Base**: numero totale di Base contenute nello Spazio
+* **Progetti**: numero totale di Progetti contenuti nello Spazio
* **Collaboratori**: numero totale di utenti che hanno accesso allo Spazio
* **Data di creazione**: momento di creazione dello Spazio
* **Accesso automatico**: indica se lo Spazio consente ai nuovi utenti di accedere automaticamente
@@ -26,7 +26,7 @@ description: "Gestisci tutti gli Spazi dell'istanza tramite l'Amministrazione di
Quando elimini uno Spazio dall'Amministrazione di sistema:
* Lo Spazio viene immediatamente contrassegnato come eliminato
-* Tutte le Base e i dati nello Spazio diventano inaccessibili
+* Tutti i Progetti e i dati nello Spazio diventano inaccessibili
* I collaboratori perdono l'accesso allo Spazio
* L'operazione non può essere annullata
diff --git a/it/basic/admin-panel/table-query-ops.mdx b/it/basic/admin-panel/table-query-ops.mdx
index 84ac13e4..21afb7ff 100644
--- a/it/basic/admin-panel/table-query-ops.mdx
+++ b/it/basic/admin-panel/table-query-ops.mdx
@@ -26,7 +26,7 @@ La pagina si apre sull'elenco delle Tabelle. I pulsanti di stato in alto riporta
| **Non configurata** | Tabelle senza copertura di ricerca. |
| **Non disponibile** | Tabelle che al momento non possono usare la ricerca indicizzata. La riga ne indica il motivo. |
-Il campo di ricerca accetta nomi o ID di Tabella, Base e Spazio. L'ordinamento è per **Più query lente** oppure **Nome Tabella**. La **Finestra di osservazione** copre l'ultima ora o 24 ore, e tutti i dati di osservazione dell'elenco seguono quella finestra. Le osservazioni vengono conservate per 2 giorni; quelle precedenti non compaiono più nell'elenco.
+Il campo di ricerca accetta nomi o ID di Tabella, Progetto e Spazio. L'ordinamento è per **Più query lente** oppure **Nome Tabella**. La **Finestra di osservazione** copre l'ultima ora o 24 ore, e tutti i dati di osservazione dell'elenco seguono quella finestra. Le osservazioni vengono conservate per 2 giorni; quelle precedenti non compaiono più nell'elenco.
Ogni riga riporta righe e dimensioni stimate della Tabella, richieste e query lente della finestra, metodo di ricerca corrente e copertura dei Campi, numero di indici di filtro/ordinamento, oltre ai suggerimenti in sospeso e alle attività attive. Fai clic sul nome di una Tabella per aprirne il dettaglio.
diff --git a/it/basic/admin-panel/template-admin.mdx b/it/basic/admin-panel/template-admin.mdx
index 1ad7dc31..bbd49bbb 100644
--- a/it/basic/admin-panel/template-admin.mdx
+++ b/it/basic/admin-panel/template-admin.mdx
@@ -1,6 +1,6 @@
---
title: "Amministrazione modelli"
-description: "Gestisci i modelli di flusso di lavoro per la tua organizzazione, consentendo agli utenti di iniziare rapidamente con Base preconfigurate."
+description: "Gestisci i modelli di flusso di lavoro per la tua organizzazione, consentendo agli utenti di iniziare rapidamente con Progetti preconfigurate."
---
Disponibile per il piano Business Self-hosted e versioni successive
@@ -16,12 +16,12 @@ Nell'interfaccia Amministrazione modelli puoi creare e configurare i modelli che
* **Descrizione Markdown**: descrizione dettagliata con supporto per la formattazione RTF
* **Categoria**: raggruppa i modelli per scenari aziendali (ad esempio, Risorse umane, Vendite, Ingegneria)
* **Sistema**: indica se il modello è un modello ufficiale di sistema
-* **Origine**: Base originale utilizzata per creare il modello
+* **Origine**: Progetto originale utilizzata per creare il modello
#### Operazioni sui modelli
* **Nuovo modello**: crea una nuova configurazione di modello
-* **Pubblica snapshot**: acquisisce lo stato corrente della Base di origine. Devi pubblicare uno snapshot prima di poter inserire il modello nell'elenco.
+* **Pubblica snapshot**: acquisisce lo stato corrente del Progetto di origine. Devi pubblicare uno snapshot prima di poter inserire il modello nell'elenco.
* **Stato (Pubblica)**: attiva o disattiva la presenza del modello nel centro modelli. Richiede nome, descrizione e snapshot.
* **Fissa**: fissa i modelli importanti nella parte superiore dell'elenco
* **Elimina**: rimuove la configurazione del modello
@@ -31,7 +31,7 @@ Nell'interfaccia Amministrazione modelli puoi creare e configurare i modelli che
Gli utenti Self-hosted possono importare modelli dal Teable Cloud ufficiale:
1. **Scarica**: ottieni il file `.tea` dal [Centro modelli ufficiale](https://teable.ai/templates)
-2. **Importa**: importa il file `.tea` come nuova Base nel tuo Spazio
+2. **Importa**: importa il file `.tea` come nuovo Progetto nel tuo Spazio
3. **Crea modello**: vai ad Amministrazione modelli > Nuovo modello
-4. **Seleziona origine**: scegli la Base importata come origine
+4. **Seleziona origine**: scegli il Progetto importata come origine
5. **Pubblica**: configura i dettagli, pubblica lo snapshot e abilita lo stato
diff --git a/it/basic/ai/ai-chat.mdx b/it/basic/ai/ai-chat.mdx
index b14f5f4e..fcdf6ecb 100644
--- a/it/basic/ai/ai-chat.mdx
+++ b/it/basic/ai/ai-chat.mdx
@@ -35,7 +35,7 @@ Quando incolli un lungo blocco di testo normale, Teable lo converte in un allega
- **I miei segreti**: apri **+** → **Altro** → **I miei segreti** per salvare chiavi API o altre credenziali in **Impostazioni** → **Integrazioni**. I valori sono tuoi, AI Chat può leggerli come variabili di ambiente durante l'esecuzione e puoi concederli alle singole app e Automazioni. Vedi [Credenziali e integrazioni](/it/basic/credential).
- **Richieste di credenziali**: quando l'IA ha bisogno di un account di terze parti o di un segreto, fissa nella conversazione una scheda di richiesta. Scegli **Collega il mio account** per avviare un flusso OAuth oppure concedi una credenziale che possiedi già. Con **Salta** non la fornisci e l'IA continua con le parti che può completare senza di essa.
- **Scraper**: apri il menu **+**, scegli **Scraper** e seleziona una piattaforma e un tipo di dato. Le voci sono di due tipi: alcune estraggono da un link che incolli, ad esempio **profilo personale** su LinkedIn o **recensioni del prodotto** su Amazon; altre cercano per parola chiave, hashtag o nome, ad esempio **ricerca video** su TikTok o **post di un subreddit** su Reddit. Teable precompila l'istruzione corrispondente nell'input della chat e lascia in fondo la parte che devi completare. **Qualsiasi pagina web** accetta direttamente un link incollato.
-- **Skill**: apri il menu **+** e scegli **Skill** per importare, abilitare, disabilitare o provare le skill nella chat corrente. Durante l'importazione, scegli chi può utilizzarla: **Personale** la mantiene soltanto per te, **Base** la rende disponibile ai collaboratori della Base e **Spazio** a tutti gli utenti dello Spazio. Digita `/` nella casella di input per scegliere una skill abilitata. Per collegare o migrare un sistema esterno, consulta [Collega e migra tutto](/it/basic/ai/connect-everything).
+- **Skill**: apri il menu **+** e scegli **Skill** per importare, abilitare, disabilitare o provare le skill nella chat corrente. Durante l'importazione, scegli chi può utilizzarla: **Personale** la mantiene soltanto per te, **Progetto** la rende disponibile ai collaboratori del Progetto e **Spazio** a tutti gli utenti dello Spazio. Digita `/` nella casella di input per scegliere una skill abilitata. Per collegare o migrare un sistema esterno, consulta [Collega e migra tutto](/it/basic/ai/connect-everything).
- **Utilizzo del contesto**: l'anello accanto alla casella di input mostra la quantità della finestra di contesto del modello attualmente utilizzata dalla conversazione. Fai clic su di esso per visualizzare la percentuale e il numero di token. Quando il contesto si riempie, Teable compatta la conversazione; avvia una nuova chat se desideri invece un contesto vuoto.
- **Gestisci file**: apri **+** → **Altro** → **Gestisci file** per visualizzare i file nella sandbox della chat corrente. Puoi visualizzare in anteprima i file supportati, scaricarli oppure eliminare file e cartelle non più necessari. Prima di poter gestire i file deve esistere una conversazione.
- **Coda dei messaggi**: l'invio di un altro messaggio mentre l'IA è al lavoro non la interrompe. Il messaggio attende in una coda sopra la casella di input e viene inviato al termine dell'esecuzione corrente. Gli elementi in coda mantengono le stesse etichette relative a Tabella, Vista, allegati e selezione presenti nell'input della chat; **Rimuovi** ne elimina uno, **...** → **Modifica messaggio** lo riporta nella casella di input e un elemento di solo testo offre anche **Intervieni** per fornire immediatamente il testo al turno in esecuzione anziché attendere.
@@ -129,9 +129,9 @@ Quando una risposta presenta più file contemporaneamente, usa **Scarica tutto**
### Memoria
-La memoria archivia le informazioni che chiedi esplicitamente a Cuppy di ricordare. La memoria è circoscritta per utente e Base: ogni utente in ogni Base dispone di un contesto di memoria indipendente e la memoria salvata in un'altra Base non appare automaticamente in quella corrente.
+La memoria archivia le informazioni che chiedi esplicitamente a Cuppy di ricordare. La memoria è circoscritta per utente e Progetto: ogni utente in ogni Progetto dispone di un contesto di memoria indipendente e la memoria salvata in un altro Progetto non appare automaticamente nel Progetto corrente.
-- Salvare la memoria nella Base corrente
+- Salvare la memoria nel Progetto corrente
Indica nella conversazione ciò che Cuppy deve ricordare:
@@ -139,12 +139,12 @@ Indica nella conversazione ciò che Cuppy deve ricordare:
Ricorda xxx.
```
-- Riutilizzare la memoria da un'altra Base
+- Riutilizzare la memoria da un altro Progetto
-Chiedi a Cuppy di leggere un'altra Base e salvare le parti pertinenti in quella corrente:
+Chiedi a Cuppy di leggere un altro Progetto e salvare le parti pertinenti nel Progetto corrente:
```text
-Cuppy, leggi la memoria della Base con ID bsexxxxxxxxxxxx e salva le informazioni pertinenti nella Base corrente.
+Cuppy, leggi la memoria del Progetto con ID bsexxxxxxxxxxxx e salva le informazioni pertinenti nel Progetto corrente.
```
### Gestire le attività lunghe
@@ -228,8 +228,8 @@ Apri **+** → **Altro** → **Gestisci artefatti** per sfogliare tutto ciò che
Digita `@` nella casella di input e seleziona il nodo a cui vuoi che AI Chat faccia riferimento. Per le selezioni nella Vista griglia, puoi anche selezionare righe, colonne, una singola cella o un intervallo di celle, quindi usare **Aggiungi alla chat** dal menu contestuale.
-
- Sì. L'IA non è limitata alla Base a cui appartiene la chat; può cercare le altre Base a cui hai accesso e lavorare al loro interno. Indica la Base nella richiesta, ad esempio «confronta questa Tabella con la Tabella degli ordini nella Base Vendite». `@` elenca soltanto i nodi della Base corrente e qualsiasi operazione non indirizzata altrove avviene comunque nella Base della chat.
+
+ Sì. L'IA non è limitata al Progetto a cui appartiene la chat; può cercare gli altri Progetti a cui hai accesso e lavorare al loro interno. Indica il Progetto nella richiesta, ad esempio «confronta questa Tabella con la Tabella degli ordini nel Progetto Vendite». `@` elenca soltanto i nodi del Progetto corrente e qualsiasi operazione non indirizzata altrove avviene comunque nel Progetto della chat.
@@ -239,8 +239,8 @@ Apri **+** → **Altro** → **Gestisci artefatti** per sfogliare tutto ciò che
Non per impostazione predefinita. Soltanto tu puoi aprire i tuoi artefatti. Attiva **Abilita condivisione** nel visualizzatore e invia il link, scegliendo **Membri dello Spazio** se l'artefatto deve rimanere all'interno dello Spazio.
-
- No. La memoria è circoscritta per utente e Base. Se vuoi riutilizzare la memoria da un'altra Base, chiedi a Cuppy di leggere la memoria di quella Base e salvare le parti pertinenti in quella corrente.
+
+ No. La memoria è circoscritta per utente e Progetto. Se vuoi riutilizzare la memoria da un altro Progetto, chiedi a Cuppy di leggere la memoria di quel Progetto e salvare le parti pertinenti nel Progetto corrente.
@@ -268,11 +268,11 @@ Apri **+** → **Altro** → **Gestisci artefatti** per sfogliare tutto ciò che
- Apri il menu **+** e scegli **Skill** per importare o gestire le skill oppure digita `/` nella casella di input per sceglierne una abilitata. Durante l'importazione scegli chi può utilizzarla: personale per le tue chat, Base quando serve ai collaboratori della stessa Base e Spazio quando serve a tutti gli utenti dello Spazio. Gli utenti autorizzati a gestire la Base possono aggiungere skill della Base, mentre proprietari e creatori dello Spazio possono aggiungere skill dello Spazio. Se AI Chat presenta un file `.skill`, usa **Installa** nella scheda del file per aggiungerlo.
+ Apri il menu **+** e scegli **Skill** per importare o gestire le skill oppure digita `/` nella casella di input per sceglierne una abilitata. Durante l'importazione scegli chi può utilizzarla: personale per le tue chat, Progetto quando serve ai collaboratori dello stesso Progetto e Spazio quando serve a tutti gli utenti dello Spazio. Gli utenti autorizzati a gestire il Progetto possono aggiungere skill del Progetto, mentre proprietari e creatori dello Spazio possono aggiungere skill dello Spazio. Se AI Chat presenta un file `.skill`, usa **Installa** nella scheda del file per aggiungerlo.
- È attiva sempre una sola versione e quella condivisa con il team prevale su una copia personale: una skill della Base prevale su una skill dello Spazio e una skill dello Spazio prevale su una personale. In una conversazione di un'app o di un bot, la skill aggiunta per tale app o bot ha la precedenza. Per spostare tutti a una nuova versione, aggiorna la copia nella Base o nello Spazio.
+ È attiva sempre una sola versione e quella condivisa con il team prevale su una copia personale: una skill del Progetto prevale su una skill dello Spazio e una skill dello Spazio prevale su una personale. In una conversazione di un'app o di un bot, la skill aggiunta per tale app o bot ha la precedenza. Per spostare tutti a una nuova versione, aggiorna la copia nel Progetto o nello Spazio.
diff --git a/it/basic/ai/app-builder.mdx b/it/basic/ai/app-builder.mdx
index 50779bb1..2e282840 100644
--- a/it/basic/ai/app-builder.mdx
+++ b/it/basic/ai/app-builder.mdx
@@ -5,21 +5,21 @@ description: Trasforma i dati in applicazioni web personalizzate usando l'IA.
Disponibile in tutti i piani Cloud; Self-hosted richiede il piano Business o superiore.
-Teable App Builder consente di trasformare le tue Base di dati in applicazioni web complete e personalizzate senza scrivere codice. Combinando la potenza della struttura dei dati con la progettazione basata sull'IA, puoi avviare in pochi minuti strumenti interni, portali per i clienti e dashboard di dati.
+Teable App Builder consente di trasformare i tuoi Progetti di dati in applicazioni web complete e personalizzate senza scrivere codice. Combinando la potenza della struttura dei dati con la progettazione basata sull'IA, puoi avviare in pochi minuti strumenti interni, portali per i clienti e dashboard di dati.
## Panoramica
App Builder segue un flusso di lavoro «Dal prompt all'app». Descrivi ciò che desideri e l'IA crea per te la struttura, le pagine e la logica dell'applicazione. Puoi quindi perfezionare ogni dettaglio tramite l'editor visivo o il codice.
-Usa App Builder per creare interfacce personalizzate e app autonome. Per l'analisi interattiva dei dati e le domande estemporanee all'interno del database, usa [AI Chat](/it/basic/ai/ai-chat).
+Usa App Builder per creare interfacce personalizzate e app autonome. Per l'analisi interattiva dei dati e le domande estemporanee all'interno del Progetto, usa [AI Chat](/it/basic/ai/ai-chat).
## Creare un'app
Esistono due modi principali per creare un'app:
-1. **Dalla Base**: in qualsiasi Base, fai clic su «Crea app» per generare un'applicazione collegata ai dati correnti.
+1. **Dal Progetto**: in qualsiasi Progetto, fai clic su «Crea app» per generare un'applicazione collegata ai dati correnti.
2. **Dalla chat**: apri AI Chat e scrivi «Crea un'app CRM per questa Tabella clienti».
## Interfaccia dell'editor di app
@@ -37,7 +37,7 @@ Il centro di comando della tua app.
- **Modifica con linguaggio naturale**: descrivi modifiche come *«Rendi blu l'intestazione»* o *«Aggiungi un modulo per l'invio di nuovi Record»*.
- **Indirizzamento automatico**: l'IA comprende a quale componente o pagina fai riferimento e lo modifica direttamente.
- **Integrazioni**: quando l'attività dell'app richiede l'accesso a un account di terze parti, App Builder può mostrare nel pannello della chat una scheda come **Collega Slack**. Fai clic su **Collega** per autorizzare tramite OAuth. Fai clic su **Ignora** per annullare l'autorizzazione; l'IA continua con le parti che può completare senza tale connessione.
-- **Skill**: apri il menu **+** e scegli **Skill** per gestire le skill della conversazione di questa app. Una skill aggiunta qui è disponibile soltanto per l'app corrente; qui è inoltre possibile utilizzare le skill condivise con la Base e lo Spazio dell'app. Digita `/` nella casella di input per scegliere una skill abilitata.
+- **Skill**: apri il menu **+** e scegli **Skill** per gestire le skill della conversazione di questa app. Una skill aggiunta qui è disponibile soltanto per l'app corrente; qui è inoltre possibile utilizzare le skill condivise con il Progetto e lo Spazio dell'app. Digita `/` nella casella di input per scegliere una skill abilitata.
- **Gestisci file**: apri **+** → **Altro** → **Gestisci file** per visualizzare i file nella sandbox dell'app. Usalo per visualizzare in anteprima i file supportati, scaricare i file generati oppure eliminare file e cartelle non più necessari.
- **Cancella conversazione**: se la conversazione corrente ha perso il filo, fai clic su **Cancella chat** nell'angolo in basso a destra del pannello per avviare una nuova sessione. In questo modo viene cancellata la cronologia della chat per la conversazione corrente, ma l'app non viene eliminata. Al primo utilizzo viene mostrata una conferma e puoi scegliere di non visualizzarla più in futuro.
diff --git a/it/basic/ai/connect-everything/migrate-airtable.mdx b/it/basic/ai/connect-everything/migrate-airtable.mdx
index 218f0f9e..28465635 100644
--- a/it/basic/ai/connect-everything/migrate-airtable.mdx
+++ b/it/basic/ai/connect-everything/migrate-airtable.mdx
@@ -13,7 +13,7 @@ In [**Teable AI Chat**](/it/basic/ai/ai-chat), digita `/` e seleziona la skill *
## Avviare la migrazione
1. Crea un [token di accesso personale Airtable](https://airtable.com/create/tokens) con accesso alle Base che desideri migrare.
-2. Apri la Base Teable di destinazione e avvia AI Chat.
+2. Apri il Progetto Teable di destinazione e avvia AI Chat.
3. Digita `/`, seleziona **Connect Everything** e fornisci il token.
4. Chiedi a Teable AI di migrare la Base Airtable, quindi verifica il risultato.
diff --git a/it/basic/ai/connect-everything/migrate-baserow.mdx b/it/basic/ai/connect-everything/migrate-baserow.mdx
index b82814e1..0f8a558c 100644
--- a/it/basic/ai/connect-everything/migrate-baserow.mdx
+++ b/it/basic/ai/connect-everything/migrate-baserow.mdx
@@ -13,7 +13,7 @@ Usa **Connect Everything** in [Teable AI Chat](/it/basic/ai/ai-chat) per collega
## Avviare la migrazione
1. Copia l'URL dell'istanza Baserow e crea un [token del database Baserow](https://baserow.io/user-docs/personal-api-tokens) con accesso in lettura alle tabelle di origine.
-2. Apri la Base Teable di destinazione e avvia AI Chat.
+2. Apri il Progetto Teable di destinazione e avvia AI Chat.
3. Digita `/`, seleziona **Connect Everything** e fornisci l'URL dell'istanza e il token del database.
4. Chiedi a Teable AI di migrare il database Baserow, quindi verifica il risultato.
diff --git a/it/basic/ai/connect-everything/migrate-clickup.mdx b/it/basic/ai/connect-everything/migrate-clickup.mdx
index 909ff4d9..985ad8cc 100644
--- a/it/basic/ai/connect-everything/migrate-clickup.mdx
+++ b/it/basic/ai/connect-everything/migrate-clickup.mdx
@@ -16,7 +16,7 @@ In [**Teable AI Chat**](/it/basic/ai/ai-chat), digita `/` e seleziona **Connect
## Avviare la migrazione
1. In ClickUp, apri **Impostazioni → App**, quindi copia il tuo token API personale. Consulta la [guida all'autenticazione](https://developer.clickup.com/docs/authentication) di ClickUp.
-2. Apri la Base Teable di destinazione e avvia AI Chat.
+2. Apri il Progetto Teable di destinazione e avvia AI Chat.
3. Digita `/`, seleziona **Connect Everything** e fornisci il token API personale.
4. Chiedi a Teable AI di migrare gli Spazi di lavoro ClickUp accessibili e creare le Viste di progetto, le dashboard e le Automazioni necessarie al tuo team.
diff --git a/it/basic/ai/connect-everything/migrate-jira.mdx b/it/basic/ai/connect-everything/migrate-jira.mdx
index 40b6c57a..b8313dcd 100644
--- a/it/basic/ai/connect-everything/migrate-jira.mdx
+++ b/it/basic/ai/connect-everything/migrate-jira.mdx
@@ -16,7 +16,7 @@ In [**Teable AI Chat**](/it/basic/ai/ai-chat), digita `/` e seleziona **Connect
## Avviare la migrazione
1. Crea un [token API Atlassian](https://id.atlassian.com/manage-profile/security/api-tokens) per un account con accesso ai progetti Jira da migrare. Consulta la guida di Atlassian all'[autenticazione di base per le API REST](https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/).
-2. Apri la Base Teable di destinazione e avvia AI Chat.
+2. Apri il Progetto Teable di destinazione e avvia AI Chat.
3. Digita `/`, seleziona **Connect Everything** e fornisci l'URL del sito Jira Cloud, l'email dell'account e il token API.
4. Chiedi a Teable AI di migrare i progetti Jira accessibili e creare le Viste di progetto, le dashboard e le Automazioni necessarie al tuo team.
diff --git a/it/basic/ai/connect-everything/migrate-monday.mdx b/it/basic/ai/connect-everything/migrate-monday.mdx
index 3d06231a..8f36a979 100644
--- a/it/basic/ai/connect-everything/migrate-monday.mdx
+++ b/it/basic/ai/connect-everything/migrate-monday.mdx
@@ -16,7 +16,7 @@ In [**Teable AI Chat**](/it/basic/ai/ai-chat), digita `/` e seleziona **Connect
## Avviare la migrazione
1. In monday.com, apri il menu del profilo, scegli **Sviluppatori** e copia il tuo token API personale. Consulta la [guida all'autenticazione API](https://developer.monday.com/api-reference/docs/authentication) di monday.com.
-2. Apri la Base Teable di destinazione e avvia AI Chat.
+2. Apri il Progetto Teable di destinazione e avvia AI Chat.
3. Digita `/`, seleziona **Connect Everything** e fornisci il token API personale.
4. Chiedi a Teable AI di migrare gli Spazi di lavoro monday.com accessibili e creare le Viste di progetto, le dashboard e le Automazioni necessarie al tuo team.
diff --git a/it/basic/ai/connect-everything/migrate-nocodb.mdx b/it/basic/ai/connect-everything/migrate-nocodb.mdx
index 3b919d10..f0573c86 100644
--- a/it/basic/ai/connect-everything/migrate-nocodb.mdx
+++ b/it/basic/ai/connect-everything/migrate-nocodb.mdx
@@ -13,7 +13,7 @@ Usa **Connect Everything** in [Teable AI Chat](/it/basic/ai/ai-chat) per collega
## Avviare la migrazione
1. Copia l'URL dell'istanza NocoDB e crea un [token API NocoDB](https://nocodb.com/docs/product-docs/account-settings/api-tokens) con accesso al database di origine.
-2. Apri la Base Teable di destinazione e avvia AI Chat.
+2. Apri il Progetto Teable di destinazione e avvia AI Chat.
3. Digita `/`, seleziona **Connect Everything** e fornisci l'URL dell'istanza e il token API.
4. Chiedi a Teable AI di migrare il database NocoDB, quindi verifica il risultato.
diff --git a/it/basic/ai/connect-everything/migrate-smartsheet.mdx b/it/basic/ai/connect-everything/migrate-smartsheet.mdx
index 0f4b76e6..143935c4 100644
--- a/it/basic/ai/connect-everything/migrate-smartsheet.mdx
+++ b/it/basic/ai/connect-everything/migrate-smartsheet.mdx
@@ -16,7 +16,7 @@ In [**Teable AI Chat**](/it/basic/ai/ai-chat), digita `/` e seleziona **Connect
## Avviare la migrazione
1. In Smartsheet, apri **Account → Impostazioni personali → Accesso API**, quindi genera un token di accesso. Consulta la [guida introduttiva all'API](https://developers.smartsheet.com/api/smartsheet/guides/getting-started) di Smartsheet.
-2. Apri la Base Teable di destinazione e avvia AI Chat.
+2. Apri il Progetto Teable di destinazione e avvia AI Chat.
3. Digita `/`, seleziona **Connect Everything** e fornisci il token di accesso e l'ambiente dell'account: standard, Regioni Europa o Gov.
4. Chiedi a Teable AI di migrare gli Spazi di lavoro Smartsheet accessibili e creare le Viste di progetto, le dashboard e le Automazioni necessarie al tuo team.
diff --git a/it/basic/ai/connect-everything/migrate-smartsuite.mdx b/it/basic/ai/connect-everything/migrate-smartsuite.mdx
index d67a979d..a4cf82d9 100644
--- a/it/basic/ai/connect-everything/migrate-smartsuite.mdx
+++ b/it/basic/ai/connect-everything/migrate-smartsuite.mdx
@@ -13,7 +13,7 @@ Usa **Connect Everything** in [Teable AI Chat](/it/basic/ai/ai-chat) per collega
## Avviare la migrazione
1. Ottieni la [chiave API e l'ID dello spazio di lavoro SmartSuite](https://help.smartsuite.com/en/articles/6096587-retrieving-your-api-key-and-workspace-id).
-2. Apri la Base Teable di destinazione e avvia AI Chat.
+2. Apri il Progetto Teable di destinazione e avvia AI Chat.
3. Digita `/`, seleziona **Connect Everything** e fornisci la chiave API e l'ID dello spazio di lavoro.
4. Chiedi a Teable AI di migrare la soluzione SmartSuite, quindi verifica il risultato.
diff --git a/it/basic/ai/overview.mdx b/it/basic/ai/overview.mdx
index 810a0828..ef99bcf1 100644
--- a/it/basic/ai/overview.mdx
+++ b/it/basic/ai/overview.mdx
@@ -45,6 +45,6 @@ Teable integra potenti funzionalità IA in tutta la piattaforma per aiutarti a l
1. **Abilita l'IA** (soltanto Self-hosted): Teable Cloud include l'IA integrata e pronta all'uso. Gli utenti Self-hosted devono prima completare le [Impostazioni IA](/it/basic/admin-panel/ai-setting). Se vuoi collegare i tuoi modelli, continua con [Modello IA personalizzato](/it/basic/ai/custom-model).
2. **Usa AI Chat**: poni domande sui dati o genera grafici
-3. **Crea app**: trasforma la tua Base in un'app web con un semplice prompt
+3. **Crea app**: trasforma il tuo Progetto in un'app web con un semplice prompt
4. **Crea Campi IA**: aggiungi Campi basati sull'IA per elaborare automaticamente i dati
5. **Crea Automazioni**: usa le azioni Generazione IA ed Esegui script nei flussi di lavoro
diff --git a/it/basic/ai/teable-skill.mdx b/it/basic/ai/teable-skill.mdx
index adf8e9dd..8e5a2ca1 100644
--- a/it/basic/ai/teable-skill.mdx
+++ b/it/basic/ai/teable-skill.mdx
@@ -24,7 +24,7 @@ Dopo aver installato la skill, prova questi prompt.
```text Semplici prompt iniziali wrap
-Crea una semplice Tabella CRM in {incolla l'URL della Base}.
+Crea una semplice Tabella CRM in {incolla l'URL del Progetto}.
```
```text File locali → Teable wrap
diff --git a/it/basic/authority-matrix.mdx b/it/basic/authority-matrix.mdx
index 63cb56b1..a7ad9666 100644
--- a/it/basic/authority-matrix.mdx
+++ b/it/basic/authority-matrix.mdx
@@ -1,13 +1,13 @@
---
title: "Panoramica"
-description: "Imposta gli ambiti di accesso per diversi team nella stessa Base, affinché i membri possano visualizzare, modificare o esportare soltanto i dati necessari."
+description: "Imposta gli ambiti di accesso per diversi team nello stesso Progetto, affinché i membri possano visualizzare, modificare o esportare soltanto i dati necessari."
---
{/* mintlify-resync: 2026-05-28 */}
Disponibile per il piano Business e versioni successive
-Quando vendite, finanza, operazioni e dirigenza condividono la stessa Base,
-le autorizzazioni stabiliscono chi può accedere alla Base, quali dati può visualizzare o modificare
+Quando vendite, finanza, operazioni e dirigenza condividono lo stesso Progetto,
+le autorizzazioni stabiliscono chi può accedere al Progetto, quali dati può visualizzare o modificare
e se può importare o esportare dati. La Matrice di autorità aiuta i team
a mantenere i dati in un unico luogo, separando al contempo gli accessi in base alle responsabilità.
@@ -24,7 +24,7 @@ visualizzare i Campi di fatturazione e la dirigenza può visualizzare l'intero s
| Accesso a livello di reparto | Il team vendite può gestire i Record dei clienti, mentre il team finanza vede soltanto i Campi di fatturazione. |
| Record basati sull'assegnatario | I rappresentanti commerciali possono visualizzare e aggiornare soltanto i Record loro assegnati. |
| Inserimento dati limitato | I membri possono creare nuovi Record senza modificare o eliminare quelli esistenti. |
-| Campi sensibili in una Base condivisa | I membri possono visualizzare i Record degli ordini senza vedere i Campi relativi ai pagamenti o ai costi. |
+| Campi sensibili in un Progetto condiviso | I membri possono visualizzare i Record degli ordini senza vedere i Campi relativi ai pagamenti o ai costi. |
| App e flussi di lavoro controllati | I ruoli possono aprire app o flussi di lavoro selezionati, mentre i nodi non autorizzati rimangono nascosti. |
## Funzionamento delle autorizzazioni
@@ -45,7 +45,7 @@ L'elenco dei ruoli include una sezione `Amministratori` e una sezione `Ruoli per
Usa `Aggiungi ruolo` per creare un ruolo personalizzato. Nella pagina dei dettagli del ruolo, assegna
i collaboratori, scrivi una breve descrizione e configura l'accesso a ogni nodo della
-Base:
+Progetto:
Per informazioni sui livelli di autorizzazione di base dello Spazio e della Base, consulta [Autorizzazioni di collaborazione](/it/basic/space/space-permission).
+Per informazioni sui livelli di autorizzazione di progetto dello Spazio e del Progetto, consulta [Autorizzazioni di collaborazione](/it/basic/space/space-permission).
diff --git a/it/basic/authority-matrix/authority-matrix-practical-guide.mdx b/it/basic/authority-matrix/authority-matrix-practical-guide.mdx
index 624a0015..a5004471 100644
--- a/it/basic/authority-matrix/authority-matrix-practical-guide.mdx
+++ b/it/basic/authority-matrix/authority-matrix-practical-guide.mdx
@@ -4,9 +4,9 @@ description: "Configura i ruoli della Matrice di autorità per un team di vendit
---
{/* mintlify-resync: 2026-05-28 */}
-Questa guida utilizza una Base di vendita con tre Tabelle: `Clienti`, `Ordini di vendita`
+Questa guida utilizza un Progetto di vendita con tre Tabelle: `Clienti`, `Ordini di vendita`
e `Prodotti`. L'obiettivo è consentire a ogni ruolo di lavorare con i dati necessari
-senza esporre l'intera Base.
+senza esporre l'intero Progetto.
| Ruolo | Obiettivo di accesso |
| --- | --- |
@@ -26,7 +26,7 @@ senza esporre l'intera Base.
- Apri la pagina Matrice di autorità nella Base e attiva l'interruttore principale. L'utente
+ Apri la pagina Matrice di autorità nel Progetto e attiva l'interruttore principale. L'utente
che la abilita viene aggiunto come amministratore.
diff --git a/it/basic/automation.mdx b/it/basic/automation.mdx
index f792e226..10c1759e 100644
--- a/it/basic/automation.mdx
+++ b/it/basic/automation.mdx
@@ -65,8 +65,8 @@ I tentativi di ripetizione sono contrassegnati come nuovi tentativi e rimandano
| Elemento | Limite |
|---|---|
-| Frequenza di invio delle email | 5 / secondo / Base |
-| Frequenza di ricezione dei webhook | 50 / secondo / Base, 2 / secondo / flusso di lavoro |
+| Frequenza di invio delle email | 5 / secondo / Progetto |
+| Frequenza di ricezione dei webhook | 50 / secondo / Progetto, 2 / secondo / flusso di lavoro |
| Dimensioni del payload dei webhook | 4 MB |
| Quota di esecuzioni e conservazione della cronologia | Varia in base al piano |
@@ -82,7 +82,7 @@ I tentativi di ripetizione sono contrassegnati come nuovi tentativi e rimandano
Teable Cloud può inoltre inviare notifiche critiche per utilizzi insoliti, ad esempio un forte aumento giornaliero o un picco improvviso in un breve periodo. Il sistema utilizza gli schemi recenti delle esecuzioni giornaliere e orarie e le soglie esatte possono cambiare.
- La notifica apre **Impostazioni dello Spazio** → **Fatturazione**. Quando disponibili, mostra il flusso di lavoro e la Base che hanno contribuito al maggior numero di esecuzioni. I promemoria relativi alla quota si basano sulle esecuzioni conteggiate ai fini del limite del piano; i controlli sull'utilizzo insolito possono considerare anche le esecuzioni recenti con stato **riuscito**, **non riuscito** o **in sospeso**.
+ La notifica apre **Impostazioni dello Spazio** → **Fatturazione**. Quando disponibili, mostra il flusso di lavoro e il Progetto che hanno contribuito al maggior numero di esecuzioni. I promemoria relativi alla quota si basano sulle esecuzioni conteggiate ai fini del limite del piano; i controlli sull'utilizzo insolito possono considerare anche le esecuzioni recenti con stato **riuscito**, **non riuscito** o **in sospeso**.
Se l'utilizzo è previsto, valuta l'acquisto di una quota aggiuntiva di Automazioni o la modifica del piano. Se è imprevisto, esamina il flusso di lavoro principale e modifica o metti in pausa l'Automazione correlata.
diff --git a/it/basic/automation/actions/communication/send-email-overview.mdx b/it/basic/automation/actions/communication/send-email-overview.mdx
index 35dfb50a..45516e63 100644
--- a/it/basic/automation/actions/communication/send-email-overview.mdx
+++ b/it/basic/automation/actions/communication/send-email-overview.mdx
@@ -37,7 +37,7 @@ Per impostazione predefinita, le email vengono inviate tramite il servizio di po
\* È obbligatorio specificare almeno uno tra **A** e **CCN**.
-**Limite di frequenza:** 5 email al secondo per Base.
+**Limite di frequenza:** 5 email al secondo per Progetto.
## Come configurarla
diff --git a/it/basic/automation/actions/records/create-record.mdx b/it/basic/automation/actions/records/create-record.mdx
index 76e54920..8e61f003 100644
--- a/it/basic/automation/actions/records/create-record.mdx
+++ b/it/basic/automation/actions/records/create-record.mdx
@@ -30,7 +30,7 @@ Crea un nuovo Record in una Tabella specifica. Puoi associare i dati dei passagg
## Come configurarla
1. Aggiungi un'azione **Crea Record** al workflow.
-2. Scegli la **Tabella** in cui vuoi creare il Record. Per impostazione predefinita è una Tabella della stessa Base, ma puoi usare l'[Accesso tra Base](/it/basic/automation/actions/records/cross-base) per scegliere una Tabella di un'altra Base.
+2. Scegli la **Tabella** in cui vuoi creare il Record. Per impostazione predefinita è una Tabella dello stesso Progetto, ma puoi usare l'[Accesso tra Progetti](/it/basic/automation/actions/records/cross-base) per scegliere una Tabella di un altro Progetto.
3. L'area di associazione dei Campi mostra tutti i Campi della Tabella di destinazione. Per ogni Campo da compilare:
- **Valore statico:** digita un valore direttamente nel Campo, ad esempio "Nuovo" in un Campo Stato.
- **Valore dinamico:** fai clic sul pulsante **+** accanto al Campo per inserire una variabile proveniente da un passaggio precedente. Ad esempio, inserisci il Campo "Nome" del trigger per copiare il nome dal Record che ha attivato il workflow.
@@ -68,11 +68,11 @@ Dopo l'esecuzione dell'azione Crea Record, il Record appena creato è disponibil
- Puoi creare Record in blocco combinando questa azione con [Ciclo (batch)](../logic/loop-run). Ad esempio, ottieni 50 Record da una Tabella e creane 50 corrispondenti in un'altra.
- I Campi che non associ useranno i valori predefiniti della Tabella, se presenti, oppure rimarranno vuoti.
- I Campi dei Record collegati richiedono ID Record, non valori visualizzati. Se devi creare un collegamento a un Record, assicurati di passare l'ID Record e non il nome del Record.
-- Usa [Accesso tra Base](/it/basic/automation/actions/records/cross-base) quando la Tabella di destinazione si trova in una Base diversa da quella dell'automazione.
+- Usa [Accesso tra Progetti](/it/basic/automation/actions/records/cross-base) quando la Tabella di destinazione si trova in un Progetto diverso da quello dell'automazione.
## Contenuti correlati
- [Aggiorna Record](/it/basic/automation/actions/records/update-record) — modifica Record esistenti invece di crearne di nuovi
- [Ottieni Record](/it/basic/automation/actions/records/get-records) — recupera Record da usare come input per crearne di nuovi
-- [Accesso tra Base](/it/basic/automation/actions/records/cross-base) — crea Record in Tabelle esterne alla Base corrente
+- [Accesso tra Progetti](/it/basic/automation/actions/records/cross-base) — crea Record in Tabelle esterne al Progetto corrente
- [Ciclo (batch)](../logic/loop-run) — crea più Record in un singolo passaggio di azione
diff --git a/it/basic/automation/actions/records/cross-base.mdx b/it/basic/automation/actions/records/cross-base.mdx
index c58ab58d..9aa98b92 100644
--- a/it/basic/automation/actions/records/cross-base.mdx
+++ b/it/basic/automation/actions/records/cross-base.mdx
@@ -1,6 +1,6 @@
---
-title: "Accesso tra Base"
-description: "Leggi e scrivi dati tra Base diverse in un unico workflow"
+title: "Accesso tra Progetti"
+description: "Leggi e scrivi dati tra Progetti diversi in un unico workflow"
---
{/* mintlify-resync: 2026-05-26 */}
@@ -10,74 +10,74 @@ Consigliamo vivamente di usare Esegui script per creare automazioni, perché pu
Nota: se aggiungi azioni manualmente, in seguito l'IA non sarà in grado di riconoscerle o modificarle.
-Per impostazione predefinita, le azioni di automazione operano sulle Tabelle appartenenti alla stessa Base del workflow. Accesso tra Base consente a un workflow di leggere e scrivere in un'altra Base. Usalo per workflow che coinvolgono reparti, progetti o set di dati diversi.
+Per impostazione predefinita, le azioni di automazione operano sulle Tabelle appartenenti allo stesso Progetto del workflow. Accesso tra Progetti consente a un workflow di leggere e scrivere in un altro Progetto. Usalo per workflow che coinvolgono reparti, progetti o set di dati diversi.
-Ad esempio, un'automazione della Base Vendite può creare un Record di evasione in una Base Operazioni separata, oppure un workflow di reportistica può raccogliere dati da più Base di progetto in un unico riepilogo.
+Ad esempio, un'automazione del Progetto Vendite può creare un Record di evasione in un Progetto Operazioni separato, oppure un workflow di reportistica può raccogliere dati da più Progetti in un unico riepilogo.
## Azioni supportate
-| Azione | Supporto tra Base |
+| Azione | Supporto tra Progetti |
|---|---|
| Crea Record | Sì |
| Aggiorna Record | Sì |
| Ottieni Record | Sì |
-Queste sono le tre azioni dedicate ai Record. Le altre azioni, come Invia email e Richiesta HTTP, non richiedono l'accesso tra Base perché non hanno come destinazione una Tabella specifica.
+Queste sono le tre azioni dedicate ai Record. Le altre azioni, come Invia email e Richiesta HTTP, non richiedono l'accesso tra Progetti perché non hanno come destinazione una Tabella specifica.
## Come configurarlo
1. Apri nel workflow un'azione supportata: Crea Record, Aggiorna Record oppure Ottieni Record.
-2. Accanto al selettore **Tabella**, fai clic su **Accesso tra Base**.
-3. Si apre un pannello che mostra tutti gli Spazi e le Base accessibili dal tuo account. Seleziona lo **Spazio** e quindi la **Base** di destinazione.
-4. Scegli la **Tabella** all'interno della Base. Se l'azione lo supporta, puoi anche selezionare una **Vista** specifica.
-5. Associa i Campi e configura l'azione come di consueto. L'elenco dei Campi riflette ora quelli della Tabella di destinazione, non quelli della Base corrente.
+2. Accanto al selettore **Tabella**, fai clic su **Accesso tra Progetti**.
+3. Si apre un pannello che mostra tutti gli Spazi e i Progetti accessibili dal tuo account. Seleziona lo **Spazio** e quindi il **Progetto** di destinazione.
+4. Scegli la **Tabella** all'interno del Progetto. Se l'azione lo supporta, puoi anche selezionare una **Vista** specifica.
+5. Associa i Campi e configura l'azione come di consueto. L'elenco dei Campi riflette ora quelli della Tabella di destinazione, non quelli del Progetto corrente.
6. Salva l'azione.
## Esempio concreto: dalle Vendite all'Evasione
-Immagina di avere due Base:
+Immagina di avere due Progetti:
-- **Base Vendite** — contiene una Tabella "Trattative" in cui il team commerciale tiene traccia degli accordi conclusi.
-- **Base Operazioni** — contiene una Tabella "Evasione" in cui il team operativo gestisce le spedizioni.
+- **Progetto Vendite** — contiene una Tabella "Trattative" in cui il team commerciale tiene traccia degli accordi conclusi.
+- **Progetto Operazioni** — contiene una Tabella "Evasione" in cui il team operativo gestisce le spedizioni.
Vuoi creare automaticamente un Record di evasione quando si conclude una trattativa:
-1. **Trigger:** nella Base Vendite, usa "Quando un Record soddisfa le condizioni" con il filtro: `Fase` è uguale a `Conclusa con successo`.
-2. **Azione:** Crea Record con Accesso tra Base indirizzato alla Tabella Evasione della Base Operazioni.
+1. **Trigger:** nel Progetto Vendite, usa "Quando un Record soddisfa le condizioni" con il filtro: `Fase` è uguale a `Conclusa con successo`.
+2. **Azione:** Crea Record con Accesso tra Progetti indirizzato alla Tabella Evasione del Progetto Operazioni.
3. **Associazione dei Campi:** associa Nome cliente, Prodotto, Quantità e Indirizzo di spedizione della trattativa ai Campi corrispondenti nella Tabella Evasione.
-Ora, ogni volta che una trattativa viene conclusa, viene creato automaticamente un Record di evasione nella Base Operazioni, senza alcun passaggio manuale.
+Ora, ogni volta che una trattativa viene conclusa, viene creato automaticamente un Record di evasione nel Progetto Operazioni, senza alcun passaggio manuale.
## Modello delle autorizzazioni
-Quando crei, modifichi o applichi gli aggiornamenti di un workflow, Teable verifica ogni azione tra Base rispetto alle autorizzazioni dell'utente che sta apportando la modifica:
+Quando crei, modifichi o applichi gli aggiornamenti di un workflow, Teable verifica ogni azione tra Progetti rispetto alle autorizzazioni dell'utente che sta apportando la modifica:
-| Azione | Autorizzazione richiesta nella Base di destinazione |
+| Azione | Autorizzazione richiesta nel Progetto di destinazione |
|---|---|
| Ottieni Record | Lettura di Campi e Record |
| Crea Record | Lettura di Campi e Record e creazione di Record |
| Aggiorna Record | Lettura di Campi e Record e aggiornamento di Record |
-Le esecuzioni del workflow attivo usano l'identità di runtime dell'automazione Teable per la Base di destinazione. I Record creati o aggiornati da un'azione tra Base vengono indicati come **Robot di automazione** nei metadati dei Record e nelle schermate di controllo.
+Le esecuzioni del workflow attivo usano l'identità di runtime dell'automazione Teable per il Progetto di destinazione. I Record creati o aggiornati da un'azione tra Progetti vengono indicati come **Robot di automazione** nei metadati dei Record e nelle schermate di controllo.
### Cosa accade quando cambia l'accesso
-Se l'utente che apporta la modifica non dispone dell'autorizzazione richiesta nella Base di destinazione, Teable gli impedisce di aggiungere o modificare azioni tra Base indirizzate a quella Base. Se una bozza contiene già azioni tra Base alle quali l'utente non può accedere, Teable impedisce anche di applicare la bozza. La versione già attiva continua a essere eseguita; Teable controllerà nuovamente le autorizzazioni quando qualcuno modificherà o applicherà il workflow.
+Se l'utente che apporta la modifica non dispone dell'autorizzazione richiesta nel Progetto di destinazione, Teable gli impedisce di aggiungere o modificare azioni tra Progetti indirizzate a quel Progetto. Se una bozza contiene già azioni tra Progetti alle quali l'utente non può accedere, Teable impedisce anche di applicare la bozza. La versione già attiva continua a essere eseguita; Teable controllerà nuovamente le autorizzazioni quando qualcuno modificherà o applicherà il workflow.
Per risolvere un errore di autorizzazione durante la modifica o l'applicazione di un workflow:
-1. Chiedi a una persona con accesso a entrambe le Base di modificare e applicare il workflow.
-2. In alternativa, ripristina le autorizzazioni necessarie nella Base di destinazione, quindi applica nuovamente il workflow.
+1. Chiedi a una persona con accesso a entrambi i Progetti di modificare e applicare il workflow.
+2. In alternativa, ripristina le autorizzazioni necessarie nel Progetto di destinazione, quindi applica nuovamente il workflow.
## Suggerimenti
-- L'accesso tra Base può raggiungere Base in **Spazi** diversi. L'utente che configura o applica il workflow deve disporre delle autorizzazioni necessarie nella Base di destinazione.
-- Quando associ Campi tra Base diverse, i tipi di Campo devono essere compatibili. Ad esempio, non puoi associare un Campo di testo a un Campo allegato.
-- Se ristrutturi una Base di destinazione, rinominando Tabelle o eliminando Campi, le azioni tra Base che fanno riferimento a tali Tabelle e Campi smetteranno di funzionare. Aggiorna il workflow dopo le modifiche strutturali.
-- Per i workflow complessi tra Base, valuta la possibilità di centralizzare le automazioni in una Base "hub" per mantenerle organizzate.
+- L'accesso tra Progetti può raggiungere Progetti in **Spazi** diversi. L'utente che configura o applica il workflow deve disporre delle autorizzazioni necessarie nel Progetto di destinazione.
+- Quando associ Campi tra Progetti diversi, i tipi di Campo devono essere compatibili. Ad esempio, non puoi associare un Campo di testo a un Campo allegato.
+- Se ristrutturi un Progetto di destinazione, rinominando Tabelle o eliminando Campi, le azioni tra Progetti che fanno riferimento a tali Tabelle e Campi smetteranno di funzionare. Aggiorna il workflow dopo le modifiche strutturali.
+- Per i workflow complessi tra Progetti, valuta la possibilità di centralizzare le automazioni in un Progetto "hub" per mantenerle organizzate.
## Contenuti correlati
-- [Crea Record](/it/basic/automation/actions/records/create-record) — crea Record nella Base corrente o in un'altra Base
-- [Aggiorna Record](/it/basic/automation/actions/records/update-record) — aggiorna Record nella Base corrente o in un'altra Base
-- [Ottieni Record](/it/basic/automation/actions/records/get-records) — recupera Record dalla Base corrente o da un'altra Base
+- [Crea Record](/it/basic/automation/actions/records/create-record) — crea Record nel Progetto corrente o in un altro Progetto
+- [Aggiorna Record](/it/basic/automation/actions/records/update-record) — aggiorna Record nel Progetto corrente o in un altro Progetto
+- [Ottieni Record](/it/basic/automation/actions/records/get-records) — recupera Record dal Progetto corrente o da un altro Progetto
diff --git a/it/basic/automation/actions/records/get-records.mdx b/it/basic/automation/actions/records/get-records.mdx
index b5a9871e..36a8095d 100644
--- a/it/basic/automation/actions/records/get-records.mdx
+++ b/it/basic/automation/actions/records/get-records.mdx
@@ -33,7 +33,7 @@ Recupera Record da una Tabella e li restituisce come array. Usa i risultati nei
## Come configurarla
1. Aggiungi un'azione **Ottieni Record** al workflow.
-2. Scegli la **Tabella** da interrogare. Usa [Accesso tra Base](/it/basic/automation/actions/records/cross-base) se la Tabella si trova in una Base diversa.
+2. Scegli la **Tabella** da interrogare. Usa [Accesso tra Progetti](/it/basic/automation/actions/records/cross-base) se la Tabella si trova in un Progetto diverso.
3. (Facoltativo) Seleziona una **Vista** per ereditarne le impostazioni relative a filtri, ordinamento e visibilità dei Campi.
4. (Facoltativo) Aggiungi condizioni di **Filtro** per restringere i risultati. Ad esempio, `Stato` è uguale ad `Attivo` e `Data di scadenza` è precedente a oggi.
5. (Facoltativo) Imposta **Ignora** e **Prendi** per la paginazione. Ad esempio, Ignora 0 e Prendi 100 per ottenere i primi 100 Record.
@@ -80,11 +80,11 @@ Per elaborare un'intera Tabella di grandi dimensioni, puoi usare più passaggi O
- Ottieni Record non modifica alcun dato: è un'operazione di sola lettura.
- Se la query restituisce zero Record, i passaggi successivi che fanno riferimento ai risultati riceveranno un array vuoto. Assicurati che il workflow gestisca correttamente questo caso, ad esempio evitando di inviare un'email che annuncia risultati quando non ce ne sono.
- I filtri di Ottieni Record funzionano come quelli delle Viste: puoi combinare le condizioni con la logica E/O.
-- Quando usi Accesso tra Base, la query viene eseguita con le autorizzazioni del creatore del workflow. Se quest'ultimo perde l'accesso alla Base di destinazione, il passaggio non riuscirà.
+- Quando usi Accesso tra Progetti, la query viene eseguita con le autorizzazioni del creatore del workflow. Se quest'ultimo perde l'accesso al Progetto di destinazione, il passaggio non riuscirà.
## Contenuti correlati
-- [Accesso tra Base](/it/basic/automation/actions/records/cross-base) — interroga Tabelle in altre Base
+- [Accesso tra Progetti](/it/basic/automation/actions/records/cross-base) — interroga Tabelle in altri Progetti
- [Ciclo (batch)](../logic/loop-run) — scorre l'array dei risultati
- [Crea Record](/it/basic/automation/actions/records/create-record) — crea Record in base ai dati recuperati
- [Aggiorna Record](/it/basic/automation/actions/records/update-record) — aggiorna i Record trovati da Ottieni Record
diff --git a/it/basic/automation/actions/records/update-record.mdx b/it/basic/automation/actions/records/update-record.mdx
index 1f0ffcb1..107f1671 100644
--- a/it/basic/automation/actions/records/update-record.mdx
+++ b/it/basic/automation/actions/records/update-record.mdx
@@ -93,11 +93,11 @@ Se l'automazione viene attivata da **Quando viene aggiornato un Record** e l'azi
- L'aggiornamento di un Record può attivare altre automazioni che monitorano la stessa Tabella. Tieni conto degli effetti a cascata.
- Quando aggiorni più Record con ID separati da virgole, tutti ricevono gli stessi valori dei Campi. Per assegnare valori diversi a ciascun Record, usa invece un passaggio [Ciclo](../logic/loop-run).
- Se devi cancellare il contenuto di un Campo, associalo a un valore vuoto. Lasciarlo semplicemente non associato *non* lo svuota.
-- Usa [Accesso tra Base](/it/basic/automation/actions/records/cross-base) per aggiornare Record in una Tabella appartenente a una Base diversa.
+- Usa [Accesso tra Progetti](/it/basic/automation/actions/records/cross-base) per aggiornare Record in una Tabella appartenente a un Progetto diverso.
## Contenuti correlati
- [Crea Record](/it/basic/automation/actions/records/create-record) — aggiunge nuovi Record invece di modificare quelli esistenti
- [Ottieni Record](/it/basic/automation/actions/records/get-records) — recupera Record per trovarne gli ID prima dell'aggiornamento
-- [Accesso tra Base](/it/basic/automation/actions/records/cross-base) — aggiorna Record in Tabelle esterne alla Base corrente
+- [Accesso tra Progetti](/it/basic/automation/actions/records/cross-base) — aggiorna Record in Tabelle esterne al Progetto corrente
- [Ciclo (batch)](../logic/loop-run) — aggiorna più Record con valori diversi
diff --git a/it/basic/automation/ai/scripting/runscript.mdx b/it/basic/automation/ai/scripting/runscript.mdx
index fc941aa4..f3b23983 100644
--- a/it/basic/automation/ai/scripting/runscript.mdx
+++ b/it/basic/automation/ai/scripting/runscript.mdx
@@ -210,7 +210,7 @@ output.set("records", data);
### Chiamare l'IA da uno script
-`POST /api/automation/runtime/ai` invia un prompt al modello IA della Base. La Base deriva dal contesto dell'Automazione, quindi non è necessario alcun ID Base. Il corpo accetta `prompt` e, facoltativamente, `attachments`, `modelKey`, `temperature` e `outputType`; la risposta è `{ "message": ... }`.
+`POST /api/automation/runtime/ai` invia un prompt al modello IA del Progetto. Il Progetto deriva dal contesto dell'Automazione, quindi non è necessario alcun ID Progetto. Il corpo accetta `prompt` e, facoltativamente, `attachments`, `modelKey`, `temperature` e `outputType`; la risposta è `{ "message": ... }`.
Gli allegati sono elementi `{ url, mimetype, name }`, fino a 10 per chiamata, ciascuno di dimensioni inferiori a 20 MB e con un timeout di download di 30 secondi; sono supportati immagini, PDF e documenti Office. Il modello di chat predefinito potrebbe non leggere immagini e allegati simili, quindi specifica `modelKey` quando invii file. Ogni chiamata consuma Crediti.
diff --git a/it/basic/automation/examples/api-automation.mdx b/it/basic/automation/examples/api-automation.mdx
index b3fb9f19..00aae908 100644
--- a/it/basic/automation/examples/api-automation.mdx
+++ b/it/basic/automation/examples/api-automation.mdx
@@ -17,7 +17,7 @@ L'IA creerà automaticamente il workflow completo. Puoi esaminare lo script gene
## Prerequisiti
- Un token di accesso personale (PAT). Consulta [Token di accesso](/it/api-doc/token).
-- L'ID della Base, l'ID della Tabella e gli ID dei Campi. Consulta [Ottenere gli ID](/it/api-doc/get-id).
+- L'ID del Progetto, l'ID della Tabella e gli ID dei Campi. Consulta [Ottenere gli ID](/it/api-doc/get-id).
## Funzioni di supporto
@@ -74,7 +74,7 @@ await api("PUT", `/base/${baseId}/workflow/${wf.id}/active`, {
## Procedure consigliate
-- Usa il PAT con i privilegi minimi: limitalo agli Spazi e alle Base necessari.
+- Usa il PAT con i privilegi minimi: limitalo agli Spazi e ai Progetti necessari.
- Archivia i token nelle variabili d'ambiente; non inserirli mai direttamente nel codice.
- Usa **Testa nodo** per eseguire una verifica prima di abilitare il workflow.
- Consulta il [Riferimento completo dell'API delle Automazioni](/it/api-reference/automation/put-base-workflow-action).
diff --git a/it/basic/automation/examples/cross-base-sync.mdx b/it/basic/automation/examples/cross-base-sync.mdx
index af7eb16d..b0689900 100644
--- a/it/basic/automation/examples/cross-base-sync.mdx
+++ b/it/basic/automation/examples/cross-base-sync.mdx
@@ -1,6 +1,6 @@
---
-title: "Mantenere sincronizzati i Record tra più Base"
-description: "Replica automaticamente i Record nuovi o aggiornati in un'altra Base tramite l'Accesso tra Base"
+title: "Mantenere sincronizzati i Record tra più Progetti"
+description: "Replica automaticamente i Record nuovi o aggiornati in un altro Progetto tramite l'Accesso tra Progetti"
---
Consigliamo di creare gli esempi di Automazione direttamente in AI Chat. Descrivi il workflow desiderato e l'IA si occuperà dell'intera configurazione, inclusi trigger, azioni, script e impostazioni.
@@ -9,18 +9,18 @@ description: "Replica automaticamente i Record nuovi o aggiornati in un'altra Ba
Apri AI Chat nella barra laterale destra della Tabella e spiega all'IA cosa desideri. Ad esempio, puoi dire:
-*"Quando viene creato un nuovo ordine nella Base Vendite, crea un Record corrispondente nella Base Evasione con l'ID ordine, il nome del cliente, l'importo e lo stato impostato su In attesa di evasione"*
+*"Quando viene creato un nuovo ordine nel Progetto Vendite, crea un Record corrispondente nel Progetto Evasione con l'ID ordine, il nome del cliente, l'importo e lo stato impostato su In attesa di evasione"*
L'IA creerà automaticamente il workflow completo. Puoi esaminare lo script generato, provarlo con dati reali e abilitare il workflow quando è pronto.
## Configurazione manuale
-1. **Crea un workflow** nella Base **Vendite** con il trigger **Quando viene creato un Record**.
+1. **Crea un workflow** nel Progetto **Vendite** con il trigger **Quando viene creato un Record**.
2. Seleziona la Tabella **Ordini**.
3. Fai clic su **Test**.
4. **Aggiungi un'azione** → **Crea Record**.
-5. Fai clic su **Accesso tra Base** accanto al selettore della Tabella.
-6. Passa alla Base **Evasione** e seleziona la Tabella **Ordini**.
+5. Fai clic su **Accesso tra Progetti** accanto al selettore della Tabella.
+6. Passa al Progetto **Evasione** e seleziona la Tabella **Ordini**.
7. Mappa i Campi:
- ID ordine → ID ordine del trigger (tramite **+**)
- Cliente → Cliente del trigger
@@ -31,6 +31,6 @@ L'IA creerà automaticamente il workflow completo. Puoi esaminare lo script gene
## Sincronizzazione bidirezionale
Per sincronizzare gli aggiornamenti in entrambe le direzioni:
-1. Crea un secondo workflow nella Base **Evasione**.
-2. Usa **Quando viene aggiornato un Record** → **Aggiorna Record** con Accesso tra Base che rimanda alla Base Vendite.
+1. Crea un secondo workflow nel Progetto **Evasione**.
+2. Usa **Quando viene aggiornato un Record** → **Aggiorna Record** con Accesso tra Progetti che rimanda al Progetto Vendite.
3. Usa un filtro per evitare cicli infiniti: ad esempio, attiva il workflow soltanto quando cambiano Campi specifici e verifica che il valore sia effettivamente diverso prima di aggiornarlo.
diff --git a/it/basic/automation/trigger/external/webhook-received.mdx b/it/basic/automation/trigger/external/webhook-received.mdx
index 52ed72bb..fbbff1e3 100644
--- a/it/basic/automation/trigger/external/webhook-received.mdx
+++ b/it/basic/automation/trigger/external/webhook-received.mdx
@@ -78,7 +78,7 @@ Puoi riportare **Risposta** su **Predefinita** in qualsiasi momento per ripristi
## Provare il webhook
-Il modo più semplice per eseguire una prova consiste nell'usare `curl` dalla riga di comando. Copia l'URL effettivo dal pannello del trigger anziché digitarlo: contiene gli ID della Base e del workflow.
+Il modo più semplice per eseguire una prova consiste nell'usare `curl` dalla riga di comando. Copia l'URL effettivo dal pannello del trigger anziché digitarlo: contiene gli ID del Progetto e del workflow.
**Senza autorizzazione:**
@@ -120,7 +120,7 @@ Dopo aver inviato una richiesta di prova, controlla la cronologia delle esecuzio
| Ambito | Limite |
|---|---|
-| Per Base | 50 richieste al secondo |
+| Per Progetto | 50 richieste al secondo |
| Per workflow | 2 richieste al secondo |
Le richieste che superano il limite di frequenza ricevono una risposta HTTP 429. Se il sistema esterno invia raffiche di richieste, valuta l'implementazione di una logica di nuovi tentativi con backoff esponenziale.
diff --git a/it/basic/base.mdx b/it/basic/base.mdx
index 013ca53f..5c3eab9a 100644
--- a/it/basic/base.mdx
+++ b/it/basic/base.mdx
@@ -1,42 +1,44 @@
---
title: "Panoramica"
-description: "Crea, gestisci, importa ed esporta Base. Trasferisci dati tra Spazi Teable Cloud o esegui la migrazione tra istanze Cloud e Self-hosted utilizzando file .tea."
+description: "Crea, gestisci, importa ed esporta Progetti. Trasferisci dati tra Spazi Teable Cloud o esegui la migrazione tra istanze Cloud e Self-hosted utilizzando file .tea."
---
{/* mintlify-resync: 2026-05-26 */}
-Una Base è uno strumento per archiviare ed elaborare tutte le informazioni relative a un progetto specifico. Ogni Spazio può contenere più Base e ogni Base può funzionare in modo indipendente, offrendo una struttura informativa chiara per progetti o raccolte di Tabelle specifici.
+Un progetto riunisce tabelle, app e automazioni correlate. Ogni Spazio può contenere più progetti, ciascuno con le proprie risorse e autorizzazioni di collaborazione.
-Per gli utenti che non conoscono le Base, è possibile considerarle come cartelle di lavoro di Excel, ciascuna delle quali può contenere più fogli.
+Progetto è il nome mostrato nell’interfaccia per la risorsa `base` dell’API e della CLI. I campi come `baseId`, il prefisso ID `bse` e gli URL `/base/...` restano invariati.
-## Creare e gestire le Base
+Per gli utenti che non conoscono i Progetti, è possibile considerarli come cartelle di lavoro di Excel, ciascuna delle quali può contenere più fogli.
-### Aggiungere una Base
+## Creare e gestire i Progetti {#creare-e-gestire-le-base}
+
+### Aggiungere un Progetto {#aggiungere-una-base}
1. Accedi a uno Spazio
-2. Fai clic su «Crea Base» nell'angolo in alto a destra
+2. Fai clic su «Crea Progetto» nell'angolo in alto a destra
-### Rinominare o eliminare una Base
+### Rinominare o eliminare un Progetto {#rinominare-o-eliminare-una-base}
1. Accedi a uno Spazio
-2. Passa il puntatore su una Base
+2. Passa il puntatore su un Progetto
3. Fai clic sul pulsante «···» per aprire il menu
4. Fai clic su «Rinomina» o «Elimina»
-### Organizzare le risorse in una Base
+### Organizzare le risorse in un Progetto {#organizzare-le-risorse-in-una-base}
-Dopo aver aperto una Base, la barra laterale sinistra mostra le risorse della Base corrente, come Tabelle, app e Automazioni. Puoi usare le cartelle per organizzare queste risorse e semplificare l'esplorazione delle Base di grandi dimensioni.
+Dopo aver aperto un Progetto, la barra laterale sinistra mostra le risorse del Progetto corrente, come Tabelle, app e Automazioni. Puoi usare le cartelle per organizzare queste risorse e semplificare l'esplorazione dei Progetti di grandi dimensioni.
Le operazioni comuni includono:
@@ -46,40 +48,40 @@ Le operazioni comuni includono:
- **Aggiungere descrizioni**: per Tabelle, app e Automazioni, fai clic su **Aggiungi descrizione** sotto il nome della risorsa nell'intestazione. Usa le descrizioni per annotare scopo, proprietario, note di passaggio o regole di utilizzo. Teable apre una descrizione la prima volta che apri la relativa risorsa e una volta ancora dopo ogni modifica.
- **Controllare le informazioni del nodo**: apri il menu `...` di una risorsa e scegli **Informazioni nodo** per visualizzare l'ID della cartella, della Tabella, dell'Automazione o dell'app, oltre alle informazioni di creazione e modifica.
-### Duplicare una Base in un altro Spazio {#duplicate-a-base-to-another-space}
+### Duplicare un Progetto in un altro Spazio {#duplicate-a-base-to-another-space}
-Passaggio 1: nello Spazio, seleziona la Base che vuoi duplicare;
+Passaggio 1: nello Spazio, seleziona il Progetto che vuoi duplicare;
-Passaggio 2: fai clic sull'icona del menu e seleziona l'opzione Copia Base;
+Passaggio 2: fai clic sull'icona del menu e seleziona l'opzione Copia Progetto;
Passaggio 3: nella finestra popup, scegli lo Spazio di destinazione. Devi disporre dell'autorizzazione Creatore in tale Spazio.
-Per le Base più grandi, Teable mostra l'avanzamento nella finestra di duplicazione mentre copia struttura, Record e allegati della Base. Mantieni aperta la finestra fino al termine della copia. La cronologia delle revisioni e i collaboratori non vengono copiati.
+Per i Progetti più grandi, Teable mostra l'avanzamento nella finestra di duplicazione mentre copia struttura, Record e allegati del Progetto. Mantieni aperta la finestra fino al termine della copia. La cronologia delle revisioni e i collaboratori non vengono copiati.
-Se la Base contiene Campi Collegamento, Lookup, Rollup, Lookup condizionale o Rollup condizionale che puntano a un altro Spazio, Teable mostra i Campi interessati prima della duplicazione. Se continui, Teable converte tali Campi in **Testo su una riga** nella Base duplicata.
+Se il Progetto contiene Campi Collegamento, Lookup, Rollup, Lookup condizionale o Rollup condizionale che puntano a un altro Spazio, Teable mostra i Campi interessati prima della duplicazione. Se continui, Teable converte tali Campi in **Testo su una riga** nel Progetto duplicato.
-### Spostare una Base tra Spazi
+### Spostare un Progetto tra Spazi {#spostare-una-base-tra-spazi}
-Se disponi delle autorizzazioni necessarie nello Spazio, puoi spostare una Base in un altro Spazio. Se lo spostamento lascia Campi basati su relazioni che puntano a Spazi diversi, Teable ti avvisa ed elenca i Campi interessati. Quando confermi, Teable converte tali Campi in **Testo su una riga** durante lo spostamento.
+Se disponi delle autorizzazioni necessarie nello Spazio, puoi spostare un Progetto in un altro Spazio. Se lo spostamento lascia Campi basati su relazioni che puntano a Spazi diversi, Teable ti avvisa ed elenca i Campi interessati. Quando confermi, Teable converte tali Campi in **Testo su una riga** durante lo spostamento.
-## Importare ed esportare Base
+## Importare ed esportare Progetti {#importare-ed-esportare-base}
Usa AI Chat per migrare Airtable, Baserow, NocoDB, SmartSuite e altri sistemi in Teable.
-### Importare una Base (migrazione dei dati)
+### Importare un Progetto (migrazione dei dati) {#importare-una-base-migrazione-dei-dati}
-Il formato file `.tea` importa una Base completa con tutte le Tabelle, i Campi, i dati e le configurazioni. È utile per:
-- **Migrazione dei dati**: trasferire Base tra diverse istanze Teable (ad esempio da Cloud a Self-hosted)
-- **Ripristino del backup**: ripristinare una Base esportata in precedenza
-- **Condivisione dei modelli**: condividere strutture complete di Base con altri team
+Il formato file `.tea` importa un Progetto completo con tutte le Tabelle, i Campi, i dati e le configurazioni. È utile per:
+- **Migrazione dei dati**: trasferire Progetti tra diverse istanze Teable (ad esempio da Cloud a Self-hosted)
+- **Ripristino del backup**: ripristinare un Progetto esportato in precedenza
+- **Condivisione dei modelli**: condividere strutture complete di Progetto con altri team
**Passaggi:**
1. Accedi allo Spazio
@@ -89,19 +91,19 @@ Il formato file `.tea` importa una Base completa con tutte le Tabelle, i Campi,
-Se vuoi creare una Base da Airtable, scegli **Importa da Airtable** nella stessa finestra di importazione.
+Se vuoi creare un Progetto da Airtable, scegli **Importa da Airtable** nella stessa finestra di importazione.
-### Esportare una Base (backup e migrazione) {#export-base-backup-&-migration}
+### Esportare un Progetto (backup e migrazione) {#export-base-backup-&-migration}
-Esporta la Base in un file `.tea` a scopo di backup o migrazione. Il file esportato contiene tutte le Tabelle, i Campi, i dati, le Viste e le configurazioni.
+Esporta il Progetto in un file `.tea` a scopo di backup o migrazione. Il file esportato contiene tutte le Tabelle, i Campi, i dati, le Viste e le configurazioni.
**Passaggi:**
1. Accedi allo Spazio
-2. Passa il puntatore sulla Base da esportare
+2. Passa il puntatore sul Progetto da esportare
3. Fai clic sul pulsante 「···」 per aprire il menu
4. Fai clic su 「Esporta」
5. Mantieni attiva l'opzione **Includi Record** per esportare i dati dei Record. Disattivala per esportare soltanto la struttura e la configurazione.
@@ -110,28 +112,28 @@ Esporta la Base in un file `.tea` a scopo di backup o migrazione. Il file esport
-- Per migrare dati tra istanze Teable, esporta la Base dall'istanza di origine, quindi importa il file `.tea` nell'istanza di destinazione. Tutti i dati e le configurazioni verranno conservati.
-- Teable converte i Campi di relazione tra Base in Campi **Testo su una riga** nel file esportato.
-- Quando duplichi o sposti una Base tra Spazi, i Campi di relazione tra Spazi vengono convertiti in **Testo su una riga**.
+- Per migrare dati tra istanze Teable, esporta il Progetto dall'istanza di origine, quindi importa il file `.tea` nell'istanza di destinazione. Tutti i dati e le configurazioni verranno conservati.
+- Teable converte i Campi di relazione tra Progetti in Campi **Testo su una riga** nel file esportato.
+- Quando duplichi o sposti un Progetto tra Spazi, i Campi di relazione tra Spazi vengono convertiti in **Testo su una riga**.
-## Condividere una Base
+## Condividere un Progetto {#condividere-una-base}
-Le Base possono essere condivise tramite link pubblici. L'ambito di condivisione può essere l'intera Base o l'elemento attualmente selezionato.
+I Progetti possono essere condivisi tramite link pubblici. L'ambito di condivisione può essere l'intero Progetto o l'elemento attualmente selezionato.
-1. Accedi alla Base desiderata
-2. Apri il menu di condivisione della Base o dell'elemento selezionato
+1. Accedi al Progetto desiderato
+2. Apri il menu di condivisione del Progetto o dell'elemento selezionato
3. Attiva **Condividi sul web**
4. Copia il link di condivisione o il codice QR
@@ -139,29 +141,29 @@ Gli ambiti di condivisione includono:
| Ambito | Descrizione |
|------|------|
-| **Condividi l'intera Base** | Condivide tutti gli elementi della Base corrente. Le nuove Tabelle e cartelle aggiunte successivamente vengono incluse automaticamente. |
+| **Condividi l'intero Progetto** | Condivide tutti gli elementi del Progetto corrente. Le nuove Tabelle e cartelle aggiunte successivamente vengono incluse automaticamente. |
| **Condividi l'elemento selezionato** | Condivide l'elemento attualmente selezionato. Quando viene condivisa una cartella, sono inclusi i relativi elementi figli. |
Nelle impostazioni di condivisione puoi configurare le autorizzazioni del link, **Consenti a chi visualizza di copiare i dati**, l'accesso tramite password, rigenerare il link, eliminare il link di condivisione oppure copiare la configurazione di incorporamento.
Se l'ambito di condivisione include un'app, questa deve essere pubblicata prima di poter essere aperta tramite il link pubblico.
-## Funzionalità all'interno di una Base
+## Funzionalità all'interno di un Progetto {#funzionalità-allinterno-di-una-base}
-Una Base può contenere più Tabelle per registrare e organizzare informazioni relative al lavoro o all'attività aziendale.
+Un Progetto può contenere più Tabelle per registrare e organizzare informazioni relative al lavoro o all'attività aziendale.
-Ad esempio, una Base per la gestione dei clienti potrebbe avere Tabelle distinte per «Aziende clienti», «Contatti dei clienti» e «Record di follow-up dei clienti», mentre una Base per la gestione delle sale riunioni potrebbe disporre di Tabelle separate per registrare «Gestione sale riunioni», «Attrezzatura delle sale riunioni» e «Prenotazioni delle sale riunioni».
+Ad esempio, un Progetto per la gestione dei clienti potrebbe avere Tabelle distinte per «Aziende clienti», «Contatti dei clienti» e «Record di follow-up dei clienti», mentre un Progetto per la gestione delle sale riunioni potrebbe disporre di Tabelle separate per registrare «Gestione sale riunioni», «Attrezzatura delle sale riunioni» e «Prenotazioni delle sale riunioni».
-Pertanto, la maggior parte delle funzionalità di una Base riguarda le Tabelle:
+Pertanto, la maggior parte delle funzionalità di un Progetto riguarda le Tabelle:
-* **Creazione di Tabelle**: le Base consentono agli utenti di creare nuove Tabelle in base alle esigenze specifiche del progetto, definendone struttura, Campi e tipi di dati.
-* **Modifica delle Tabelle**: gli utenti possono modificare le Tabelle esistenti nella Base, anche aggiungendo, eliminando e modificando Record.
-* **Esportazione e importazione dei dati**: le Base supportano l'esportazione dei dati in CSV e l'importazione in formato CSV e XLSX.
+* **Creazione di Tabelle**: i Progetti consentono agli utenti di creare nuove Tabelle in base alle esigenze specifiche del progetto, definendone struttura, Campi e tipi di dati.
+* **Modifica delle Tabelle**: gli utenti possono modificare le Tabelle esistenti nel Progetto, anche aggiungendo, eliminando e modificando Record.
+* **Esportazione e importazione dei dati**: i Progetti supportano l'esportazione dei dati in CSV e l'importazione in formato CSV e XLSX.
Per ulteriori informazioni sulle Tabelle, consulta la [sezione Tabelle](/it/basic/table).
diff --git a/it/basic/credential.mdx b/it/basic/credential.mdx
index 6d74b74a..1d0d164e 100644
--- a/it/basic/credential.mdx
+++ b/it/basic/credential.mdx
@@ -39,7 +39,7 @@ Apri il pannello delle credenziali della risorsa:
Ogni concessione richiede un **Nome della variabile**, l'alias con cui la credenziale è nota all'interno di quell'app o Automazione. Segue le stesse regole di denominazione della chiave di un segreto ed è il nome che legge il codice.
-Il pannello può mostrare anche segnaposto **Non associato**. La copia di un'app, la duplicazione di un flusso di lavoro e l'importazione o duplicazione di un database portano con sé gli alias attesi dal codice, ma nessuna credenziale. Con **Associa la mia** fornisci la tua, così l'app o l'Automazione può funzionare.
+Il pannello può mostrare anche segnaposto **Non associato**. La copia di un'app, la duplicazione di un flusso di lavoro e l'importazione o duplicazione di un progetto portano con sé gli alias attesi dal codice, ma nessuna credenziale. Con **Associa la mia** fornisci la tua, così l'app o l'Automazione può funzionare.
Quando un alias contiene la credenziale di un'altra persona, **Sostituisci con il mio** la rileva. **Rimuovi solo l'autorizzazione (mantieni segnaposto)** scioglie il collegamento e lascia il segnaposto, quindi il codice resta invariato.
diff --git a/it/basic/security.mdx b/it/basic/security.mdx
index 590e6a86..29826cbe 100644
--- a/it/basic/security.mdx
+++ b/it/basic/security.mdx
@@ -112,13 +112,13 @@ Teable offre diverse opzioni per il backup dei dati:
| Metodo | Descrizione | Caso d'uso |
|--------|-------------|----------|
-| **[Esportazione Base](/it/basic/base#export-base-backup-&-migration)** | Scarica l'intera Base come file `.tea` (struttura, dati, Automazioni) | Backup completo, migrazione |
-| **[Duplicazione Base](/it/basic/base#duplicate-a-base-to-another-space)** | Crea una copia della Base all'interno di Teable | Snapshot rapido |
+| **[Esportazione Progetto](/it/basic/base#export-base-backup-&-migration)** | Scarica l'intero Progetto come file `.tea` (struttura, dati, Automazioni) | Backup completo, migrazione |
+| **[Duplicazione Progetto](/it/basic/base#duplicate-a-base-to-another-space)** | Crea una copia del Progetto all'interno di Teable | Snapshot rapido |
| **[Esportazione CSV](/it/basic/table/export)** | Esporta i dati di una singola Tabella | Portabilità dei dati |
| **[Esportazione API](/it/api-doc/record/get)** | Esporta Record in modo programmatico tramite API REST | Backup automatizzati |
-Puoi eseguire manualmente il backup delle Base esportando l'intera Base come file `.tea`, esportando singole Tabelle come file CSV oppure recuperando i dati tramite l'API di Teable.
+Puoi eseguire manualmente il backup dei Progetti esportando l'intero Progetto come file `.tea`, esportando singole Tabelle come file CSV oppure recuperando i dati tramite l'API di Teable.
## Single Sign-On (SSO)
diff --git a/it/basic/space.mdx b/it/basic/space.mdx
index 372178af..1490f09c 100644
--- a/it/basic/space.mdx
+++ b/it/basic/space.mdx
@@ -64,15 +64,15 @@ Gli Spazi eliminati vengono spostati nel cestino, dove puoi scegliere di svuotar
## Condivisi con me
-Quando qualcuno condivide con te una Base come collaboratore, la Base viene visualizzata sotto **Condivisi con me** nella barra laterale dello Spazio.
+Quando qualcuno condivide con te un Progetto come collaboratore, il Progetto viene visualizzato sotto **Condivisi con me** nella barra laterale dello Spazio.
-Le Base condivise con te sono diverse dalle Base presenti nei tuoi Spazi:
+I Progetti condivisi con te sono diversi dai Progetti presenti nei tuoi Spazi:
- L'accesso è controllato da chi condivide.
-- Le azioni disponibili dipendono dall'autorizzazione concessa per la Base.
-- Se chi condivide rimuove il tuo accesso, la Base non viene più visualizzata.
+- Le azioni disponibili dipendono dall'autorizzazione concessa per il Progetto.
+- Se chi condivide rimuove il tuo accesso, il Progetto non viene più visualizzato.
-Per la condivisione pubblica delle Base, consulta [Base](/it/basic/base).
+Per la condivisione pubblica dei Progetti, consulta [Progetto](/it/basic/base).
## Impostazioni dello Spazio
@@ -95,7 +95,7 @@ Nella pagina Impostazioni IA, i proprietari dello Spazio possono configurare pro
**Chat in IM**
-Nella pagina **Chat in IM**, gli amministratori dello Spazio possono creare bot e configurarne modello, Base accessibili, skill, file e integrazione IM.
+Nella pagina **Chat in IM**, gli amministratori dello Spazio possono creare bot e configurarne modello, Progetti accessibili, skill, file e integrazione IM.
**Piano**
diff --git a/it/basic/space/base-invite.mdx b/it/basic/space/base-invite.mdx
index 3f79409a..1a1b3644 100644
--- a/it/basic/space/base-invite.mdx
+++ b/it/basic/space/base-invite.mdx
@@ -1,39 +1,39 @@
---
-title: "Invito alla Base"
-description: "Gestisci le autorizzazioni a livello di Base. Invita membri a una Base specifica senza concedere l'accesso all'intero Spazio, per una collaborazione sui dati più granulare e sicura."
+title: "Invito al Progetto"
+description: "Gestisci le autorizzazioni a livello di Progetto. Invita membri a un Progetto specifico senza concedere l'accesso all'intero Spazio, per una collaborazione sui dati più granulare e sicura."
---
-## Che cos'è un collaboratore della Base?
+## Che cos'è un collaboratore del Progetto? {#che-cosè-un-collaboratore-della-base}
-Un collaboratore della Base è un membro invitato soltanto a una Base specifica. A differenza dei collaboratori dello Spazio, può accedere esclusivamente alle Base a cui è stato invitato e non può vedere le altre Base nello Spazio.
+Un collaboratore del Progetto è un membro invitato soltanto a un Progetto specifico. A differenza dei collaboratori dello Spazio, può accedere esclusivamente ai Progetti a cui è stato invitato e non può vedere gli altri Progetti nello Spazio.
-## Aggiungere collaboratori della Base
+## Aggiungere collaboratori del Progetto {#aggiungere-collaboratori-della-base}
-Accedi a una Base qualsiasi e fai clic sul pulsante `Invita` nell'angolo in alto a destra. Sono supportati due metodi:
+Accedi a un Progetto qualsiasi e fai clic sul pulsante `Invita` nell'angolo in alto a destra. Sono supportati due metodi:
-- **Invito tramite email**: inserisci l'indirizzo email del destinatario, imposta il livello di autorizzazione della Base (ad esempio «Creatore») e fai clic su **Invia invito**.
+- **Invito tramite email**: inserisci l'indirizzo email del destinatario, imposta il livello di autorizzazione del Progetto (ad esempio «Creatore») e fai clic su **Invia invito**.
- **Invito tramite link**: passa alla scheda «Invita tramite link» per generare un link di invito dedicato. Copia e condividi il link. I destinatari possono accedere facendo clic su di esso.
-Dopo aver inviato un invito via email, puoi copiare il link diretto alla Base mostrato nel pannello e inviarlo separatamente. L'invitato riceve inoltre una notifica nell'app che apre la Base.
+Dopo aver inviato un invito via email, puoi copiare il link diretto al Progetto mostrato nel pannello e inviarlo separatamente. L'invitato riceve inoltre una notifica nell'app che apre il Progetto.
-Nel pannello degli inviti puoi visualizzare tutti gli utenti che attualmente hanno accesso alla Base:
+Nel pannello degli inviti puoi visualizzare tutti gli utenti che attualmente hanno accesso al Progetto:
-- **Collaboratori della Base**: membri invitati direttamente soltanto a questa Base.
-- **Collaboratori dello Spazio**: mostrati con un badge «Spazio» accanto al nome, a indicare che sono membri a livello di Spazio che ereditano automaticamente l'accesso a questa Base.
+- **Collaboratori del Progetto**: membri invitati direttamente soltanto a questo Progetto.
+- **Collaboratori dello Spazio**: mostrati con un badge «Spazio» accanto al nome, a indicare che sono membri a livello di Spazio che ereditano automaticamente l'accesso a questo Progetto.
-La Base offre quattro ruoli di autorizzazione per supportare diversi livelli di collaborazione. Per un confronto dettagliato delle autorizzazioni, consulta [Dettagli delle autorizzazioni](/it/basic/space/space-permission).
+Il Progetto offre quattro ruoli di autorizzazione per supportare diversi livelli di collaborazione. Per un confronto dettagliato delle autorizzazioni, consulta [Dettagli delle autorizzazioni](/it/basic/space/space-permission).
Per un controllo più granulare a livello di Tabella, Campo o Record, usa la funzionalità [Matrice di autorità](/it/basic/authority-matrix).
@@ -46,11 +46,11 @@ La Base offre quattro ruoli di autorizzazione per supportare diversi livelli di
## Casi d'uso
-L'invito alla Base è pensato per i collaboratori esterni. Ad esempio, un designer freelance incaricato di organizzare una raccolta di risorse può essere invitato soltanto a tale Base con autorizzazione **Editor**, senza vedere le altre Base nello Spazio.
+L'invito al Progetto è pensato per i collaboratori esterni. Ad esempio, un designer freelance incaricato di organizzare una raccolta di risorse può essere invitato soltanto a tale Progetto con autorizzazione **Editor**, senza vedere gli altri Progetti nello Spazio.
## Note
-- **Ereditarietà delle autorizzazioni**: un Manager dello Spazio dispone automaticamente dell'accesso completo a tutte le Base dello Spazio e il suo livello non può essere ridotto nella singola Base.
-- **Sicurezza del link**: chiunque ottenga un link di invito può tentare di accedere alla Base. Se un link viene divulgato, puoi revocarlo facendo clic sulla X accanto ad esso nel pannello degli inviti.
+- **Ereditarietà delle autorizzazioni**: un Manager dello Spazio dispone automaticamente dell'accesso completo a tutti i Progetti dello Spazio e il suo livello non può essere ridotto nel singolo Progetto.
+- **Sicurezza del link**: chiunque ottenga un link di invito può tentare di accedere al Progetto. Se un link viene divulgato, puoi revocarlo facendo clic sulla X accanto ad esso nel pannello degli inviti.
Quando coesistono la [Matrice di autorità](/it/basic/authority-matrix) e i [Dettagli delle autorizzazioni](/it/basic/space/space-permission), soltanto gli utenti **Manager** sono esenti dalle restrizioni della Matrice di autorità. Tutti gli altri utenti vi sono soggetti.
diff --git a/it/basic/space/billing.mdx b/it/basic/space/billing.mdx
index c23fd7d0..0fdc5142 100644
--- a/it/basic/space/billing.mdx
+++ b/it/basic/space/billing.mdx
@@ -41,19 +41,19 @@ Monitora il consumo delle risorse dello Spazio con queste metriche:
| Metrica | Descrizione |
|--------|-------------|
-| **Collaboratori totali** | Numero di collaboratori fatturabili nello Spazio corrente e nelle relative Base |
+| **Collaboratori totali** | Numero di collaboratori fatturabili nello Spazio corrente e nei relativi Progetti |
| **Esecuzioni mensili massime delle Automazioni** | Quota mensile di esecuzioni delle Automazioni. Ogni esecuzione consuma 1 unità della quota |
| **Record totali** | Numero totale di righe in tutte le Tabelle dello Spazio |
| **Spazio di archiviazione degli allegati** | Spazio di archiviazione totale utilizzato dagli allegati caricati |
| **Email totali** | Email inviate tramite Automazione utilizzando il servizio email di Teable |
-I dati presenti sia nel cestino dello Spazio sia in quello della Base vengono conteggiati nelle statistiche dei Record totali. Per ridurre il numero totale di Record, elimina i dati in «Spazio → Cestino» o «Base → Cestino».
+I dati presenti sia nel cestino dello Spazio sia in quello del Progetto vengono conteggiati nelle statistiche dei Record totali. Per ridurre il numero totale di Record, elimina i dati in «Spazio → Cestino» o «Progetto → Cestino».
-Fai clic su **Dettagli** nella scheda **Record totali** per visualizzare l'utilizzo dei Record per Base. La finestra mostra Record attivi, Record nel cestino e Record totali per ogni Base. Dalla finestra puoi aprire la pagina del cestino di una Base oppure eliminare definitivamente una Base già presente nel cestino.
+Fai clic su **Dettagli** nella scheda **Record totali** per visualizzare l'utilizzo dei Record per Progetto. La finestra mostra Record attivi, Record nel cestino e Record totali per ogni Progetto. Dalla finestra puoi aprire la pagina del cestino di un Progetto oppure eliminare definitivamente un Progetto già presente nel cestino.
### Quando viene raggiunto un limite
-Quando lo Spazio raggiunge un limite del piano, Teable interrompe l'azione prima dell'esecuzione e apre la finestra di aggiornamento, che indica il limite raggiunto, mostra la quantità utilizzata e rimanda all'utilizzo per Base. Ciò si applica a incolla, compilazione, duplicazione di righe, creazione di Record in blocco, importazione e caricamento di allegati.
+Quando lo Spazio raggiunge un limite del piano, Teable interrompe l'azione prima dell'esecuzione e apre la finestra di aggiornamento, che indica il limite raggiunto, mostra la quantità utilizzata e rimanda all'utilizzo per Progetto. Ciò si applica a incolla, compilazione, duplicazione di righe, creazione di Record in blocco, importazione e caricamento di allegati.
Per continuare, aggiorna il piano oppure libera spazio eliminando Record o allegati.
@@ -129,9 +129,9 @@ La modifica di un abbonamento esistente passa attraverso una pagina di conferma
### Postazioni
-Le postazioni vengono acquistate in anticipo ed è possibile acquistarne prima che entrino nuovi membri nel team. Una postazione viene occupata dai collaboratori con ruolo **Proprietario**, **Creatore** o **Editor** nello Spazio e nelle relative Base. **Commentatore** e **Visualizzatore** sono gratuiti.
+Le postazioni vengono acquistate in anticipo ed è possibile acquistarne prima che entrino nuovi membri nel team. Una postazione viene occupata dai collaboratori con ruolo **Proprietario**, **Creatore** o **Editor** nello Spazio e nei relativi Progetti. **Commentatore** e **Visualizzatore** sono gratuiti.
-Nei piani Cloud, le postazioni acquistate costituiscono un limite rigido. Teable blocca qualsiasi azione che porterebbe lo Spazio a superarlo e propone di aggiungere postazioni. Ciò comprende inviti via email, creazione di un link di invito con un ruolo fatturabile o passaggio del link a tale ruolo, accesso tramite tale link, aggiunta diretta di collaboratori e promozione di una persona a un ruolo fatturabile. Una persona che occupa già una postazione può accedere a un'altra Base o cambiare ruolo senza occuparne una nuova.
+Nei piani Cloud, le postazioni acquistate costituiscono un limite rigido. Teable blocca qualsiasi azione che porterebbe lo Spazio a superarlo e propone di aggiungere postazioni. Ciò comprende inviti via email, creazione di un link di invito con un ruolo fatturabile o passaggio del link a tale ruolo, accesso tramite tale link, aggiunta diretta di collaboratori e promozione di una persona a un ruolo fatturabile. Una persona che occupa già una postazione può accedere a un altro Progetto o cambiare ruolo senza occuparne una nuova.
Per continuare, aggiungi postazioni nella pagina Piano oppure assegna alla persona il ruolo gratuito Commentatore o Visualizzatore. Soltanto il proprietario dello Spazio può acquistare postazioni.
diff --git a/it/basic/space/space-invite.mdx b/it/basic/space/space-invite.mdx
index ec7d4845..b842b0fd 100644
--- a/it/basic/space/space-invite.mdx
+++ b/it/basic/space/space-invite.mdx
@@ -5,7 +5,7 @@ description: "Invita altre persone a diventare collaboratori dello Spazio tramit
## Che cos'è un collaboratore dello Spazio?
-Quando condividi uno Spazio con un altro utente, quest'ultimo diventa collaboratore dello Spazio e può accedere a tutte le Base presenti al suo interno.
+Quando condividi uno Spazio con un altro utente, quest'ultimo diventa collaboratore dello Spazio e può accedere a tutti i Progetti presenti al suo interno.
## Aggiungere collaboratori dello Spazio
@@ -14,7 +14,7 @@ Quando condividi uno Spazio con un altro utente, quest'ultimo diventa collaborat
1. Fai clic nella barra laterale sinistra sullo Spazio a cui vuoi aggiungere collaboratori.
2. Fai clic sul pulsante «Invita» nella parte superiore dello Spazio.
3. Si apre la finestra di invito allo Spazio, con le opzioni per invitare tramite email o link. Nelle rispettive sezioni troverai anche i «Link di invito» configurati in precedenza e i «Collaboratori dello Spazio» esistenti.
-4. **Invito tramite email**: inserisci un indirizzo email o più indirizzi separati da virgole. Imposta quindi il livello di autorizzazione da assegnare agli utenti per tutte le Base dello Spazio. Infine, fai clic su Invia email per invitare gli utenti a collaborare.
+4. **Invito tramite email**: inserisci un indirizzo email o più indirizzi separati da virgole. Imposta quindi il livello di autorizzazione da assegnare agli utenti per tutti i Progetti dello Spazio. Infine, fai clic su Invia email per invitare gli utenti a collaborare.
Dopo aver inviato un invito via email, puoi copiare il link diretto allo Spazio mostrato nel pannello e inviarlo separatamente. L'invitato riceve inoltre una notifica nell'app che apre lo Spazio.
@@ -24,7 +24,7 @@ Quando condividi uno Spazio con un altro utente, quest'ultimo diventa collaborat
className="docs-screenshot"
/>
-5. **Invito tramite link**: fai clic sull'opzione «Invita tramite link». Imposta quindi il livello di autorizzazione che il link di invito concederà per tutte le Base dello Spazio. Infine, fai clic su Crea link. Ora puoi fare clic sull'icona degli appunti accanto al link creato per condividerlo nel modo che preferisci.
+5. **Invito tramite link**: fai clic sull'opzione «Invita tramite link». Imposta quindi il livello di autorizzazione che il link di invito concederà per tutti i Progetti dello Spazio. Infine, fai clic su Crea link. Ora puoi fare clic sull'icona degli appunti accanto al link creato per condividerlo nel modo che preferisci.
-I collaboratori dello Spazio hanno accesso a tutte le Base dello Spazio. Se qualcuno deve lavorare soltanto in Base specifiche, valuta di aggiungerlo come [Collaboratore della Base](/it/basic/space/base-invite).
+I collaboratori dello Spazio hanno accesso a tutti i Progetti dello Spazio. Se qualcuno deve lavorare soltanto in Progetti specifici, valuta di aggiungerlo come [Collaboratore del Progetto](/it/basic/space/base-invite).
## Eliminare i link di invito
@@ -56,7 +56,7 @@ Puoi rimuovere i collaboratori dello Spazio dalla finestra di condivisione. Fai
* **Limitazione delle autorizzazioni**: soltanto gli utenti con autorizzazioni Manager o Creatore possono rimuovere altri collaboratori.
* **Rimozione autonoma**: puoi rimuovere il tuo accesso se nello Spazio è presente almeno un altro Manager.
-* **Ambito**: la rimozione di una persona dallo Spazio non rimuove le autorizzazioni che possiede nelle singole Base.
+* **Ambito**: la rimozione di una persona dallo Spazio non rimuove le autorizzazioni che possiede nei singoli Progetti.
Quando aggiungi nuovi utenti a uno Spazio, puoi assegnare i ruoli seguenti (consulta [Dettagli delle autorizzazioni](/it/basic/space/space-permission)):
@@ -68,8 +68,8 @@ Quando aggiungi nuovi utenti a uno Spazio, puoi assegnare i ruoli seguenti (cons
| Commentatore | Può commentare i Record, ma non modificare i dati. |
| Visualizzatore | Può visualizzare, ma non commentare. |
-## Esaminare l'accesso alle Base
+## Esaminare l'accesso ai Progetti {#esaminare-laccesso-alle-base}
-Ogni persona o reparto viene visualizzato una sola volta nell'elenco dei collaboratori dello Spazio, anche quando dispone di autorizzazioni per singole Base. Un badge **Autorizzazioni Base** accanto al ruolo mostra a quante Base è stata invitata. Chi non è mai stato aggiunto allo Spazio viene indicato come **Ha accesso soltanto alle Base selezionate**.
+Ogni persona o reparto viene visualizzato una sola volta nell'elenco dei collaboratori dello Spazio, anche quando dispone di autorizzazioni per singoli Progetti. Un badge **Autorizzazioni Progetto** accanto al ruolo mostra a quanti Progetti è stata invitata. Chi non è mai stato aggiunto allo Spazio viene indicato come **Ha accesso soltanto ai Progetti selezionati**.
-Espandi una riga per vedere tali Base e il ruolo ricoperto in ciascuna. Da qui, **Rimuovi accesso alla Base** revoca una singola autorizzazione della Base, mentre **Rimuovi collaboratore** in una riga relativa soltanto alle Base revoca tutte le autorizzazioni possedute dalla persona nello Spazio.
+Espandi una riga per vedere tali Progetti e il ruolo ricoperto in ciascuno. Da qui, **Rimuovi accesso al Progetto** revoca una singola autorizzazione del Progetto, mentre **Rimuovi collaboratore** in una riga relativa soltanto ai Progetti revoca tutte le autorizzazioni possedute dalla persona nello Spazio.
diff --git a/it/basic/space/space-permission.mdx b/it/basic/space/space-permission.mdx
index 295ddb4f..92bd0d50 100644
--- a/it/basic/space/space-permission.mdx
+++ b/it/basic/space/space-permission.mdx
@@ -1,20 +1,20 @@
---
title: "Dettagli delle autorizzazioni di collaborazione"
-description: "Questa sezione illustra l'ambito operativo dei quattro diversi livelli di autorizzazione negli Spazi e nelle Base."
+description: "Questa sezione illustra l'ambito operativo dei quattro diversi livelli di autorizzazione negli Spazi e nei Progetti."
---
Teable offre un controllo più granulare delle autorizzazioni a livello di Tabella, Campo e Record. Consulta la sezione [Matrice di autorità](/it/basic/authority-matrix).
-### Operazioni sulle Base
+### Operazioni sui Progetti {#operazioni-sulle-base}
| Descrizione | Creatore/Manager | Editor | Commentatore | Visualizzatore |
| ----------- | :------------: | :----: | :-------: | :----: |
-| Visualizzare i dati nella Base | ✅ | ✅ | ✅ | ✅ |
+| Visualizzare i dati nel Progetto | ✅ | ✅ | ✅ | ✅ |
| Invitare utenti con autorizzazioni uguali o inferiori | ✅ | ✅ | ✅ | ✅ |
| Creare o eliminare link di condivisione delle Viste | ✅ | ✅ | | |
| Creare e modificare Automazioni | ✅ | | | |
| Abilitare la Matrice di autorità | ✅ | | | |
-| Creare o eliminare link di invito alla collaborazione nella Base | ✅ | | | |
-| Rinominare la Base | ✅ | | | |
+| Creare o eliminare link di invito alla collaborazione nel Progetto | ✅ | | | |
+| Rinominare il Progetto | ✅ | | | |
### Operazioni sui Record
@@ -51,12 +51,12 @@ description: "Questa sezione illustra l'ambito operativo dei quattro diversi liv
| Descrizione | Manager | Creatore | Editor | Commentatore | Visualizzatore |
| ----------- | :-----: | :-----: | :----: | :-------: | :----: |
-| Accedere a tutte le Base dello Spazio | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Accedere a tutti i Progetti dello Spazio | ✅ | ✅ | ✅ | ✅ | ✅ |
| Invitare utenti con autorizzazioni uguali o inferiori | ✅ | ✅ | ✅ | ✅ | ✅ |
| Rinominare lo Spazio | ✅ | ✅ | | | |
-| Aggiungere e rimuovere Base nello Spazio | ✅ | ✅ | | | |
-| Riordinare le Base nello Spazio | ✅ | ✅ | | | |
-| Spostare Base tra Spazi | ✅ | ✅ | | | |
+| Aggiungere e rimuovere Progetti nello Spazio | ✅ | ✅ | | | |
+| Riordinare i Progetti nello Spazio | ✅ | ✅ | | | |
+| Spostare Progetti tra Spazi | ✅ | ✅ | | | |
| Modificare le impostazioni di fatturazione e aggiornare lo Spazio | ✅ | | | | |
| Concedere autorizzazioni Manager | ✅ | | | | |
diff --git a/it/basic/table.mdx b/it/basic/table.mdx
index 8da61ab7..790a90c6 100644
--- a/it/basic/table.mdx
+++ b/it/basic/table.mdx
@@ -1,16 +1,16 @@
---
title: "Panoramica"
-description: "Crea, importa, condividi e gestisci Tabelle in una Base."
+description: "Crea, importa, condividi e gestisci Tabelle in un Progetto."
---
{/* mintlify-resync: 2026-05-14 */}
-Ogni Base può contenere più Tabelle per archiviare e gestire dati correlati. Le Tabelle Teable equivalgono alle Tabelle di un database: comprendere [in cosa differiscono dai fogli di calcolo](/it/compare/teable-vs-excel) ti aiuterà a sfruttare al meglio Teable.
+Ogni Progetto può contenere più Tabelle per archiviare e gestire dati correlati. Le Tabelle Teable equivalgono alle Tabelle di un database: comprendere [in cosa differiscono dai fogli di calcolo](/it/compare/teable-vs-excel) ti aiuterà a sfruttare al meglio Teable.
## Creare e gestire le Tabelle
### Aggiungere Tabelle
-In una Base, fai clic sul pulsante `+` nella directory e scegli se:
+In un Progetto, fai clic sul pulsante `+` nella directory e scegli se:
-Quando altre Tabelle sono collegate alla Tabella che stai eliminando, la finestra di conferma elenca i Campi interessati dall'eliminazione, con la Base e la Tabella a cui appartiene ciascuno. L'eliminazione della Tabella converte tali Campi di collegamento in Campi di testo su una riga che conservano i titoli dei Record collegati, mentre i Campi lookup o rollup basati su di essi smettono di funzionare.
+Quando altre Tabelle sono collegate alla Tabella che stai eliminando, la finestra di conferma elenca i Campi interessati dall'eliminazione, con il Progetto e la Tabella a cui appartiene ciascuno. L'eliminazione della Tabella converte tali Campi di collegamento in Campi di testo su una riga che conservano i titoli dei Record collegati, mentre i Campi lookup o rollup basati su di essi smettono di funzionare.
### Cestino
-Fai clic sull'icona del cestino nell'angolo in alto a sinistra della Base per gestire le Tabelle eliminate.
+Fai clic sull'icona del cestino nell'angolo in alto a sinistra del Progetto per gestire le Tabelle eliminate.
-- **Ripristina**: riporta la Tabella nella Base con tutti i dati intatti
+- **Ripristina**: riporta la Tabella nel Progetto con tutti i dati intatti
- **Svuota cestino**: elimina definitivamente tutte le Tabelle nel cestino
Il ripristino di una Tabella non annulla la conversione dei collegamenti. I Campi di collegamento nelle altre Tabelle rimangono Campi di testo, quindi ricreali se devi ripristinare il collegamento.
diff --git a/it/basic/table/import.mdx b/it/basic/table/import.mdx
index 6dc373bd..7a1a9f8c 100644
--- a/it/basic/table/import.mdx
+++ b/it/basic/table/import.mdx
@@ -4,7 +4,7 @@ description: "Importa in Teable dati CSV, Excel, Airtable o Fogli Google."
---
{/* mintlify-resync: 2026-05-14 */}
-Usa l'importazione per inizializzare una nuova Tabella, aggiungere nuovi dati a una Tabella esistente o trasferire Tabelle da Airtable o Fogli Google in una Base Teable. Airtable e Fogli Google sono disponibili anche durante l'importazione di un'intera Base.
+Usa l'importazione per inizializzare una nuova Tabella, aggiungere nuovi dati a una Tabella esistente o trasferire Tabelle da Airtable o Fogli Google in un Progetto Teable. Airtable e Fogli Google sono disponibili anche durante l'importazione di un intero Progetto.
Usa Connect Everything in AI Chat per migrare Airtable, Baserow, NocoDB, SmartSuite e altri sistemi in Teable.
@@ -72,16 +72,16 @@ Dopo il caricamento, associa le colonne del file ai Campi nella Tabella di desti
Se l'integrazione Airtable è configurata per l'istanza, puoi utilizzare l'importazione Airtable in due modi:
-- Per creare una nuova Base Teable, apri il menu dello Spazio di destinazione, fai clic su **Importa**, quindi scegli **Importa da Airtable**.
-- Per importare Tabelle nella Base Teable che stai visualizzando, usa il menu delle risorse della Base:
+- Per creare un nuovo Progetto Teable, apri il menu dello Spazio di destinazione, fai clic su **Importa**, quindi scegli **Importa da Airtable**.
+- Per importare Tabelle nel Progetto Teable che stai visualizzando, usa il menu delle risorse del Progetto:
-1. Apri la Base Teable desiderata.
+1. Apri il Progetto Teable desiderato.
2. Fai clic su `+` nella parte superiore della directory a sinistra.
3. Sotto **Aggiungi da altre origini**, scegli **Airtable**.
@@ -99,8 +99,8 @@ Durante l'importazione, Teable mostra l'avanzamento per Tabella. Se alcuni Campi
Inizia da uno dei due punti di accesso:
-- Per creare una nuova Base Teable, apri il menu dello Spazio di destinazione, fai clic su **Importa**, quindi scegli **Importa da Fogli Google**.
-- Per aggiungere Tabelle alla Base visualizzata, fai clic su `+` nella parte superiore della directory a sinistra e scegli **Fogli Google** sotto **Aggiungi da altre origini**.
+- Per creare un nuovo Progetto Teable, apri il menu dello Spazio di destinazione, fai clic su **Importa**, quindi scegli **Importa da Fogli Google**.
+- Per aggiungere Tabelle al Progetto visualizzato, fai clic su `+` nella parte superiore della directory a sinistra e scegli **Fogli Google** sotto **Aggiungi da altre origini**.
@@ -113,7 +113,7 @@ Inizia da uno dei due punti di accesso:
Ogni scheda viene mostrata come una scheda con il relativo numero di righe e colonne. Seleziona le schede desiderate. Disattiva **Importa Record** se vuoi soltanto la struttura dei Campi senza i dati.
- Fai clic su **Avvia importazione** e mantieni aperta la finestra. Viene mostrato l'avanzamento Tabella per Tabella e, al termine, quanti Record ha ricevuto ciascuna Tabella. Dopo l'importazione di una nuova Base, usa **Apri Base** per passare direttamente al risultato.
+ Fai clic su **Avvia importazione** e mantieni aperta la finestra. Viene mostrato l'avanzamento Tabella per Tabella e, al termine, quanti Record ha ricevuto ciascuna Tabella. Dopo l'importazione di un nuovo Progetto, usa **Apri Progetto** per passare direttamente al risultato.
diff --git a/it/basic/view/toolbar.mdx b/it/basic/view/toolbar.mdx
index b977d0f6..30a8288e 100644
--- a/it/basic/view/toolbar.mdx
+++ b/it/basic/view/toolbar.mdx
@@ -148,9 +148,9 @@ Usa l'interruttore `Ordina automaticamente i record` nel menu di ordinamento.
## Condividere la Vista
-**Condividi Vista** pubblica la Vista corrente come link. I visitatori vedono i dati e il layout di tale Vista. Non equivale a invitarli come collaboratori della Base.
+**Condividi Vista** pubblica la Vista corrente come link. I visitatori vedono i dati e il layout di tale Vista. Non equivale a invitarli come collaboratori del Progetto.
-Per condividere un'intera Base, una Tabella specifica o una cartella, usa la condivisione della Base descritta in [Base](/it/basic/base).
+Per condividere un intero Progetto, una Tabella specifica o una cartella, usa la condivisione del Progetto descritta in [Progetto](/it/basic/base).
| Opzione di condivisione | Utilizzo ideale |
| --- | --- |
@@ -240,5 +240,5 @@ Se la Vista è bloccata o non disponi dell'autorizzazione per modificarla, puoi
## Note
- La modifica di filtri, gruppi, ordinamenti, Campi visibili o altezza delle righe influisce su tutti gli utenti della Vista corrente, a meno che tu non sia in modalità personale.
-- Condividi Vista pubblica il risultato della Vista corrente, non tutte le autorizzazioni della Base. Per la collaborazione continuativa, usa le autorizzazioni dei membri o la condivisione della Base.
+- Condividi Vista pubblica il risultato della Vista corrente, non tutte le autorizzazioni del Progetto. Per la collaborazione continuativa, usa le autorizzazioni dei membri o la condivisione del Progetto.
- In entrambe le modalità, le modifiche ai valori delle celle vengono comunque sincronizzate per tutti.
diff --git a/it/deploy/env.mdx b/it/deploy/env.mdx
index 6c3f0f2b..c7c1a59f 100644
--- a/it/deploy/env.mdx
+++ b/it/deploy/env.mdx
@@ -71,7 +71,7 @@ mode: "wide"
| BACKEND_MAIL_AUTH_USER | Nome utente predefinito per l'autenticazione del server di posta | - | - | username |
| BACKEND_MAIL_AUTH_PASS | Password predefinita per l'autenticazione del server di posta | - | - | usertoken |
| BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH | Lunghezza massima del nome dell'invitante negli oggetti delle email di invito. Un valore vuoto o 0 disabilita il troncamento | - | - | 32 |
-| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Lunghezza massima del nome dello Spazio o della Base negli oggetti delle email di invito. Un valore vuoto o 0 disabilita il troncamento | - | - | 32 |
+| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Lunghezza massima del nome dello Spazio o del Progetto negli oggetti delle email di invito. Un valore vuoto o 0 disabilita il troncamento | - | - | 32 |
| **Configurazione sessione/JWT** | | | | |
| BACKEND_SESSION_EXPIRES_IN | Durata prima della scadenza della sessione | 7d | - | 7d |
| BACKEND_SESSION_COOKIE_SECURE | Indica se proteggere il cookie di sessione | false | - | true |
@@ -93,7 +93,7 @@ mode: "wide"
| TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | Numero massimo di Record per mutazione | 20000 | - | 20000 |
| TABLE_LIMIT_COMPUTED_CELL_VALUE_MAX_BYTES | Numero massimo di byte per il valore calcolato di una cella | 262144 | - | 262144 |
| TABLE_LIMIT_FORMULA_MAX_LENGTH | Lunghezza massima di una formula | 8192 | - | 8192 |
-| TABLE_LIMIT_TABLES_PER_BASE_MAX | Numero massimo di Tabelle per Base | 1000 | - | 1000 |
+| TABLE_LIMIT_TABLES_PER_BASE_MAX | Numero massimo di Tabelle per Progetto | 1000 | - | 1000 |
| TABLE_LIMIT_FIELDS_PER_TABLE_MAX | Numero massimo di Campi per Tabella | 500 | - | 500 |
| TABLE_LIMIT_VIEWS_PER_TABLE_MAX | Numero massimo di Viste per Tabella | 100 | - | 100 |
| TABLE_LIMIT_CREATE_TABLE_FIELDS_MAX | Numero massimo di Campi accettati durante la creazione di una Tabella | 1000 | - | 1000 |
@@ -133,10 +133,10 @@ mode: "wide"
| TELEMETRY_REPORT_DISABLED | Disabilita l'invio della telemetria self-hosted, inclusi i report di conformità delle licenze provenienti dalle istanze connesse | false | - | true |
| **Configurazione del database** | | | | |
| PRISMA_DATABASE_URL | URL di connessione al database; deve essere configurato | - | Sì | postgresql://teable:teable@127.0.0.1:5432/teable |
-| PUBLIC_DATABASE_PROXY | Indirizzo del database raggiungibile dall'esterno (host:porta) usato nelle credenziali generate dal pannello "Connessione database" della Base; impostalo per abilitare l'accesso SQL esterno in sola lettura | - | - | db.example.com:42345 |
+| PUBLIC_DATABASE_PROXY | Indirizzo del database raggiungibile dall'esterno (host:porta) usato nelle credenziali generate dal pannello "Connessione database" del Progetto; impostalo per abilitare l'accesso SQL esterno in sola lettura | - | - | db.example.com:42345 |
| PRISMA_TRANSACTION_TIMEOUT | Durata massima (ms) di una transazione prima del timeout. Aumentala per le transazioni prolungate (ad esempio, aggiornamenti in blocco con molte chiavi esterne) | 5000 | - | 60000 |
| PRISMA_TRANSACTION_MAX_WAIT | Tempo massimo (ms) di attesa per acquisire una transazione dal pool | 2000 | - | 5000 |
-| BIG_TRANSACTION_TIMEOUT | Timeout (ms) per le transazioni interne di grandi dimensioni, come l'esportazione di Base di grandi dimensioni | 600000 | - | 1200000 |
+| BIG_TRANSACTION_TIMEOUT | Timeout (ms) per le transazioni interne di grandi dimensioni, come l'esportazione di Progetti di grandi dimensioni | 600000 | - | 1200000 |
## Segreti e rotazione {#secrets-and-rotation}
diff --git a/ja/api-doc/get-id.mdx b/ja/api-doc/get-id.mdx
index b83f926c..f70cfb13 100644
--- a/ja/api-doc/get-id.mdx
+++ b/ja/api-doc/get-id.mdx
@@ -14,11 +14,11 @@ title: "IDの取得"
## BaseId
-対象のベースをクリックし、URLから「bse」で始まる文字列をコピーします。例:`bseXXXXXXXXXX`
+対象のプロジェクトをクリックし、URLから「bse」で始まる文字列をコピーします。例:`bseXXXXXXXXXX`
diff --git a/ja/api-doc/oauth.mdx b/ja/api-doc/oauth.mdx
index edc07cc1..e261ad4f 100644
--- a/ja/api-doc/oauth.mdx
+++ b/ja/api-doc/oauth.mdx
@@ -33,7 +33,7 @@ Teableは、次の3つのOAuth 2.0認可モードに対応しています。
| リソース | スコープ |
|----------|--------|
| **アプリ** | `app\|create`, `app\|read`, `app\|update`, `app\|delete` |
-| **ベース** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
+| **プロジェクト** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
| **テーブル** | `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` |
@@ -296,14 +296,14 @@ curl https://app.teable.ai/api/table/TABLE_ID/record \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-通常、トークン取得後の最初の手順は、現在のユーザーがアクセスできるすべてのベースを取得することです。
+通常、トークン取得後の最初の手順は、現在のユーザーがアクセスできるすべてのプロジェクトを取得することです。
```bash
curl https://app.teable.ai/api/base/access/all \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-このエンドポイントは、現在のユーザーがアクセス権限を持つすべてのベースを返します。レスポンス内の`baseId`を以降のAPI呼び出しに使用できます。
+このエンドポイントは、現在のユーザーがアクセス権限を持つすべてのプロジェクトを返します。レスポンス内の`baseId`を以降のAPI呼び出しに使用できます。
## アクセストークンを更新する
diff --git a/ja/api-doc/record/interface.mdx b/ja/api-doc/record/interface.mdx
index ad773860..2d5a751d 100644
--- a/ja/api-doc/record/interface.mdx
+++ b/ja/api-doc/record/interface.mdx
@@ -2,7 +2,7 @@
title: "レコードフィールドインターフェース"
---
-ルックアップフィールドは、特定のフィールド型ではありません。リンクされたベースから、任意の型のフィールドを参照できます。ルックアップフィールドの型はリンク先ベースの元フィールドによって決まり、isLookupプロパティを持ちます。ルックアップフィールドは編集できません。
+ルックアップフィールドは、特定のフィールド型ではありません。リンクされたプロジェクトから、任意の型のフィールドを参照できます。ルックアップフィールドの型はリンク先プロジェクトの元フィールドによって決まり、isLookupプロパティを持ちます。ルックアップフィールドは編集できません。
特定の状況では、すべてのフィールドの戻り値に`isMultipleCellValue: true`が設定される場合があります。
diff --git a/ja/api-doc/sql-query.mdx b/ja/api-doc/sql-query.mdx
index 8d6bbf4c..97c1dd68 100644
--- a/ja/api-doc/sql-query.mdx
+++ b/ja/api-doc/sql-query.mdx
@@ -11,12 +11,12 @@ Teableでは、外部ツールから基盤となるPostgreSQLデータベース
### データベース接続を作成する
-1. **テーブルを開く**:まず、接続するベース内の任意のテーブルを開きます。
-2. **設計ページを開く**:右上の⚙️アイコンをクリックして、ベース設計ページを開きます。
+1. **テーブルを開く**:まず、接続するプロジェクト内の任意のテーブルを開きます。
+2. **設計ページを開く**:右上の⚙️アイコンをクリックして、プロジェクト設計ページを開きます。
@@ -50,7 +50,7 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
**注:** PostgreSQLでは、大文字と小文字を区別した状態を維持するため、スキーマ名とテーブル名を二重引用符`"`で囲みます。
このクエリを記述するには、次の3つの情報が必要です。
-- **スキーマ名(BaseId)**: `bse`で始まるベース識別子
+- **スキーマ名(BaseId)**: `bse`で始まるプロジェクト識別子
- **テーブル名**:PostgreSQL内の物理テーブル名
- **フィールド名**:データベース内の実際の列名
@@ -58,27 +58,27 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
### BaseId(スキーマ名)を確認する
-Teableの各ベースは、PostgreSQL内の1つの**スキーマ**に対応します。BaseIdは、SQLクエリで使用するスキーマ名です。
+Teableの各プロジェクトは、PostgreSQL内の1つの**スキーマ**に対応します。BaseIdは、SQLクエリで使用するスキーマ名です。
**方法1:** URLを確認します。`bse`で始まる文字列がBaseIdです。
-**方法2:** ベース設計画面に表示されているスキーマ名がBaseIdです。
+**方法2:** プロジェクト設計画面に表示されているスキーマ名がBaseIdです。
### テーブル名を確認する
-Teable画面上のテーブル名は、物理データベースのテーブル名と自動的には同期されません。実際のデータベーステーブル名は、ベース設計画面で確認してください。
+Teable画面上のテーブル名は、物理データベースのテーブル名と自動的には同期されません。実際のデータベーステーブル名は、プロジェクト設計画面で確認してください。
diff --git a/ja/api-doc/token.mdx b/ja/api-doc/token.mdx
index 127fd8bf..c30e0e4d 100644
--- a/ja/api-doc/token.mdx
+++ b/ja/api-doc/token.mdx
@@ -15,7 +15,7 @@ description: "パーソナルアクセストークンは、認証と認可に使
3. トークンに適切な権限スコープを追加します。
-4. トークンからアクセスできるベースとスペースを指定します。
+4. トークンからアクセスできるプロジェクトとスペースを指定します。
作成したトークンが表示されるのは一度だけです。コピーして安全な場所に保管することをおすすめします。
diff --git a/ja/basic/admin-panel/announcements.mdx b/ja/basic/admin-panel/announcements.mdx
index 3b359a2a..d02df816 100644
--- a/ja/basic/admin-panel/announcements.mdx
+++ b/ja/basic/admin-panel/announcements.mdx
@@ -15,7 +15,7 @@ description: "アプリ内のお知らせを全員、選択したスペース、
| 設定 | 制御する内容 |
| --- | --- |
-| **形式** | お知らせの表示場所:アプリ上部の**バナー**、一時的な通知として表示される**トースト**、操作を中断するダイアログ形式の**モーダル**、またはスペースとベースのサイドバーに表示される**サイドバーカード**。|
+| **形式** | お知らせの表示場所:アプリ上部の**バナー**、一時的な通知として表示される**トースト**、操作を中断するダイアログ形式の**モーダル**、またはスペースとプロジェクトのサイドバーに表示される**サイドバーカード**。|
| **レベル** | ユーザーに示す性質:**情報**、**メンテナンス**、**重大**、または**解決済み**。|
| タイトルと**本文** | お知らせのテキスト。|
| **開始日時** / **終了日時** | お知らせが配信される期間。終了日時は開始日時より後である必要があります。|
diff --git a/ja/basic/admin-panel/audit-log.mdx b/ja/basic/admin-panel/audit-log.mdx
index e9b2bab5..be770925 100644
--- a/ja/basic/admin-panel/audit-log.mdx
+++ b/ja/basic/admin-panel/audit-log.mdx
@@ -11,9 +11,9 @@ description: "システム管理でインスタンス全体のアクティビテ
## 確認できる内容
-監査ログには、スペース、ベース、テーブル、ビュー、フィールド、レコード、共有、招待、アクセストークン、権限マトリクスなど、一般的な管理および共同作業のアクティビティが記録されます。
+監査ログには、スペース、プロジェクト、テーブル、ビュー、フィールド、レコード、共有、招待、アクセストークン、権限マトリクスなど、一般的な管理および共同作業のアクティビティが記録されます。
-各ログエントリには、操作日時、操作者、操作の種類、関連するベースまたはスペース、リクエスト元が表示されます。ログエントリを開くと、詳細を確認できます。
+各ログエントリには、操作日時、操作者、操作の種類、関連するプロジェクトまたはスペース、リクエスト元が表示されます。ログエントリを開くと、詳細を確認できます。
## 操作者に対して操作する
@@ -30,10 +30,10 @@ description: "システム管理でインスタンス全体のアクティビテ
- **操作者を選択**:特定のユーザーが実行した操作を表示します。
- **スペースを選択**:特定のスペース内のアクティビティを表示します。
-- **ベースを選択**:特定のベースに関するアクティビティを表示します。
-- **アクションを選択**:レコード、フィールド、ビュー、テーブル、ベース、共有、権限マトリクス、権限マトリクスのロール、スペース、招待、ユーザー、アクセストークンなどの操作の種類で絞り込みます。
+- **プロジェクトを選択**:特定のプロジェクトに関するアクティビティを表示します。
+- **アクションを選択**:レコード、フィールド、ビュー、テーブル、プロジェクト、共有、権限マトリクス、権限マトリクスのロール、スペース、招待、ユーザー、アクセストークンなどの操作の種類で絞り込みます。
-ユーザー、ベース、またはスペースが削除されても、そのエントリはログに残り、リソースには削除済みと表示されます。
+ユーザー、プロジェクト、またはスペースが削除されても、そのエントリはログに残り、リソースには削除済みと表示されます。
## 大量のログ一覧を閲覧する
diff --git a/ja/basic/admin-panel/computed-outbox.mdx b/ja/basic/admin-panel/computed-outbox.mdx
index 7adaa2e2..dc87acb4 100644
--- a/ja/basic/admin-panel/computed-outbox.mdx
+++ b/ja/basic/admin-panel/computed-outbox.mdx
@@ -30,7 +30,7 @@ description: "システム管理でBullMQの配信と計算タスクのバック
一覧を絞り込むには、次の操作を行います。
- テーブル上部の状態タイルをクリックし、**待機中**、**実行中**、**遅延**、**失敗**、**完了(保持)**などの状態で絞り込みます。複数を同時に選択でき、タイルにカーソルを合わせると状態の意味が表示されます。
-- **スペース**、**ベース**、**原因**、**結果**で絞り込むか、タスク、ベース、スペース、エラーを検索します。または最小処理時間を設定して、遅いタスクを抽出します。
+- **スペース**、**プロジェクト**、**原因**、**結果**で絞り込むか、タスク、プロジェクト、スペース、エラーを検索します。または最小処理時間を設定して、遅いタスクを抽出します。
- 行をクリックして**計算系統**を開きます。キューのタイムスタンプ、配信遅延、処理時間、失敗した配信のマスキング済みSQLを含む完全な失敗理由、以下で説明する伝播の詳細を確認できます。
**完了**は、タスクが処理を実行したことを意味するわけではありません。結果バッジは、配信が実際に行った内容を示します。**処理済み**はタスクを実行し、**処理なし**は実行すべき処理が残っておらず、**延期**は後で実行するよう再スケジュールし、**保留**はそのスコープが一時停止していることを意味します。**結果**フィルターは、その結果で一覧を絞り込み、各結果に含まれる配信数を表示します。そのため、**完了(保持)**と**処理済み**を組み合わせると、実際にタスクを実行した配信だけが残ります。
@@ -58,7 +58,7 @@ description: "システム管理でBullMQの配信と計算タスクのバック
**失敗**の件数と**異常メンテナンス**では異なる種類の問題を示すため、件数が一致しない場合があります。
-**異常メンテナンス**では、ベース、ソーステーブル、エラーごとに1つの問題グループとして異常をまとめるため、単一の根本原因を簡単に特定できます。復旧を行う前に、失敗理由を確認し、根本的な問題を修正してください。グループを展開すると、エラーの詳細と対象のタスクを確認できます。これらの行は調査用であり、復旧は必ずグループ全体に対して実行されます。
+**異常メンテナンス**では、プロジェクト、ソーステーブル、エラーごとに1つの問題グループとして異常をまとめるため、単一の根本原因を簡単に特定できます。復旧を行う前に、失敗理由を確認し、根本的な問題を修正してください。グループを展開すると、エラーの詳細と対象のタスクを確認できます。これらの行は調査用であり、復旧は必ずグループ全体に対して実行されます。
グループで使用できる操作は、種類によって異なります。
@@ -70,7 +70,7 @@ description: "システム管理でBullMQの配信と計算タスクのバック
グループの復旧後、Teableは復元したタスク数、新規にキューへ追加された数またはすでにキューにあった数、配信または延期された数を報告します。その後、ワーカーは現在の同時実行数とタスク分割の制限に従ってグループを処理します。
-**ベース削除済み**と表示されたグループは、すでに存在しないベースに属しています。復旧してもすぐに再び失敗するため、**グループを破棄**だけを使用できます。
+**プロジェクト削除済み**と表示されたグループは、すでに存在しないプロジェクトに属しています。復旧してもすぐに再び失敗するため、**グループを破棄**だけを使用できます。
テーブルをゴミ箱へ移動しても、ここに異常は作成されなくなりました。ゴミ箱内のテーブルを参照している計算タスクは、そのテーブルを読み取るステップをスキップし、稼働中のテーブルを対象とするステップを完了して終了します。
@@ -101,8 +101,8 @@ description: "システム管理でBullMQの配信と計算タスクのバック
| コントロール | 制限する内容 |
| --- | --- |
| **プロセスごとの同時実行数** | 各ワーカープロセスが同時に処理する計算タスクの数。|
-| **ベースごとの取得上限** | 1つのベースで同時に実行する計算タスク数(**ベースごと**)と、その中の1つのソーステーブルで同時に実行する数(**シードテーブルごと**)。どちらもデフォルトは2で、1から16までの値を指定できます。|
+| **プロジェクトごとの取得上限** | 1つのプロジェクトで同時に実行する計算タスク数(**プロジェクトごと**)と、その中の1つのソーステーブルで同時に実行する数(**シードテーブルごと**)。どちらもデフォルトは2で、1から16までの値を指定できます。|
-1つの高負荷ベースがボトルネックの場合は取得上限を引き上げ、多数のベースが同時にキューへ入っている場合はプロセスごとの同時実行数を引き上げます。
+1つの高負荷プロジェクトがボトルネックの場合は取得上限を引き上げ、多数のプロジェクトが同時にキューへ入っている場合はプロセスごとの同時実行数を引き上げます。
同時実行数を増やすと、データベースの負荷が高くなります。[データベーステナント](/ja/basic/admin-panel/database-tenant)にデータを保存しているスペースでは、接続プールが環境の値に合わせて設定されているため、取得上限には環境のデフォルト値が維持されます。
diff --git a/ja/basic/admin-panel/database-tenant.mdx b/ja/basic/admin-panel/database-tenant.mdx
index d007a507..de9e12ce 100644
--- a/ja/basic/admin-panel/database-tenant.mdx
+++ b/ja/basic/admin-panel/database-tenant.mdx
@@ -26,6 +26,6 @@ description: "Teableスペースのデータを顧客管理のPostgreSQLデー
いいえ。そのデータベースにデータを保存するTeableスペースを指します。
- いいえ。Teableが自身のスペースデータを保存および管理する場所を変更する機能です。外部でホストされているPostgreSQLデータベースを指定すると、Teableがその中に独自のデータを作成して管理します。そのデータベース内の既存のテーブルやレコードがTeableへ接続されたり、ベースとして自動的にインポートされたりすることはありません。
+ いいえ。Teableが自身のスペースデータを保存および管理する場所を変更する機能です。外部でホストされているPostgreSQLデータベースを指定すると、Teableがその中に独自のデータを作成して管理します。そのデータベース内の既存のテーブルやレコードがTeableへ接続されたり、プロジェクトとして自動的にインポートされたりすることはありません。
diff --git a/ja/basic/admin-panel/multitenancy.mdx b/ja/basic/admin-panel/multitenancy.mdx
index 6587cc73..acf148a7 100644
--- a/ja/basic/admin-panel/multitenancy.mdx
+++ b/ja/basic/admin-panel/multitenancy.mdx
@@ -16,10 +16,10 @@ Teableインスタンスには複数の組織テナントを作成でき、顧
Teableインスタンス
├── 組織テナントA
│ ├── 組織管理者、メンバー、部門
-│ └── スペース、ベース、組織レベルの設定
+│ └── スペース、プロジェクト、組織レベルの設定
├── 組織テナントB
│ ├── 組織管理者、メンバー、部門
-│ └── スペース、ベース、組織レベルの設定
+│ └── スペース、プロジェクト、組織レベルの設定
└── 組織テナントC
```
@@ -107,7 +107,7 @@ Teableインスタンス
| --- | --- |
| **ユーザー** | 現在の組織内のユーザーを表示、管理します |
| **組織** | 部門を作成、移動、名前変更、削除し、部門メンバーを管理します |
-| **スペース管理** | 組織へのスペースの追加と削除、スペース数とベース数の確認を行います |
+| **スペース管理** | 組織へのスペースの追加と削除、スペース数とプロジェクト数の確認を行います |
| **認証設定** | 組織のサードパーティー認証プロバイダーを設定します |
| **セキュリティ設定** | メールドメインを確認し、そのドメインを持つ新規ユーザーが自動的に組織へ参加するようにします |
| **インスタンス設定** | 組織名、スペースへの自動アクセス、部門の範囲を変更します |
diff --git a/ja/basic/admin-panel/skills.mdx b/ja/basic/admin-panel/skills.mdx
index 90ec86f8..cdd56766 100644
--- a/ja/basic/admin-panel/skills.mdx
+++ b/ja/basic/admin-panel/skills.mdx
@@ -9,7 +9,7 @@ description: "インスタンス内のすべてのAIエージェントが使用
**Skill**を使用して、インスタンス全体へSkillを公開します。ここで追加したSkillは、すべてのAIチャット、App Builder、ボットの会話で利用できます。組織で標準として共有すべき作業方法、たとえば社内の文章スタイル、レポート規則、共通の連携手順などに使用してください。
-他の場所でユーザーが追加したSkillは、それぞれのスコープ内に留まります。個人、ベース、スペースのSkillについては、[AIチャット](/ja/basic/ai/ai-chat)をご覧ください。
+他の場所でユーザーが追加したSkillは、それぞれのスコープ内に留まります。個人、プロジェクト、スペースのSkillについては、[AIチャット](/ja/basic/ai/ai-chat)をご覧ください。
## Skillを追加する
@@ -34,4 +34,4 @@ description: "インスタンス内のすべてのAIエージェントが使用
## 同じ名前が複数回使用されている場合
-ここで公開したSkillは、インスタンスのデフォルトになります。ベース、スペース、個人、アプリ、ボットのSkillで同じ名前を使用している場合、その会話では狭いスコープのSkillが有効になり、インスタンスのSkillは無視されます。
+ここで公開したSkillは、インスタンスのデフォルトになります。プロジェクト、スペース、個人、アプリ、ボットのSkillで同じ名前を使用している場合、その会話では狭いスコープのSkillが有効になり、インスタンスのSkillは無視されます。
diff --git a/ja/basic/admin-panel/spaces.mdx b/ja/basic/admin-panel/spaces.mdx
index c3de2d52..453905df 100644
--- a/ja/basic/admin-panel/spaces.mdx
+++ b/ja/basic/admin-panel/spaces.mdx
@@ -8,7 +8,7 @@ description: "スペース情報の表示、スペースの削除、自動参加
### スペース情報
* **スペース名**:スペースの表示名
-* **ベース**:スペースに含まれるベースの総数
+* **プロジェクト**:スペースに含まれるプロジェクトの総数
* **コラボレーター**:スペースへのアクセス権を持つユーザーの総数
* **作成日時**:スペースが作成された日時
* **自動参加**:新しいユーザーがスペースへ自動的に参加できるかどうか
@@ -26,7 +26,7 @@ description: "スペース情報の表示、スペースの削除、自動参加
システム管理からスペースを削除すると、次の処理が行われます。
* スペースはすぐに削除済みとしてマークされます
-* スペース内のすべてのベースとデータへアクセスできなくなります
+* スペース内のすべてのプロジェクトとデータへアクセスできなくなります
* コラボレーターはスペースへのアクセス権を失います
* この操作は元に戻せません
diff --git a/ja/basic/admin-panel/table-query-ops.mdx b/ja/basic/admin-panel/table-query-ops.mdx
index 1bcda61e..193248d5 100644
--- a/ja/basic/admin-panel/table-query-ops.mdx
+++ b/ja/basic/admin-panel/table-query-ops.mdx
@@ -26,7 +26,7 @@ description: "テーブルごとに検索カバレッジとインデックスを
| **未設定** | 検索カバレッジがまだないテーブル。|
| **利用不可** | 現在インデックス検索を利用できないテーブル。行に理由が表示されます。|
-検索ボックスでは、テーブル、ベース、スペースの名前とIDを指定できます。並べ替えは**低速クエリが多い順**または**テーブル名**です。**観測期間**は直近1時間または24時間から選べ、一覧の観測値はすべてこの期間に従います。観測データの保持期間は2日間で、それより古いものは一覧に表示されません。
+検索ボックスでは、テーブル、プロジェクト、スペースの名前とIDを指定できます。並べ替えは**低速クエリが多い順**または**テーブル名**です。**観測期間**は直近1時間または24時間から選べ、一覧の観測値はすべてこの期間に従います。観測データの保持期間は2日間で、それより古いものは一覧に表示されません。
各行には、テーブルの推定行数とサイズ、期間内のリクエスト数と低速クエリ数、現在の検索方式とフィールドのカバー状況、フィルター/ソート用インデックスの数、未処理の推奨事項と実行中タスクの件数が表示されます。テーブル名をクリックすると詳細が開きます。
diff --git a/ja/basic/admin-panel/template-admin.mdx b/ja/basic/admin-panel/template-admin.mdx
index 77084742..7e82eee0 100644
--- a/ja/basic/admin-panel/template-admin.mdx
+++ b/ja/basic/admin-panel/template-admin.mdx
@@ -1,6 +1,6 @@
---
title: "テンプレート管理"
-description: "組織のワークフローテンプレートを管理し、事前設定済みのベースをユーザーがすぐに利用できるようにします。"
+description: "組織のワークフローテンプレートを管理し、事前設定済みのプロジェクトをユーザーがすぐに利用できるようにします。"
---
セルフホストのBusinessプラン以上で利用できます
@@ -16,12 +16,12 @@ description: "組織のワークフローテンプレートを管理し、事前
* **Markdownの説明**:リッチテキスト形式に対応した詳細説明
* **カテゴリー**:ビジネスシナリオ(例:人事、営業、エンジニアリング)別にテンプレートを分類します
* **システム**:公式システムテンプレートかどうかを示します
-* **ソース**:このテンプレートの作成元となるベース
+* **ソース**:このテンプレートの作成元となるプロジェクト
#### テンプレートの操作
* **新しいテンプレート**:新しいテンプレート設定を作成します
-* **スナップショットを公開**:ソースベースの現在の状態を取得します。テンプレートを一覧へ掲載する前に、スナップショットを公開する必要があります。
+* **スナップショットを公開**:ソースプロジェクトの現在の状態を取得します。テンプレートを一覧へ掲載する前に、スナップショットを公開する必要があります。
* **ステータス(公開)**: テンプレートセンターへのテンプレートの掲載と非掲載を切り替えます。名前、説明、スナップショットが必要です。
* **固定**:重要なテンプレートを一覧の上部に固定します
* **削除**:テンプレート設定を削除します
@@ -31,7 +31,7 @@ description: "組織のワークフローテンプレートを管理し、事前
セルフホスト版のユーザーは、Teable Cloudの公式テンプレートをインポートできます。
1. **ダウンロード**:[公式テンプレートセンター](https://teable.ai/templates)から`.tea`ファイルを取得します
-2. **インポート**:`.tea`ファイルをスペース内の新しいベースとしてインポートします
+2. **インポート**:`.tea`ファイルをスペース内の新しいプロジェクトとしてインポートします
3. **テンプレートを作成**:テンプレート管理 > 新しいテンプレートへ移動します
-4. **ソースを選択**:インポートしたベースをソースとして選択します
+4. **ソースを選択**:インポートしたプロジェクトをソースとして選択します
5. **公開**:詳細を設定し、スナップショットを公開して、ステータスを有効にします ---
diff --git a/ja/basic/ai/ai-chat.mdx b/ja/basic/ai/ai-chat.mdx
index 86bd09e0..9e8d9f0d 100644
--- a/ja/basic/ai/ai-chat.mdx
+++ b/ja/basic/ai/ai-chat.mdx
@@ -35,7 +35,7 @@ AIは、現在のページにある情報を優先します。
- **自分のシークレット**:**+** → **もっと** → **自分のシークレット**を開き、**設定** → **統合**でAPIキーやその他の認証情報を保存します。これらの値は個人に属し、AIチャットは実行時に環境変数として読み取れます。個々のアプリやオートメーションへ付与することもできます。詳しくは[認証情報と連携](/ja/basic/credential)を参照してください。
- **認証情報のリクエスト**:AIがサードパーティーアカウントやシークレットを必要とする場合、認証情報リクエストのカードが会話に固定されます。**自分のアカウントを接続**でOAuthを実行するか、すでに持っている認証情報を付与します。**スキップ**を選ぶと認証情報は渡されず、AIはそれなしで完了できる処理を続行します。
- **Webスクレイパー**:**+**メニューを開いて**Webスクレイパー**を選択し、プラットフォームとデータの種類を選びます。項目は2種類あり、貼り付けたリンクから抽出するもの(LinkedInの**個人プロフィール**、Amazonの**商品レビュー**など)と、キーワード、ハッシュタグ、名前で探すもの(TikTokの**動画検索**、Redditの**サブレディットの投稿**など)があります。選ぶと対応する抽出の指示がチャット入力欄へ自動で入力され、補うべき部分が末尾に残ります。**任意のWebページ**を選べば、リンクを貼り付けるだけで抽出できます。
-- **Skill**: **+**メニューを開き、**Skill**を選択して、現在のチャットでSkillをインポート、有効化、無効化、試用します。インポート時に利用者を選びます。**個人**は自分だけ、**ベース**はこのベースのコラボレーター、**スペース**はこのスペースの全員が利用できます。入力ボックスに`/`と入力すると、有効なSkillを選択できます。外部システムへの接続または移行については、[あらゆるデータへ接続・移行](/ja/basic/ai/connect-everything)をご覧ください。
+- **Skill**: **+**メニューを開き、**Skill**を選択して、現在のチャットでSkillをインポート、有効化、無効化、試用します。インポート時に利用者を選びます。**個人**は自分だけ、**プロジェクト**はこのプロジェクトのコラボレーター、**スペース**はこのスペースの全員が利用できます。入力ボックスに`/`と入力すると、有効なSkillを選択できます。外部システムへの接続または移行については、[あらゆるデータへ接続・移行](/ja/basic/ai/connect-everything)をご覧ください。
- **コンテキスト使用量**:入力ボックスの横にあるリングは、会話が現在使用しているモデルのコンテキストウィンドウの量を示します。クリックすると、割合とトークン数を確認できます。コンテキストがいっぱいになると、Teableは会話を圧縮します。新しいコンテキストから始める場合は、新しいチャットを開始してください。
- **ファイルを管理**:**+** → **その他** → **ファイルを管理**を開くと、現在のチャットのサンドボックス内にあるファイルを表示できます。対応ファイルのプレビュー、ファイルのダウンロード、不要になったファイルやフォルダーの削除が可能です。ファイルを管理するには、会話が存在している必要があります。
- **メッセージキュー**:AIの処理中に別のメッセージを送信しても、処理は中断されません。メッセージは入力ボックス上部のキューで待機し、現在の実行が終了すると送信されます。キュー内の項目には、チャット入力時と同じテーブル、ビュー、添付ファイル、選択範囲のチップが保持されます。**削除**で項目を取り除き、**...** → **メッセージを編集**で入力ボックスへ戻せます。テキストだけの項目では、待機する代わりに、そのテキストを実行中のターンへ渡す**指示を追加**も利用できます。
@@ -129,9 +129,9 @@ AIはこれらを**アーティファクト**として構築します。アー
### メモリ
-メモリには、Cuppyへ明示的に記憶するよう依頼した情報が保存されます。メモリのスコープはユーザーとベースの組み合わせです。各ベースの各ユーザーが独立したメモリコンテキストを持ち、別のベースに保存されたメモリは、現在のベースへ自動的には表示されません。
+メモリには、Cuppyへ明示的に記憶するよう依頼した情報が保存されます。メモリのスコープはユーザーとプロジェクトの組み合わせです。各プロジェクトの各ユーザーが独立したメモリコンテキストを持ち、別のプロジェクトに保存されたメモリは、現在のプロジェクトへ自動的には表示されません。
-- 現在のベースにメモリを保存する
+- 現在のプロジェクトにメモリを保存する
会話内でCuppyに記憶させる内容を伝えます。
@@ -139,12 +139,12 @@ AIはこれらを**アーティファクト**として構築します。アー
xxxを覚えておいてください。
```
-- 別のベースのメモリを再利用する
+- 別のプロジェクトのメモリを再利用する
-Cuppyに別のベースを読み取り、関連する内容を現在のベースへ保存するよう依頼します。
+Cuppyに別のプロジェクトを読み取り、関連する内容を現在のプロジェクトへ保存するよう依頼します。
```text
-Cuppy、ベースID bsexxxxxxxxxxxxのメモリを読み取り、関連するメモリを現在のベースに保存してください。
+Cuppy、プロジェクトID bsexxxxxxxxxxxxのメモリを読み取り、関連するメモリを現在のプロジェクトに保存してください。
```
### 長時間のタスクを処理する
@@ -228,8 +228,8 @@ AIがグラフ、レポート、ダッシュボード形式のページ、小規
入力ボックスに`@`と入力し、AIチャットで参照するノードを選択します。グリッドビューの選択範囲については、行、列、単一セル、またはセル範囲を選択し、コンテキストメニューから**チャットに追加**を使用することもできます。
-
- はい。AIはチャットが属するベースだけに限定されません。アクセス権を持つ他のベースを検索し、操作できます。たとえば「このテーブルと営業ベースの注文テーブルを比較してください」のように、リクエスト内でベース名を指定します。`@`には現在のベース内のノードだけが表示され、他の場所を明示しない操作はチャットが属するベースで行われます。
+
+ はい。AIはチャットが属するプロジェクトだけに限定されません。アクセス権を持つ他のプロジェクトを検索し、操作できます。たとえば「このテーブルと営業プロジェクトの注文テーブルを比較してください」のように、リクエスト内でプロジェクト名を指定します。`@`には現在のプロジェクト内のノードだけが表示され、他の場所を明示しない操作はチャットが属するプロジェクトで行われます。
@@ -239,8 +239,8 @@ AIがグラフ、レポート、ダッシュボード形式のページ、小規
デフォルトでは開けません。自分のアーティファクトを開けるのは自分だけです。ビューアーで**共有を有効化**をオンにしてリンクを送信し、アーティファクトをスペース内に限定する場合は**スペースのメンバー**を選択します。
-
- いいえ。メモリのスコープはユーザーとベースの組み合わせです。別のベースのメモリを再利用する場合は、そのベースのメモリを読み取り、関連する内容を現在のベースへ保存するようCuppyに依頼します。
+
+ いいえ。メモリのスコープはユーザーとプロジェクトの組み合わせです。別のプロジェクトのメモリを再利用する場合は、そのプロジェクトのメモリを読み取り、関連する内容を現在のプロジェクトへ保存するようCuppyに依頼します。
@@ -268,11 +268,11 @@ AIがグラフ、レポート、ダッシュボード形式のページ、小規
- **+**メニューを開いて**Skill**を選択し、Skillをインポートまたは管理するか、入力ボックスに`/`と入力して有効なSkillを選択します。インポート時に利用者を選びます。個人は自分のチャット、ベースは同じベースのコラボレーター、スペースはスペース内の全員が対象です。ベースを管理できるユーザーはベースのSkillを追加でき、スペースの所有者と作成者はスペースのSkillを追加できます。AIチャットに`.skill`ファイルが表示された場合は、ファイルカードの**インストール**を使用して追加します。
+ **+**メニューを開いて**Skill**を選択し、Skillをインポートまたは管理するか、入力ボックスに`/`と入力して有効なSkillを選択します。インポート時に利用者を選びます。個人は自分のチャット、プロジェクトは同じプロジェクトのコラボレーター、スペースはスペース内の全員が対象です。プロジェクトを管理できるユーザーはプロジェクトのSkillを追加でき、スペースの所有者と作成者はスペースのSkillを追加できます。AIチャットに`.skill`ファイルが表示された場合は、ファイルカードの**インストール**を使用して追加します。
- 有効になるバージョンは常に1つだけで、個人のコピーよりチームで共有するバージョンが優先されます。ベースのSkillはスペースのSkillより優先され、スペースのSkillは個人のSkillより優先されます。アプリまたはボットの会話では、そのアプリまたはボットに追加されたSkillが最優先です。全員を新しいバージョンへ移行するには、ベースまたはスペースのコピーを更新します。
+ 有効になるバージョンは常に1つだけで、個人のコピーよりチームで共有するバージョンが優先されます。プロジェクトのSkillはスペースのSkillより優先され、スペースのSkillは個人のSkillより優先されます。アプリまたはボットの会話では、そのアプリまたはボットに追加されたSkillが最優先です。全員を新しいバージョンへ移行するには、プロジェクトまたはスペースのコピーを更新します。
diff --git a/ja/basic/ai/app-builder.mdx b/ja/basic/ai/app-builder.mdx
index de346d93..dfd592f9 100644
--- a/ja/basic/ai/app-builder.mdx
+++ b/ja/basic/ai/app-builder.mdx
@@ -5,21 +5,21 @@ description: AIを使用して、データをカスタムWebアプリケーシ
すべてのCloudプランで利用できます。セルフホストではBusinessプラン以上が必要です。
-Teable App Builderを使用すると、コードを書かずに、データベースを完全に機能するカスタマイズ済みWebアプリケーションへ変換できます。データ構造の力とAIによる設計を組み合わせることで、社内ツール、顧客ポータル、データダッシュボードを数分で公開できます。
+Teable App Builderを使用すると、コードを書かずに、プロジェクトを完全に機能するカスタマイズ済みWebアプリケーションへ変換できます。データ構造の力とAIによる設計を組み合わせることで、社内ツール、顧客ポータル、データダッシュボードを数分で公開できます。
## 概要
App Builderは、「プロンプトからアプリへ」というワークフローに従います。必要なものを説明すると、AIがアプリケーションの構造、ページ、ロジックを構築します。その後、ビジュアルエディターまたはコードを使用して、細部を調整できます。
-カスタムインターフェースや独立したアプリを作成するには、App Builderを使用します。データベース内でのインタラクティブなデータ分析やその場限りの質問には、[AIチャット](/ja/basic/ai/ai-chat)を使用してください。
+カスタムインターフェースや独立したアプリを作成するには、App Builderを使用します。プロジェクト内でのインタラクティブなデータ分析やその場限りの質問には、[AIチャット](/ja/basic/ai/ai-chat)を使用してください。
## アプリを作成する
アプリを作成する主な方法は2つあります。
-1. **ベースから**:任意のベースで「アプリを作成」をクリックし、現在のデータにリンクされたアプリケーションを生成します。
+1. **プロジェクトから**:任意のプロジェクトで「アプリを作成」をクリックし、現在のデータにリンクされたアプリケーションを生成します。
2. **チャットから**:AIチャットを開き、「この顧客テーブル用のCRMアプリを作成して」と伝えます。
## アプリエディターの画面
@@ -37,7 +37,7 @@ App Builderには、技術者以外のユーザーと開発者の両方に対応
- **自然言語による編集**:*「ヘッダーを青にして」*、*「新しいレコードの送信フォームを追加して」*など、変更内容を説明します。
- **自動ルーティング**:AIが参照しているコンポーネントまたはページを理解し、直接変更します。
- **連携**:アプリのタスクでサードパーティーアカウントへのアクセスが必要な場合、App Builderはチャットパネルに**Slackへ接続**などのカードを表示できます。**接続**をクリックしてOAuth認証を行います。認証をキャンセルするには**スキップ**をクリックします。AIは、その接続なしで完了できる処理を続行します。
-- **Skill**: **+**メニューを開いて**Skill**を選択し、このアプリの会話で使用するSkillを管理します。ここで追加したSkillは現在のアプリでのみ利用でき、アプリのベースとスペースで共有されているSkillも使用できます。入力ボックスに`/`と入力すると、有効なSkillを選択できます。
+- **Skill**: **+**メニューを開いて**Skill**を選択し、このアプリの会話で使用するSkillを管理します。ここで追加したSkillは現在のアプリでのみ利用でき、アプリのプロジェクトとスペースで共有されているSkillも使用できます。入力ボックスに`/`と入力すると、有効なSkillを選択できます。
- **ファイルを管理**:**+** → **その他** → **ファイルを管理**を開き、アプリのサンドボックス内にあるファイルを表示します。対応ファイルのプレビュー、生成ファイルのダウンロード、不要になったファイルやフォルダーの削除に使用します。
- **会話を消去**:現在の会話が本題から外れた場合は、パネル右下の**チャットを消去**をクリックして、新しいセッションを開始します。現在の会話のチャット履歴は消去されますが、アプリ自体は削除されません。初回は確認が表示され、次回から表示しないよう選択できます。
diff --git a/ja/basic/ai/connect-everything/migrate-airtable.mdx b/ja/basic/ai/connect-everything/migrate-airtable.mdx
index 2b9fe8b2..61c5602c 100644
--- a/ja/basic/ai/connect-everything/migrate-airtable.mdx
+++ b/ja/basic/ai/connect-everything/migrate-airtable.mdx
@@ -13,7 +13,7 @@ keywords:
## 移行を開始する
1. 移行するベースへのアクセス権を持つ[Airtableパーソナルアクセストークン](https://airtable.com/create/tokens)を作成します。
-2. 移行先のTeableベースを開き、AIチャットを起動します。
+2. 移行先のTeableプロジェクトを開き、AIチャットを起動します。
3. `/`と入力して**Connect Everything**を選択し、トークンを入力します。
4. Teable AIにAirtableベースの移行を依頼し、結果を確認します。
diff --git a/ja/basic/ai/connect-everything/migrate-baserow.mdx b/ja/basic/ai/connect-everything/migrate-baserow.mdx
index 8a572493..c34cf4f7 100644
--- a/ja/basic/ai/connect-everything/migrate-baserow.mdx
+++ b/ja/basic/ai/connect-everything/migrate-baserow.mdx
@@ -13,7 +13,7 @@ keywords:
## 移行を開始する
1. BaserowインスタンスのURLをコピーし、移行元テーブルへの読み取りアクセス権を持つ[Baserowデータベーストークン](https://baserow.io/user-docs/personal-api-tokens)を作成します。
-2. 移行先のTeableベースを開き、AIチャットを起動します。
+2. 移行先のTeableプロジェクトを開き、AIチャットを起動します。
3. `/`と入力して**Connect Everything**を選択し、インスタンスURLとデータベーストークンを入力します。
4. Teable AIにBaserowデータベースの移行を依頼し、結果を確認します。
diff --git a/ja/basic/ai/connect-everything/migrate-clickup.mdx b/ja/basic/ai/connect-everything/migrate-clickup.mdx
index 29af1154..1e5a2a04 100644
--- a/ja/basic/ai/connect-everything/migrate-clickup.mdx
+++ b/ja/basic/ai/connect-everything/migrate-clickup.mdx
@@ -16,7 +16,7 @@ keywords:
## 移行を開始する
1. ClickUpで**設定 → アプリ**を開き、パーソナルAPIトークンをコピーします。ClickUpの[認証ガイド](https://developer.clickup.com/docs/authentication)をご覧ください。
-2. 移行先のTeableベースを開き、AIチャットを起動します。
+2. 移行先のTeableプロジェクトを開き、AIチャットを起動します。
3. `/`と入力して**Connect Everything**を選択し、パーソナルAPIトークンを入力します。
4. Teable AIに、アクセス可能なClickUpワークスペースの移行と、チームに必要なプロジェクトビュー、ダッシュボード、オートメーションの構築を依頼します。
diff --git a/ja/basic/ai/connect-everything/migrate-jira.mdx b/ja/basic/ai/connect-everything/migrate-jira.mdx
index b0ca0b5e..4e3977e4 100644
--- a/ja/basic/ai/connect-everything/migrate-jira.mdx
+++ b/ja/basic/ai/connect-everything/migrate-jira.mdx
@@ -16,7 +16,7 @@ keywords:
## 移行を開始する
1. 移行するJiraプロジェクトへのアクセス権を持つアカウントで、[Atlassian APIトークン](https://id.atlassian.com/manage-profile/security/api-tokens)を作成します。Atlassianの[REST APIのBasic認証](https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/)をご覧ください。
-2. 移行先のTeableベースを開き、AIチャットを起動します。
+2. 移行先のTeableプロジェクトを開き、AIチャットを起動します。
3. `/`と入力して**Connect Everything**を選択し、Jira CloudサイトのURL、アカウントのメールアドレス、APIトークンを入力します。
4. Teable AIに、アクセス可能なJiraプロジェクトの移行と、チームに必要なプロジェクトビュー、ダッシュボード、オートメーションの構築を依頼します。
diff --git a/ja/basic/ai/connect-everything/migrate-monday.mdx b/ja/basic/ai/connect-everything/migrate-monday.mdx
index dd390869..cd1760b6 100644
--- a/ja/basic/ai/connect-everything/migrate-monday.mdx
+++ b/ja/basic/ai/connect-everything/migrate-monday.mdx
@@ -16,7 +16,7 @@ keywords:
## 移行を開始する
1. monday.comでプロフィールメニューを開き、**開発者**を選択して、パーソナルAPIトークンをコピーします。monday.comの[API認証ガイド](https://developer.monday.com/api-reference/docs/authentication)をご覧ください。
-2. 移行先のTeableベースを開き、AIチャットを起動します。
+2. 移行先のTeableプロジェクトを開き、AIチャットを起動します。
3. `/`と入力して**Connect Everything**を選択し、パーソナルAPIトークンを入力します。
4. Teable AIに、アクセス可能なmonday.comワークスペースの移行と、チームに必要なプロジェクトビュー、ダッシュボード、オートメーションの構築を依頼します。
diff --git a/ja/basic/ai/connect-everything/migrate-nocodb.mdx b/ja/basic/ai/connect-everything/migrate-nocodb.mdx
index 5d30aade..f321691e 100644
--- a/ja/basic/ai/connect-everything/migrate-nocodb.mdx
+++ b/ja/basic/ai/connect-everything/migrate-nocodb.mdx
@@ -13,7 +13,7 @@ keywords:
## 移行を開始する
1. NocoDBインスタンスのURLをコピーし、移行元ベースへのアクセス権を持つ[NocoDB APIトークン](https://nocodb.com/docs/product-docs/account-settings/api-tokens)を作成します。
-2. 移行先のTeableベースを開き、AIチャットを起動します。
+2. 移行先のTeableプロジェクトを開き、AIチャットを起動します。
3. `/`と入力して**Connect Everything**を選択し、インスタンスURLとAPIトークンを入力します。
4. Teable AIにNocoDBベースの移行を依頼し、結果を確認します。
diff --git a/ja/basic/ai/connect-everything/migrate-smartsheet.mdx b/ja/basic/ai/connect-everything/migrate-smartsheet.mdx
index 472dc9eb..831f8ee6 100644
--- a/ja/basic/ai/connect-everything/migrate-smartsheet.mdx
+++ b/ja/basic/ai/connect-everything/migrate-smartsheet.mdx
@@ -16,7 +16,7 @@ keywords:
## 移行を開始する
1. Smartsheetで**アカウント → 個人設定 → APIアクセス**を開き、アクセストークンを生成します。Smartsheetの[APIスタートガイド](https://developers.smartsheet.com/api/smartsheet/guides/getting-started)をご覧ください。
-2. 移行先のTeableベースを開き、AIチャットを起動します。
+2. 移行先のTeableプロジェクトを開き、AIチャットを起動します。
3. `/`と入力して**Connect Everything**を選択し、アクセストークンとアカウント環境(標準、Regions Europe、Gov)を入力します。
4. Teable AIに、アクセス可能なSmartsheetワークスペースの移行と、チームに必要なプロジェクトビュー、ダッシュボード、オートメーションの構築を依頼します。
diff --git a/ja/basic/ai/connect-everything/migrate-smartsuite.mdx b/ja/basic/ai/connect-everything/migrate-smartsuite.mdx
index 52f8d81e..fafe995b 100644
--- a/ja/basic/ai/connect-everything/migrate-smartsuite.mdx
+++ b/ja/basic/ai/connect-everything/migrate-smartsuite.mdx
@@ -13,7 +13,7 @@ keywords:
## 移行を開始する
1. [SmartSuite APIキーとワークスペースID](https://help.smartsuite.com/en/articles/6096587-retrieving-your-api-key-and-workspace-id)を取得します。
-2. 移行先のTeableベースを開き、AIチャットを起動します。
+2. 移行先のTeableプロジェクトを開き、AIチャットを起動します。
3. `/`と入力して**Connect Everything**を選択し、APIキーとワークスペースIDを入力します。
4. Teable AIにSmartSuiteソリューションの移行を依頼し、結果を確認します。
diff --git a/ja/basic/ai/overview.mdx b/ja/basic/ai/overview.mdx
index f14f372a..fb91e354 100644
--- a/ja/basic/ai/overview.mdx
+++ b/ja/basic/ai/overview.mdx
@@ -45,6 +45,6 @@ Teableはプラットフォーム全体に強力なAI機能を統合し、デー
1. **AIを有効にする**(セルフホストのみ)- Teable Cloudでは、組み込みAIをすぐに利用できます。セルフホスト版のユーザーは、最初に[AI設定](/ja/basic/admin-panel/ai-setting)を完了してください。独自のモデルを接続する場合は、続けて[カスタムAIモデル](/ja/basic/ai/custom-model)を設定します。
2. **AIチャットを使用する** - データについて質問したり、グラフを生成したりします
-3. **アプリを構築する** - 簡単なプロンプトでベースをWebアプリへ変換します
+3. **アプリを構築する** - 簡単なプロンプトでプロジェクトをWebアプリへ変換します
4. **AIフィールドを作成する** - AIフィールドを追加し、データを自動処理します
5. **オートメーションを構築する** - ワークフローでAI生成とスクリプト実行アクションを使用します
diff --git a/ja/basic/ai/teable-skill.mdx b/ja/basic/ai/teable-skill.mdx
index 8c4752ec..eebb41ea 100644
--- a/ja/basic/ai/teable-skill.mdx
+++ b/ja/basic/ai/teable-skill.mdx
@@ -24,7 +24,7 @@ Skillをインストールしたら、次のプロンプトを試してくださ
```text シンプルなスタータープロンプト wrap
-<ベース> {ベースのURLを貼り付け}にシンプルなCRMテーブルを作成してください。
+<プロジェクト> {プロジェクトのURLを貼り付け}にシンプルなCRMテーブルを作成してください。
```
```text ローカルファイル → Teable wrap
diff --git a/ja/basic/authority-matrix.mdx b/ja/basic/authority-matrix.mdx
index 5c5908b1..1e3092f0 100644
--- a/ja/basic/authority-matrix.mdx
+++ b/ja/basic/authority-matrix.mdx
@@ -1,12 +1,12 @@
---
title: "概要"
-description: "同じベース内のチームごとにアクセス範囲を設定し、メンバーが必要なデータだけを表示、編集、エクスポートできるようにします。"
+description: "同じプロジェクト内のチームごとにアクセス範囲を設定し、メンバーが必要なデータだけを表示、編集、エクスポートできるようにします。"
---
{/* mintlify-resync: 2026-05-28 */}
Businessプラン以上で利用できます
-営業、財務、運用、経営陣が同じベースを共有する場合、権限によって、ベースへ入れるユーザー、表示または編集できるデータ、データをインポートまたはエクスポートできるかどうかが決まります。権限マトリクスを使用すると、責任に応じてアクセスを分離しながら、データを1か所に維持できます。
+営業、財務、運用、経営陣が同じプロジェクトを共有する場合、権限によって、プロジェクトへ入れるユーザー、表示または編集できるデータ、データをインポートまたはエクスポートできるかどうかが決まります。権限マトリクスを使用すると、責任に応じてアクセスを分離しながら、データを1か所に維持できます。
カスタムロールをメンバーまたは部門に割り当て、それぞれのロールが必要とするテーブル、アプリ、ワークフローだけにアクセスできるようにします。テーブルでは、表示可能なビューとレコード、編集可能なフィールド、インポートまたはエクスポートの権限も制限できます。たとえば、営業は自分の顧客を管理し、財務は請求フィールドを表示し、経営陣はデータセット全体を表示できます。
@@ -17,7 +17,7 @@ description: "同じベース内のチームごとにアクセス範囲を設定
| 部門レベルのアクセス | 営業は顧客レコードを管理し、財務には請求フィールドだけを表示します。|
| 担当者に基づくレコード | 営業担当者は、自分に割り当てられたレコードだけを表示、更新できます。|
| 制限付きデータ入力 | メンバーは、既存レコードを編集または削除せずに、新しいレコードを作成できます。|
-| 共有ベース内の機密フィールド | メンバーは、支払いや原価のフィールドを表示せずに、注文レコードを閲覧できます。|
+| 共有プロジェクト内の機密フィールド | メンバーは、支払いや原価のフィールドを表示せずに、注文レコードを閲覧できます。|
| 制御されたアプリとワークフロー | ロールは選択されたアプリまたはワークフローを開けますが、権限のないノードは非表示になります。|
## 権限の仕組み
@@ -34,7 +34,7 @@ description: "同じベース内のチームごとにアクセス範囲を設定
className="docs-screenshot"
/>
-`ロールを追加`を使用してカスタムロールを作成します。ロール詳細ページでは、コラボレーターの割り当て、短い説明の記述、ベース内の各ノードに対するアクセスの設定を行います。
+`ロールを追加`を使用してカスタムロールを作成します。ロール詳細ページでは、コラボレーターの割り当て、短い説明の記述、プロジェクト内の各ノードに対するアクセスの設定を行います。
スペースとベースの基本的な権限レベルについては、[コラボレーション権限](/ja/basic/space/space-permission)をご覧ください。
+スペースとプロジェクトの基本的な権限レベルについては、[コラボレーション権限](/ja/basic/space/space-permission)をご覧ください。
diff --git a/ja/basic/authority-matrix/authority-matrix-practical-guide.mdx b/ja/basic/authority-matrix/authority-matrix-practical-guide.mdx
index 60a50a42..cbb2d4c8 100644
--- a/ja/basic/authority-matrix/authority-matrix-practical-guide.mdx
+++ b/ja/basic/authority-matrix/authority-matrix-practical-guide.mdx
@@ -4,7 +4,7 @@ description: "共有データ、所有者に基づくレコードアクセス、
---
{/* mintlify-resync: 2026-05-28 */}
-このガイドでは、`顧客`、`販売注文`、`商品`という3つのテーブルを持つ営業ベースを使用します。ベース全体を公開せずに、各ロールが必要なデータを操作できるようにすることが目標です。
+このガイドでは、`顧客`、`販売注文`、`商品`という3つのテーブルを持つ営業プロジェクトを使用します。プロジェクト全体を公開せずに、各ロールが必要なデータを操作できるようにすることが目標です。
| ロール | アクセスの目的 |
| --- | --- |
@@ -24,7 +24,7 @@ description: "共有データ、所有者に基づくレコードアクセス、
- ベースで権限マトリクスページを開き、メインスイッチをオンにします。有効にしたユーザーが管理者として追加されます。
+ プロジェクトで権限マトリクスページを開き、メインスイッチをオンにします。有効にしたユーザーが管理者として追加されます。
`ロールを追加`をクリックし、`営業部長`、`営業担当者`、`Data Entry
diff --git a/ja/basic/automation.mdx b/ja/basic/automation.mdx
index b9dd6c2d..d64b1fa6 100644
--- a/ja/basic/automation.mdx
+++ b/ja/basic/automation.mdx
@@ -65,8 +65,8 @@ AIがトリガー、アクション、フィールドのマッピングを含む
| 項目 | 上限 |
|---|---|
-| メール送信頻度 | 5 / 秒 / ベース |
-| Webhook受信頻度 | 50 / 秒 / ベース、2 / 秒 / ワークフロー |
+| メール送信頻度 | 5 / 秒 / プロジェクト |
+| Webhook受信頻度 | 50 / 秒 / プロジェクト、2 / 秒 / ワークフロー |
| Webhookペイロードサイズ | 4 MB |
| 実行割り当てと履歴保持期間 | プランによって異なります |
@@ -82,7 +82,7 @@ AIがトリガー、アクション、フィールドのマッピングを含む
Teable Cloudは、1日あたりの大幅な増加や短時間の急増など、通常とは異なる使用量に関する重大な通知も送信する場合があります。システムでは直近の日次および時間単位の実行傾向が使用され、正確なしきい値は変更されることがあります。
- 通知を開くと、**スペース設定** → **請求**へ移動します。利用可能な場合は、実行数が最も多かったワークフローとベースが表示されます。割り当てに関する通知はプランの上限として集計される実行に基づきます。通常とは異なる使用量のチェックでは、直近の**成功**、**失敗**、**保留中**状態の実行も考慮される場合があります。
+ 通知を開くと、**スペース設定** → **請求**へ移動します。利用可能な場合は、実行数が最も多かったワークフローとプロジェクトが表示されます。割り当てに関する通知はプランの上限として集計される実行に基づきます。通常とは異なる使用量のチェックでは、直近の**成功**、**失敗**、**保留中**状態の実行も考慮される場合があります。
使用量が想定どおりの場合は、オートメーションの追加割り当てを購入するか、プランの変更を検討してください。想定外の場合は、実行数が最も多いワークフローを確認し、関連するオートメーションを調整または一時停止します。
diff --git a/ja/basic/automation/actions/communication/send-email-overview.mdx b/ja/basic/automation/actions/communication/send-email-overview.mdx
index 1a1076e0..e888314e 100644
--- a/ja/basic/automation/actions/communication/send-email-overview.mdx
+++ b/ja/basic/automation/actions/communication/send-email-overview.mdx
@@ -37,7 +37,7 @@ description: "ワークフローからカスタマイズしたメールを送信
\* **宛先**または **BCC** の少なくとも一方が必要です。
-**レート制限:** ベースごとに1秒あたり5通。
+**レート制限:** プロジェクトごとに1秒あたり5通。
## 設定方法
diff --git a/ja/basic/automation/actions/records/create-record.mdx b/ja/basic/automation/actions/records/create-record.mdx
index cbbd593e..8ff3f611 100644
--- a/ja/basic/automation/actions/records/create-record.mdx
+++ b/ja/basic/automation/actions/records/create-record.mdx
@@ -30,7 +30,7 @@ description: "ワークフローの一部として任意のテーブルに新し
## 設定方法
1. ワークフローに**レコードを作成**アクションを追加します。
-2. レコードを作成する**テーブル**を選択します。デフォルトでは同じベース内のテーブルですが、[ベース間アクセス](/ja/basic/automation/actions/records/cross-base)を使用すると別のベースのテーブルを指定できます。
+2. レコードを作成する**テーブル**を選択します。デフォルトでは同じプロジェクト内のテーブルですが、[プロジェクト間アクセス](/ja/basic/automation/actions/records/cross-base)を使用すると別のプロジェクトのテーブルを指定できます。
3. フィールドマッピング領域に対象テーブルの全フィールドが表示されます。入力する各フィールドについて:
- **固定値:** フィールドへ値を直接入力します(例:ステータスフィールドに「新規」と入力)。
- **動的な値:** フィールド横の **+** ボタンをクリックし、前のステップの変数を挿入します。たとえば、トリガーの「名前」フィールドを挿入し、元のレコードから名前をコピーします。
@@ -68,12 +68,12 @@ description: "ワークフローの一部として任意のテーブルに新し
- [ループ(一括)](../logic/loop-run)と組み合わせるとレコードを一括作成できます。たとえば、あるテーブルから50件取得し、別のテーブルに対応する50件を作成します。
- マッピングしないフィールドにはテーブルのデフォルト値が使用され、デフォルトがなければ空のままになります。
- リンクされたレコードフィールドには表示値ではなくレコードIDが必要です。レコード名ではなくレコードIDを渡してください。
-- 対象テーブルが別のベースにある場合は、[ベース間アクセス](/ja/basic/automation/actions/records/cross-base)を使用します。
+- 対象テーブルが別のプロジェクトにある場合は、[プロジェクト間アクセス](/ja/basic/automation/actions/records/cross-base)を使用します。
## 関連ページ
- [レコードを更新](/ja/basic/automation/actions/records/update-record) — 新規作成ではなく既存レコードを変更します
- [レコードを取得](/ja/basic/automation/actions/records/get-records) — 新しいレコードの入力に使用するレコードを取得します
-- [ベース間アクセス](/ja/basic/automation/actions/records/cross-base) — 現在のベース以外のテーブルにレコードを作成します
+- [プロジェクト間アクセス](/ja/basic/automation/actions/records/cross-base) — 現在のプロジェクト以外のテーブルにレコードを作成します
- [ループ(一括)](../logic/loop-run) — 1つのアクションステップで複数のレコードを作成します
diff --git a/ja/basic/automation/actions/records/cross-base.mdx b/ja/basic/automation/actions/records/cross-base.mdx
index 9f26bdef..db496fb3 100644
--- a/ja/basic/automation/actions/records/cross-base.mdx
+++ b/ja/basic/automation/actions/records/cross-base.mdx
@@ -1,6 +1,6 @@
---
-title: "ベース間アクセス"
-description: "1つのワークフローで異なるベースのデータを読み書きします"
+title: "プロジェクト間アクセス"
+description: "1つのワークフローで異なるプロジェクトのデータを読み書きします"
---
{/* mintlify-resync: 2026-05-26 */}
@@ -10,74 +10,74 @@ description: "1つのワークフローで異なるベースのデータを読
アクションを手動で追加した場合、後からAIが認識または変更することはできません。
-デフォルトでは、オートメーションのアクションはワークフローと同じベース内のテーブルを操作します。ベース間アクセスを使用すると、別のベースを読み書きできます。部門、プロジェクト、データセットをまたぐワークフローに使用します。
+デフォルトでは、オートメーションのアクションはワークフローと同じプロジェクト内のテーブルを操作します。プロジェクト間アクセスを使用すると、別のプロジェクトを読み書きできます。部門、プロジェクト、データセットをまたぐワークフローに使用します。
-たとえば、営業ベースのオートメーションで別の運用ベースにフルフィルメントレコードを作成したり、レポート用ワークフローで複数のプロジェクトベースから1つの概要へデータを集約したりできます。
+たとえば、営業プロジェクトのオートメーションで別の運用プロジェクトにフルフィルメントレコードを作成したり、レポート用ワークフローで複数のプロジェクトから1つの概要へデータを集約したりできます。
## 対応するアクション
-| アクション | ベース間アクセス対応 |
+| アクション | プロジェクト間アクセス対応 |
|---|---|
| レコードを作成 | はい |
| レコードを更新 | はい |
| レコードを取得 | はい |
-これらはレコードを対象とする3つのアクションです。メールを送信、HTTPリクエストなどのアクションは特定のテーブルを対象にしないため、ベース間アクセスは必要ありません。
+これらはレコードを対象とする3つのアクションです。メールを送信、HTTPリクエストなどのアクションは特定のテーブルを対象にしないため、プロジェクト間アクセスは必要ありません。
## 設定方法
1. ワークフローで対応アクション(レコードを作成、レコードを更新、レコードを取得)を開きます。
-2. **テーブル**選択の横にある**ベース間アクセス**をクリックします。
-3. アカウントからアクセスできるすべてのスペースとベースを表示するパネルが開きます。対象の**スペース**、次に対象の**ベース**を選択します。
-4. そのベース内の**テーブル**を選択します。アクションが対応している場合は、特定の**ビュー**も選択できます。
-5. 通常どおりフィールドをマッピングしてアクションを設定します。フィールド一覧には、現在のベースではなく対象テーブルのフィールドが表示されます。
+2. **テーブル**選択の横にある**プロジェクト間アクセス**をクリックします。
+3. アカウントからアクセスできるすべてのスペースとプロジェクトを表示するパネルが開きます。対象の**スペース**、次に対象の**プロジェクト**を選択します。
+4. そのプロジェクト内の**テーブル**を選択します。アクションが対応している場合は、特定の**ビュー**も選択できます。
+5. 通常どおりフィールドをマッピングしてアクションを設定します。フィールド一覧には、現在のプロジェクトではなく対象テーブルのフィールドが表示されます。
6. アクションを保存します。
## 具体例:営業からフルフィルメントへ
-2つのベースがあるとします。
+2つのプロジェクトがあるとします。
-- **営業ベース** — 営業チームが成立した取引を追跡する「取引」テーブルがあります。
-- **運用ベース** — 運用チームが配送を管理する「フルフィルメント」テーブルがあります。
+- **営業プロジェクト** — 営業チームが成立した取引を追跡する「取引」テーブルがあります。
+- **運用プロジェクト** — 運用チームが配送を管理する「フルフィルメント」テーブルがあります。
取引の成立時に、フルフィルメントレコードを自動作成します。
-1. **トリガー:** 営業ベースで「レコードが条件に一致したとき」を使用し、`段階` が `受注` と等しいフィルターを設定します。
-2. **アクション:** ベース間アクセスで運用ベース > フルフィルメントテーブルを指定した「レコードを作成」。
+1. **トリガー:** 営業プロジェクトで「レコードが条件に一致したとき」を使用し、`段階` が `受注` と等しいフィルターを設定します。
+2. **アクション:** プロジェクト間アクセスで運用プロジェクト > フルフィルメントテーブルを指定した「レコードを作成」。
3. **フィールドマッピング:** 取引の顧客名、商品、数量、配送先住所をフルフィルメントテーブルの対応フィールドへマッピングします。
-これにより取引が成立するたびに、運用ベースにフルフィルメントレコードが自動作成され、手動で引き継ぐ必要がなくなります。
+これにより取引が成立するたびに、運用プロジェクトにフルフィルメントレコードが自動作成され、手動で引き継ぐ必要がなくなります。
## 権限モデル
-ワークフローの更新を作成、編集、適用するとき、Teableは各ベース間アクションについて現在の編集者が持つ権限を確認します。
+ワークフローの更新を作成、編集、適用するとき、Teableは各プロジェクト間アクションについて現在の編集者が持つ権限を確認します。
-| アクション | 対象ベースで必要な権限 |
+| アクション | 対象プロジェクトで必要な権限 |
|---|---|
| レコードを取得 | フィールドとレコードの読み取り |
| レコードを作成 | フィールドとレコードの読み取り、およびレコードの作成 |
| レコードを更新 | フィールドとレコードの読み取り、およびレコードの更新 |
-有効なワークフローの実行では、対象ベースに対してTeableのオートメーション実行IDを使用します。ベース間アクションで作成または更新されたレコードは、レコードのメタデータと監査画面で**オートメーションロボット**として表示されます。
+有効なワークフローの実行では、対象プロジェクトに対してTeableのオートメーション実行IDを使用します。プロジェクト間アクションで作成または更新されたレコードは、レコードのメタデータと監査画面で**オートメーションロボット**として表示されます。
### アクセス権が変わった場合
-現在の編集者が対象ベースに必要な権限を持たない場合、そのベースを指定するベース間アクションを追加または変更できません。下書きにアクセスできないベース間アクションがすでに含まれる場合、その下書きの適用もできません。すでに有効なバージョンは動作を続け、次に誰かがワークフローを編集または適用するときに権限が再確認されます。
+現在の編集者が対象プロジェクトに必要な権限を持たない場合、そのプロジェクトを指定するプロジェクト間アクションを追加または変更できません。下書きにアクセスできないプロジェクト間アクションがすでに含まれる場合、その下書きの適用もできません。すでに有効なバージョンは動作を続け、次に誰かがワークフローを編集または適用するときに権限が再確認されます。
ワークフローの編集または適用時に権限エラーを解決するには:
-1. 両方のベースへアクセスできる人にワークフローの編集と適用を依頼します。
-2. または、対象ベースに必要な権限を復元してから、ワークフローを再度適用します。
+1. 両方のプロジェクトへアクセスできる人にワークフローの編集と適用を依頼します。
+2. または、対象プロジェクトに必要な権限を復元してから、ワークフローを再度適用します。
## ヒント
-- ベース間アクセスでは、異なる**スペース**にあるベースにもアクセスできます。ワークフローを設定または適用する編集者には、対象ベースで必要な権限が必要です。
-- ベース間でフィールドをマッピングする際は、フィールドの種類に互換性が必要です。テキストフィールドを添付ファイルフィールドへマッピングすることはできません。
-- 対象ベースの構造を変更(テーブル名の変更、フィールドの削除など)すると、それらを参照するベース間アクションが動作しなくなります。構造変更後にワークフローを更新してください。
-- 複雑なベース間ワークフローでは、整理しやすいよう1つの「ハブ」ベースにオートメーションを集約することを検討します。
+- プロジェクト間アクセスでは、異なる**スペース**にあるプロジェクトにもアクセスできます。ワークフローを設定または適用する編集者には、対象プロジェクトで必要な権限が必要です。
+- プロジェクト間でフィールドをマッピングする際は、フィールドの種類に互換性が必要です。テキストフィールドを添付ファイルフィールドへマッピングすることはできません。
+- 対象プロジェクトの構造を変更(テーブル名の変更、フィールドの削除など)すると、それらを参照するプロジェクト間アクションが動作しなくなります。構造変更後にワークフローを更新してください。
+- 複雑なプロジェクト間ワークフローでは、整理しやすいよう1つの「ハブ」プロジェクトにオートメーションを集約することを検討します。
## 関連ページ
-- [レコードを作成](/ja/basic/automation/actions/records/create-record) — 現在または別のベースにレコードを作成します
-- [レコードを更新](/ja/basic/automation/actions/records/update-record) — 現在または別のベースのレコードを更新します
-- [レコードを取得](/ja/basic/automation/actions/records/get-records) — 現在または別のベースからレコードを取得します
+- [レコードを作成](/ja/basic/automation/actions/records/create-record) — 現在または別のプロジェクトにレコードを作成します
+- [レコードを更新](/ja/basic/automation/actions/records/update-record) — 現在または別のプロジェクトのレコードを更新します
+- [レコードを取得](/ja/basic/automation/actions/records/get-records) — 現在または別のプロジェクトからレコードを取得します
diff --git a/ja/basic/automation/actions/records/get-records.mdx b/ja/basic/automation/actions/records/get-records.mdx
index b7159016..e7b0f216 100644
--- a/ja/basic/automation/actions/records/get-records.mdx
+++ b/ja/basic/automation/actions/records/get-records.mdx
@@ -33,7 +33,7 @@ description: "任意のフィルターとページネーションを使用して
## 設定方法
1. ワークフローに**レコードを取得**アクションを追加します。
-2. クエリを実行する**テーブル**を選択します。テーブルが別のベースにある場合は、[クロスベースアクセス](/ja/basic/automation/actions/records/cross-base)を使用します。
+2. クエリを実行する**テーブル**を選択します。テーブルが別のプロジェクトにある場合は、[クロスプロジェクトアクセス](/ja/basic/automation/actions/records/cross-base)を使用します。
3. (任意)**ビュー**を選択し、そのビューのフィルター、並べ替え、フィールド表示設定を継承します。
4. (任意)**フィルター**条件を追加して結果を絞り込みます。たとえば、`ステータス`が`対応中`に等しく、`期限`が今日より前という条件を設定できます。
5. (任意)ページネーション用に**スキップ**と**取得件数**を設定します。たとえば、スキップを0、取得件数を100にすると、最初の100件のレコードを取得します。
@@ -80,11 +80,11 @@ description: "任意のフィルターとページネーションを使用して
- 「レコードを取得」はデータを変更しない読み取り専用のアクションです。
- クエリがレコードを1件も返さない場合、結果を参照する後続のステップには空の配列が渡されます。ワークフローがこの状況を適切に処理できるようにしてください(たとえば、結果がないときに「結果はこちらです」というメールを送信しないようにします)。
- 「レコードを取得」のフィルターはビューのフィルターと同じように機能し、AND/ORロジックで条件を組み合わせられます。
-- クロスベースアクセスを使用する場合、クエリはワークフロー作成者の権限で実行されます。作成者が対象ベースへのアクセス権を失うと、このステップは失敗します。
+- クロスプロジェクトアクセスを使用する場合、クエリはワークフロー作成者の権限で実行されます。作成者が対象プロジェクトへのアクセス権を失うと、このステップは失敗します。
## 関連項目
-- [クロスベースアクセス](/ja/basic/automation/actions/records/cross-base) — ほかのベースにあるテーブルへクエリを実行する
+- [クロスプロジェクトアクセス](/ja/basic/automation/actions/records/cross-base) — ほかのプロジェクトにあるテーブルへクエリを実行する
- [ループ(バッチ)](../logic/loop-run) — 結果の配列を反復処理する
- [レコードを作成](/ja/basic/automation/actions/records/create-record) — 取得したデータに基づいてレコードを作成する
- [レコードを更新](/ja/basic/automation/actions/records/update-record) — 「レコードを取得」で見つかったレコードを更新する
diff --git a/ja/basic/automation/actions/records/update-record.mdx b/ja/basic/automation/actions/records/update-record.mdx
index 40df8693..54e27e3e 100644
--- a/ja/basic/automation/actions/records/update-record.mdx
+++ b/ja/basic/automation/actions/records/update-record.mdx
@@ -93,11 +93,11 @@ description: "ワークフローの一部として既存レコードのフィー
- レコードの更新によって、同じテーブルを監視するほかの自動化がトリガーされる場合があります。連鎖的な影響に注意してください。
- カンマ区切りのIDで複数のレコードを更新すると、すべてのレコードに同じフィールド値が設定されます。レコードごとに異なる値を設定するには、代わりに[ループ](../logic/loop-run)ステップを使用します。
- フィールドをクリアする必要がある場合は、空の値をマッピングします。マッピングしないままにしても、フィールドはクリアされません。
-- 別のベースにあるテーブルのレコードを更新するには、[クロスベースアクセス](/ja/basic/automation/actions/records/cross-base)を使用します。
+- 別のプロジェクトにあるテーブルのレコードを更新するには、[クロスプロジェクトアクセス](/ja/basic/automation/actions/records/cross-base)を使用します。
## 関連項目
- [レコードを作成](/ja/basic/automation/actions/records/create-record) — 既存レコードを変更する代わりに新しいレコードを追加する
- [レコードを取得](/ja/basic/automation/actions/records/get-records) — 更新前にレコードを取得してIDを確認する
-- [クロスベースアクセス](/ja/basic/automation/actions/records/cross-base) — 現在のベース以外のテーブルにあるレコードを更新する
+- [クロスプロジェクトアクセス](/ja/basic/automation/actions/records/cross-base) — 現在のプロジェクト以外のテーブルにあるレコードを更新する
- [ループ(バッチ)](../logic/loop-run) — 複数のレコードを異なる値で更新する
diff --git a/ja/basic/automation/ai/scripting/runscript.mdx b/ja/basic/automation/ai/scripting/runscript.mdx
index 43433b76..670a8310 100644
--- a/ja/basic/automation/ai/scripting/runscript.mdx
+++ b/ja/basic/automation/ai/scripting/runscript.mdx
@@ -210,7 +210,7 @@ output.set("records", data);
### スクリプトからAIを呼び出す
-`POST /api/automation/runtime/ai` は、ベースのAIモデルへプロンプトを送信します。ベースはオートメーションのコンテキストから取得されるため、ベースIDは不要です。本文には `prompt` のほか、任意の `attachments`、`modelKey`、`temperature`、`outputType` を指定でき、レスポンスは `{ "message": ... }` です。
+`POST /api/automation/runtime/ai` は、プロジェクトのAIモデルへプロンプトを送信します。プロジェクトはオートメーションのコンテキストから取得されるため、プロジェクトIDは不要です。本文には `prompt` のほか、任意の `attachments`、`modelKey`、`temperature`、`outputType` を指定でき、レスポンスは `{ "message": ... }` です。
添付ファイルは `{ url, mimetype, name }` の項目で、1回の呼び出しにつき最大10件、各20MB未満、ダウンロード時間30秒以内で、画像、PDF、Office文書に対応します。デフォルトのチャットモデルでは画像などの添付ファイルを読み取れない場合があるため、ファイルを送る際は `modelKey` を指定してください。呼び出しごとにクレジットを消費します。
diff --git a/ja/basic/automation/examples/api-automation.mdx b/ja/basic/automation/examples/api-automation.mdx
index 51d87abf..3b02d82f 100644
--- a/ja/basic/automation/examples/api-automation.mdx
+++ b/ja/basic/automation/examples/api-automation.mdx
@@ -17,7 +17,7 @@ AIがワークフロー全体を自動作成します。生成されたスクリ
## 前提条件
- 個人アクセストークン(PAT)。[アクセストークン](/ja/api-doc/token)を参照してください。
-- ベースID、テーブルID、フィールドID。[IDを取得する](/ja/api-doc/get-id)を参照してください。
+- プロジェクトID、テーブルID、フィールドID。[IDを取得する](/ja/api-doc/get-id)を参照してください。
## ヘルパー関数
@@ -74,7 +74,7 @@ await api("PUT", `/base/${baseId}/workflow/${wf.id}/active`, {
## 推奨事項
-- 必要最小限の権限を持つ PAT を使用し、必要なスペース/ベースだけに制限します。
+- 必要最小限の権限を持つ PAT を使用し、必要なスペース/プロジェクトだけに制限します。
- トークンは環境変数に保存し、コードへ直接記述しないでください。
- 有効化する前に**ノードをテスト**で確認します。
- 詳細は[オートメーションAPIリファレンス](/ja/api-reference/automation/put-base-workflow-action)を参照してください。
diff --git a/ja/basic/automation/examples/cross-base-sync.mdx b/ja/basic/automation/examples/cross-base-sync.mdx
index 0b65fd7f..41221d33 100644
--- a/ja/basic/automation/examples/cross-base-sync.mdx
+++ b/ja/basic/automation/examples/cross-base-sync.mdx
@@ -1,6 +1,6 @@
---
-title: "複数のベース間でレコードを同期する"
-description: "ベース間アクセスを使用し、新規または更新されたレコードを別のベースへ自動複製します"
+title: "複数のプロジェクト間でレコードを同期する"
+description: "プロジェクト間アクセスを使用し、新規または更新されたレコードを別のプロジェクトへ自動複製します"
---
オートメーションの例は、AIチャットで直接構築することを推奨します。目的のワークフローを説明するだけで、トリガー、アクション、スクリプト、設定を含むすべての構築をAIが行います。
@@ -9,18 +9,18 @@ description: "ベース間アクセスを使用し、新規または更新され
テーブル右側のサイドバーでAIチャットを開き、実行したい内容を伝えます。たとえば、次のように入力します。
-*「営業ベースで新しい注文が作成されたら、注文ID、顧客名、金額を含み、ステータスを処理待ちに設定したレコードをフルフィルメントベースに作成してください」*
+*「営業プロジェクトで新しい注文が作成されたら、注文ID、顧客名、金額を含み、ステータスを処理待ちに設定したレコードをフルフィルメントプロジェクトに作成してください」*
AIがワークフロー全体を自動作成します。生成されたスクリプトを確認し、実際のデータでテストして、準備ができたらワークフローを有効にします。
## 手動設定
-1. **営業**ベースで、**レコードが作成されたとき**をトリガーとする**ワークフローを作成**します。
+1. **営業**プロジェクトで、**レコードが作成されたとき**をトリガーとする**ワークフローを作成**します。
2. **注文**テーブルを選択します。
3. **テスト**をクリックします。
4. **アクションを追加** → **レコードを作成**を選択します。
-5. テーブル選択の横にある**ベース間アクセス**をクリックします。
-6. **フルフィルメント**ベースを開き、**注文**テーブルを選択します。
+5. テーブル選択の横にある**プロジェクト間アクセス**をクリックします。
+6. **フルフィルメント**プロジェクトを開き、**注文**テーブルを選択します。
7. フィールドをマッピングします。
- 注文ID → トリガーの注文ID(**+** から選択)
- 顧客 → トリガーの顧客
@@ -31,6 +31,6 @@ AIがワークフロー全体を自動作成します。生成されたスクリ
## 双方向同期
更新を双方向で同期するには:
-1. **フルフィルメント**ベースに2つ目のワークフローを作成します。
-2. **レコードが更新されたとき** → **レコードを更新**を使用し、ベース間アクセスで営業ベースを指定します。
+1. **フルフィルメント**プロジェクトに2つ目のワークフローを作成します。
+2. **レコードが更新されたとき** → **レコードを更新**を使用し、プロジェクト間アクセスで営業プロジェクトを指定します。
3. 無限ループを避けるためフィルターを使用します。たとえば、特定のフィールドが変わったときだけ実行し、更新前に値が実際に異なることを確認します。
diff --git a/ja/basic/automation/trigger/external/webhook-received.mdx b/ja/basic/automation/trigger/external/webhook-received.mdx
index b837ce06..fe2173cf 100644
--- a/ja/basic/automation/trigger/external/webhook-received.mdx
+++ b/ja/basic/automation/trigger/external/webhook-received.mdx
@@ -78,7 +78,7 @@ Teable は JSON を自動的に解析し、最上位の各キーから名前付
## Webhookをテストする
-最も簡単なテスト方法は、コマンドラインから `curl` を使用することです。URLを手入力せず、トリガーパネルから実際のURLをコピーしてください。URLにはベースIDとワークフローIDが含まれています。
+最も簡単なテスト方法は、コマンドラインから `curl` を使用することです。URLを手入力せず、トリガーパネルから実際のURLをコピーしてください。URLにはプロジェクトIDとワークフローIDが含まれています。
**認証なし:**
@@ -120,7 +120,7 @@ curl -X POST https://your-teable-instance.com/api/webhook/base/bseXXXXXXXXXXXX/w
| 範囲 | 上限 |
|---|---|
-| ベースごと | 1秒あたり50リクエスト |
+| プロジェクトごと | 1秒あたり50リクエスト |
| ワークフローごと | 1秒あたり2リクエスト |
レート制限を超えたリクエストには HTTP 429 レスポンスが返されます。外部システムがリクエストを集中して送信する場合は、指数バックオフを使用した再試行処理を実装してください。
diff --git a/ja/basic/base.mdx b/ja/basic/base.mdx
index 3e82a9fb..eac5375a 100644
--- a/ja/basic/base.mdx
+++ b/ja/basic/base.mdx
@@ -1,42 +1,44 @@
---
title: "概要"
-description: "ベースを作成、管理、インポート、エクスポートします。.teaファイルを使用して、Teable Cloudのスペース間でデータを移動したり、Cloudとセルフホストのインスタンス間で移行したりできます。"
+description: "プロジェクトを作成、管理、インポート、エクスポートします。.teaファイルを使用して、Teable Cloudのスペース間でデータを移動したり、Cloudとセルフホストのインスタンス間で移行したりできます。"
---
{/* mintlify-resync: 2026-05-26 */}
-ベースは、特定のプロジェクトに関するすべての情報を保存、処理するためのツールです。各スペースには複数のベースを作成でき、各ベースは独立して動作し、特定のプロジェクトやテーブル群に明確な情報構造を提供します。
+プロジェクトは、関連するテーブル、アプリ、自動化をまとめる単位です。各スペースには複数のプロジェクトを作成でき、プロジェクトごとにリソースと共同作業の権限を管理できます。
-ベースに馴染みがない場合は、Excelのワークブックに似たものと考えてください。各ワークブックには複数のシートを含められます。
+画面の「プロジェクト」は、API と CLI の `base` リソースに対応します。`baseId` などの API フィールド、ID の接頭辞 `bse`、`/base/...` の URL は変わりません。
-## ベースを作成、管理する
+プロジェクトに馴染みがない場合は、Excelのワークブックに似たものと考えてください。各ワークブックには複数のシートを含められます。
-### ベースを追加する
+## プロジェクトを作成、管理する {#ベースを作成管理する}
+
+### プロジェクトを追加する {#ベースを追加する}
1. スペースを開きます
-2. 右上の「ベースを作成」をクリックします
+2. 右上の「プロジェクトを作成」をクリックします
-### ベース名を変更、ベースを削除する
+### プロジェクト名を変更、プロジェクトを削除する {#ベース名を変更ベースを削除する}
1. スペースを開きます
-2. ベースにカーソルを合わせます
+2. プロジェクトにカーソルを合わせます
3. 「···」ボタンをクリックしてメニューを開きます
4. 「名前を変更」または「削除」をクリックします
-### ベース内のリソースを整理する
+### プロジェクト内のリソースを整理する {#ベース内のリソースを整理する}
-ベースを開くと、左側のサイドバーに現在のベース内のテーブル、アプリ、オートメーションなどのリソースが表示されます。フォルダーを使用してリソースを整理すると、大規模なベースを閲覧しやすくできます。
+プロジェクトを開くと、左側のサイドバーに現在のプロジェクト内のテーブル、アプリ、オートメーションなどのリソースが表示されます。フォルダーを使用してリソースを整理すると、大規模なプロジェクトを閲覧しやすくできます。
一般的な操作は次のとおりです。
@@ -46,40 +48,40 @@ description: "ベースを作成、管理、インポート、エクスポート
- **説明を追加**:テーブル、アプリ、オートメーションでは、ヘッダーのリソース名の下にある**説明を追加**をクリックします。目的、所有者、引き継ぎ事項、使用規則の記録に説明を使用します。Teableは、リソースを初めて開いたときと、説明の変更後にもう一度、説明を表示します。
- **ノード情報を確認**:リソースの`...`メニューを開き、**ノード情報**を選択すると、フォルダー、テーブル、オートメーション、アプリのIDに加え、作成情報と更新情報を確認できます。
-### ベースを別のスペースへ複製する {#duplicate-a-base-to-another-space}
+### プロジェクトを別のスペースへ複製する {#duplicate-a-base-to-another-space}
-手順1: スペース内で複製するベースを選択します。
+手順1: スペース内で複製するプロジェクトを選択します。
-手順2: メニューアイコンをクリックし、「ベースをコピー」オプションを選択します。
+手順2: メニューアイコンをクリックし、「プロジェクトをコピー」オプションを選択します。
手順3: ポップアップで移行先のスペースを選択します。そのスペースの作成者権限が必要です。
-大規模なベースでは、ベース構造、レコード、添付ファイルのコピー中、複製ダイアログに進捗が表示されます。コピーが完了するまでダイアログを開いたままにしてください。変更履歴とコラボレーターはコピーされません。
+大規模なプロジェクトでは、プロジェクト構造、レコード、添付ファイルのコピー中、複製ダイアログに進捗が表示されます。コピーが完了するまでダイアログを開いたままにしてください。変更履歴とコラボレーターはコピーされません。
-ベースに、別のスペースを参照するリンク、ルックアップ、ロールアップ、条件付きルックアップ、条件付きロールアップのフィールドが含まれる場合、複製前に影響を受けるフィールドがTeableに表示されます。続行すると、複製したベースではこれらのフィールドが**一行テキスト**へ変換されます。
+プロジェクトに、別のスペースを参照するリンク、ルックアップ、ロールアップ、条件付きルックアップ、条件付きロールアップのフィールドが含まれる場合、複製前に影響を受けるフィールドがTeableに表示されます。続行すると、複製したプロジェクトではこれらのフィールドが**一行テキスト**へ変換されます。
-### スペース間でベースを移動する
+### スペース間でプロジェクトを移動する {#スペース間でベースを移動する}
-必要なスペース権限を持っている場合は、ベースを別のスペースへ移動できます。移動によってリレーションベースのフィールドがスペースをまたいで参照することになる場合、Teableから警告が表示され、影響を受けるフィールドが一覧表示されます。確定すると、移動の一環としてこれらのフィールドが**一行テキスト**へ変換されます。
+必要なスペース権限を持っている場合は、プロジェクトを別のスペースへ移動できます。移動によってリレーションベースのフィールドがスペースをまたいで参照することになる場合、Teableから警告が表示され、影響を受けるフィールドが一覧表示されます。確定すると、移動の一環としてこれらのフィールドが**一行テキスト**へ変換されます。
-## ベースをインポート、エクスポートする
+## プロジェクトをインポート、エクスポートする {#ベースをインポートエクスポートする}
AIチャットを使用して、Airtable、Baserow、NocoDB、SmartSuite、その他のシステムをTeableへ移行します。
-### ベースをインポートする(データ移行)
+### プロジェクトをインポートする(データ移行) {#ベースをインポートするデータ移行}
-`.tea`ファイル形式では、すべてのテーブル、フィールド、データ、設定を含む完全なベースをインポートできます。次の用途に便利です。
-- **データ移行**:異なるTeableインスタンス間でベースを移動します(例:Cloudからセルフホストへ)
-- **バックアップの復元**:以前にエクスポートしたベースを復元します
-- **テンプレートの共有**:完全なベース構造を他のチームと共有します
+`.tea`ファイル形式では、すべてのテーブル、フィールド、データ、設定を含む完全なプロジェクトをインポートできます。次の用途に便利です。
+- **データ移行**:異なるTeableインスタンス間でプロジェクトを移動します(例:Cloudからセルフホストへ)
+- **バックアップの復元**:以前にエクスポートしたプロジェクトを復元します
+- **テンプレートの共有**:完全なプロジェクト構造を他のチームと共有します
**手順:**
1. スペースを開きます
@@ -89,19 +91,19 @@ description: "ベースを作成、管理、インポート、エクスポート
-Airtableからベースを作成する場合は、同じインポートダイアログで**Airtableからインポート**を選択します。
+Airtableからプロジェクトを作成する場合は、同じインポートダイアログで**Airtableからインポート**を選択します。
-### ベースをエクスポートする(バックアップと移行) {#export-base-backup-&-migration}
+### プロジェクトをエクスポートする(バックアップと移行) {#export-base-backup-&-migration}
-バックアップまたは移行のため、ベースを`.tea`ファイルへエクスポートします。エクスポートしたファイルには、すべてのテーブル、フィールド、データ、ビュー、設定が含まれます。
+バックアップまたは移行のため、プロジェクトを`.tea`ファイルへエクスポートします。エクスポートしたファイルには、すべてのテーブル、フィールド、データ、ビュー、設定が含まれます。
**手順:**
1. スペースを開きます
-2. エクスポートするベースにカーソルを合わせます
+2. エクスポートするプロジェクトにカーソルを合わせます
3. 「···」ボタンをクリックしてメニューを開きます
4. 「エクスポート」をクリックします
5. レコードデータをエクスポートするには、**レコードを含める**をオンのままにします。構造と設定だけをエクスポートするにはオフにします。
@@ -110,28 +112,28 @@ description: "ベースを作成、管理、インポート、エクスポート
-- Teableインスタンス間でデータを移行するには、移行元インスタンスからベースをエクスポートし、移行先インスタンスへ`.tea`ファイルをインポートします。すべてのデータと設定が保持されます。
-- エクスポートしたファイルでは、Teableがベースをまたぐリレーションフィールドを**一行テキスト**フィールドへ変換します。
-- スペースをまたいでベースを複製または移動すると、スペースをまたぐリレーションフィールドは**一行テキスト**へ変換されます。
+- Teableインスタンス間でデータを移行するには、移行元インスタンスからプロジェクトをエクスポートし、移行先インスタンスへ`.tea`ファイルをインポートします。すべてのデータと設定が保持されます。
+- エクスポートしたファイルでは、Teableがプロジェクトをまたぐリレーションフィールドを**一行テキスト**フィールドへ変換します。
+- スペースをまたいでプロジェクトを複製または移動すると、スペースをまたぐリレーションフィールドは**一行テキスト**へ変換されます。
-## ベースを共有する
+## プロジェクトを共有する {#ベースを共有する}
-ベースは公開リンクで共有できます。共有範囲は、ベース全体または現在選択している項目に設定できます。
+プロジェクトは公開リンクで共有できます。共有範囲は、プロジェクト全体または現在選択している項目に設定できます。
-1. 対象のベースを開きます
-2. ベースまたは選択項目の共有メニューを開きます
+1. 対象のプロジェクトを開きます
+2. プロジェクトまたは選択項目の共有メニューを開きます
3. **Webへ共有**をオンにします
4. 共有リンクまたはQRコードをコピーします
@@ -139,29 +141,29 @@ description: "ベースを作成、管理、インポート、エクスポート
| 範囲 | 説明 |
|------|------|
-| **ベース全体を共有** | 現在のベース内のすべての項目を共有します。後から追加した新しいテーブルとフォルダーも自動的に含まれます。|
+| **プロジェクト全体を共有** | 現在のプロジェクト内のすべての項目を共有します。後から追加した新しいテーブルとフォルダーも自動的に含まれます。|
| **選択した項目を共有** | 現在選択している項目を共有します。フォルダーを共有すると、その子項目も含まれます。|
共有設定では、リンク権限、**閲覧者によるデータのコピーを許可**、パスワードアクセス、リンクの再生成、共有リンクの削除、埋め込み設定のコピーを構成できます。
共有範囲にアプリが含まれる場合、公開リンクからアクセスするには、そのアプリを公開する必要があります。
-## ベース内の機能
+## プロジェクト内の機能 {#ベース内の機能}
-ベースには、仕事や業務に関連する情報を記録、整理するための複数のテーブルを含められます。
+プロジェクトには、仕事や業務に関連する情報を記録、整理するための複数のテーブルを含められます。
-たとえば、顧客管理ベースでは、「顧客企業」、「顧客連絡先」、「顧客フォローアップレコード」を別々のテーブルにし、会議室管理ベースでは、「会議室管理」、「会議室設備」、「会議室予約」を別々のテーブルにできます。
+たとえば、顧客管理プロジェクトでは、「顧客企業」、「顧客連絡先」、「顧客フォローアップレコード」を別々のテーブルにし、会議室管理プロジェクトでは、「会議室管理」、「会議室設備」、「会議室予約」を別々のテーブルにできます。
-そのため、ベース内のほとんどの機能はテーブルに関連しています。
+そのため、プロジェクト内のほとんどの機能はテーブルに関連しています。
* **テーブルを作成**:プロジェクト固有の要件に基づいて新しいテーブルを作成し、テーブル構造、フィールド、データ型を定義できます。
-* **テーブルを編集**:ベース内の既存のテーブルを編集し、レコードの追加、削除、変更を行えます。
+* **テーブルを編集**:プロジェクト内の既存のテーブルを編集し、レコードの追加、削除、変更を行えます。
* **データをエクスポート、インポート**:データのCSVへのエクスポートと、CSVおよびXLSX形式のデータのインポートに対応しています。
テーブルの詳細については、[テーブルのセクション](/ja/basic/table)をご覧ください。
diff --git a/ja/basic/credential.mdx b/ja/basic/credential.mdx
index 727585c8..620ccb48 100644
--- a/ja/basic/credential.mdx
+++ b/ja/basic/credential.mdx
@@ -39,7 +39,7 @@ description: 自分の接続とシークレットを管理し、必要なアプ
付与には**変数名**が必要です。これはそのアプリやオートメーション内での認証情報のエイリアスで、命名規則はシークレットのKeyと同じです。コードが読み取るのもこの名前です。
-パネルには**未バインド**のプレースホルダーが並ぶこともあります。アプリのコピー、ワークフローの複製、ベースのインポートや複製では、コードが必要とするエイリアスだけが引き継がれ、認証情報は引き継がれません。**自分のをバインド**で自分の認証情報を割り当てると、アプリやオートメーションが動くようになります。
+パネルには**未バインド**のプレースホルダーが並ぶこともあります。アプリのコピー、ワークフローの複製、プロジェクトのインポートや複製では、コードが必要とするエイリアスだけが引き継がれ、認証情報は引き継がれません。**自分のをバインド**で自分の認証情報を割り当てると、アプリやオートメーションが動くようになります。
エイリアスに他の人の認証情報がバインドされている場合は、**自分のに置き換え**で引き継げます。**付与のみ解除(プレースホルダーを残す)**を選ぶとバインドだけが外れ、プレースホルダーは残るため、コードの変更は不要です。
diff --git a/ja/basic/field/auto-number.mdx b/ja/basic/field/auto-number.mdx
index 9e52e9b7..9495621b 100644
--- a/ja/basic/field/auto-number.mdx
+++ b/ja/basic/field/auto-number.mdx
@@ -11,7 +11,7 @@ description: "レコード作成時に増加する番号を生成します。チ
| --- | --- |
| チケット番号 | 問題、フィードバック、サポート依頼の短いIDを生成 |
| 注文・契約の連番 | 注文、契約、申請用の内部連番を作成 |
-| メンバー・候補者ID | メンバー、候補者、従業員にベース内のIDを割り当て |
+| メンバー・候補者ID | メンバー、候補者、従業員にプロジェクト内のIDを割り当て |
| 会話での参照 | メッセージやコメントで`#45`のような番号を使ってレコードを参照 |
## 作成と設定
diff --git a/ja/basic/security.mdx b/ja/basic/security.mdx
index 7ca7ab3c..1a0b44e0 100644
--- a/ja/basic/security.mdx
+++ b/ja/basic/security.mdx
@@ -66,7 +66,7 @@ Teable Cloudは、米国西部(オレゴン)リージョンの**Amazon Web S
## アクセス制御
-### ロールベースの権限
+### ロールベースの権限 {#ロールベースの権限}
Teableは、次の5段階の権限レベルで、きめ細かなロールベースのアクセス制御を提供します。
@@ -112,13 +112,13 @@ Teableには、データをバックアップする複数の方法がありま
| 方法 | 説明 | 用途 |
|--------|-------------|----------|
-| **[ベースのエクスポート](/ja/basic/base#export-base-backup-&-migration)** | ベース全体を`.tea`ファイル(構造、データ、オートメーション)としてダウンロードします | 完全バックアップ、移行 |
-| **[ベースの複製](/ja/basic/base#duplicate-a-base-to-another-space)** | Teable内でベースのコピーを作成します | 簡易スナップショット |
+| **[プロジェクトのエクスポート](/ja/basic/base#export-base-backup-&-migration)** | プロジェクト全体を`.tea`ファイル(構造、データ、オートメーション)としてダウンロードします | 完全バックアップ、移行 |
+| **[プロジェクトの複製](/ja/basic/base#duplicate-a-base-to-another-space)** | Teable内でプロジェクトのコピーを作成します | 簡易スナップショット |
| **[CSVエクスポート](/ja/basic/table/export)** | 個別のテーブルデータをエクスポートします | データポータビリティ |
| **[APIエクスポート](/ja/api-doc/record/get)** | REST API経由でプログラムからレコードをエクスポートします | 自動バックアップ |
-ベース全体を`.tea`ファイルへエクスポートする、個別のテーブルをCSVファイルへエクスポートする、Teable API経由でデータを取得することで、ベースを手動でバックアップできます。
+プロジェクト全体を`.tea`ファイルへエクスポートする、個別のテーブルをCSVファイルへエクスポートする、Teable API経由でデータを取得することで、プロジェクトを手動でバックアップできます。
## シングルサインオン(SSO)
diff --git a/ja/basic/space.mdx b/ja/basic/space.mdx
index 0289aa6d..db1225a5 100644
--- a/ja/basic/space.mdx
+++ b/ja/basic/space.mdx
@@ -64,15 +64,15 @@ Teableへログインした後、スペース切り替えメニューからス
## 自分と共有
-他のユーザーが自分をコラボレーターとしてベースを共有すると、そのベースがスペースのサイドバーにある**自分と共有**の下へ表示されます。
+他のユーザーが自分をコラボレーターとしてプロジェクトを共有すると、そのプロジェクトがスペースのサイドバーにある**自分と共有**の下へ表示されます。
-自分と共有されたベースは、自分のスペース内にあるベースとは異なります。
+自分と共有されたプロジェクトは、自分のスペース内にあるプロジェクトとは異なります。
- アクセスは共有者によって制御されます。
-- 利用できる操作は、付与されたベース権限によって異なります。
-- 共有者がアクセス権を削除すると、ベースは表示されなくなります。
+- 利用できる操作は、付与されたプロジェクト権限によって異なります。
+- 共有者がアクセス権を削除すると、プロジェクトは表示されなくなります。
-ベースの公開共有については、[ベース](/ja/basic/base)をご覧ください。
+プロジェクトの公開共有については、[プロジェクト](/ja/basic/base)をご覧ください。
## スペース設定
@@ -95,7 +95,7 @@ AI設定ページでは、スペース所有者が現在のスペースのAI機
**IMでチャット**
-**IMでチャット**ページでは、スペース管理者がボットを作成し、そのモデル、アクセス可能なベース、Skill、ファイル、IM連携を設定できます。
+**IMでチャット**ページでは、スペース管理者がボットを作成し、そのモデル、アクセス可能なプロジェクト、Skill、ファイル、IM連携を設定できます。
**プラン**
diff --git a/ja/basic/space/base-invite.mdx b/ja/basic/space/base-invite.mdx
index e2f7a063..ed754e1e 100644
--- a/ja/basic/space/base-invite.mdx
+++ b/ja/basic/space/base-invite.mdx
@@ -1,39 +1,39 @@
---
-title: "ベースへの招待"
-description: "ベースレベルで権限を管理します。スペース全体へのアクセス権を付与せず、特定のベースへメンバーを招待し、よりきめ細かく安全にデータを共同利用できます。"
+title: "プロジェクトへの招待"
+description: "プロジェクトレベルで権限を管理します。スペース全体へのアクセス権を付与せず、特定のプロジェクトへメンバーを招待し、よりきめ細かく安全にデータを共同利用できます。"
---
-## ベースのコラボレーターとは
+## プロジェクトのコラボレーターとは {#ベースのコラボレーターとは}
-ベースのコラボレーターは、特定のベースだけに招待されたメンバーです。スペースのコラボレーターとは異なり、招待されたベースだけにアクセスでき、スペース内の他のベースは表示できません。
+プロジェクトのコラボレーターは、特定のプロジェクトだけに招待されたメンバーです。スペースのコラボレーターとは異なり、招待されたプロジェクトだけにアクセスでき、スペース内の他のプロジェクトは表示できません。
-## ベースのコラボレーターを追加する
+## プロジェクトのコラボレーターを追加する {#ベースのコラボレーターを追加する}
-任意のベースを開き、右上の`招待`ボタンをクリックします。次の2つの方法を利用できます。
+任意のプロジェクトを開き、右上の`招待`ボタンをクリックします。次の2つの方法を利用できます。
-- **メールで招待**:受信者のメールアドレスを入力し、ベースの権限レベル(例:「作成者」)を設定して、**招待を送信**をクリックします。
+- **メールで招待**:受信者のメールアドレスを入力し、プロジェクトの権限レベル(例:「作成者」)を設定して、**招待を送信**をクリックします。
- **リンクで招待**:「リンクで招待」タブへ切り替え、専用の招待リンクを生成します。リンクをコピーして共有すると、受信者がクリックして参加できます。
-メールで招待を送信した後、パネルに表示されるベースへの直接リンクをコピーして、別途送信できます。招待されたユーザーには、ベースを開くアプリ内通知も届きます。
+メールで招待を送信した後、パネルに表示されるプロジェクトへの直接リンクをコピーして、別途送信できます。招待されたユーザーには、プロジェクトを開くアプリ内通知も届きます。
-招待パネルでは、現在ベースへのアクセス権を持つすべてのユーザーを確認できます。
+招待パネルでは、現在プロジェクトへのアクセス権を持つすべてのユーザーを確認できます。
-- **ベースのコラボレーター**:このベースだけに直接招待されたメンバー。
-- **スペースのコラボレーター**:名前の横に「スペース」バッジが表示されます。このメンバーはスペースレベルの権限を持ち、このベースへのアクセス権を自動的に継承します。
+- **プロジェクトのコラボレーター**:このプロジェクトだけに直接招待されたメンバー。
+- **スペースのコラボレーター**:名前の横に「スペース」バッジが表示されます。このメンバーはスペースレベルの権限を持ち、このプロジェクトへのアクセス権を自動的に継承します。
-ベースには、さまざまな共同作業レベルに対応する4つの権限ロールがあります。権限の詳しい比較については、[権限の詳細](/ja/basic/space/space-permission)をご覧ください。
+プロジェクトには、さまざまな共同作業レベルに対応する4つの権限ロールがあります。権限の詳しい比較については、[権限の詳細](/ja/basic/space/space-permission)をご覧ください。
テーブル、フィールド、レコードレベルでよりきめ細かく制御するには、[権限マトリクス](/ja/basic/authority-matrix)機能を使用します。
@@ -46,11 +46,11 @@ description: "ベースレベルで権限を管理します。スペース全体
## 使用例
-ベースへの招待は、外部コラボレーター向けに設計されています。たとえば、素材ライブラリの整理を依頼したフリーランスデザイナーを、そのベースだけに**編集者**権限で招待し、スペース内の他のベースを表示させないようにできます。
+プロジェクトへの招待は、外部コラボレーター向けに設計されています。たとえば、素材ライブラリの整理を依頼したフリーランスデザイナーを、そのプロジェクトだけに**編集者**権限で招待し、スペース内の他のプロジェクトを表示させないようにできます。
## 注意事項
-- **権限の継承**:スペースの管理者は、そのスペース内のすべてのベースへ完全にアクセスでき、ベースレベルで権限を引き下げることはできません。
-- **リンクのセキュリティ**:招待リンクを入手した人は誰でも、ベースへの参加を試みることができます。リンクが漏えいした場合は、招待パネルでその横のXをクリックして無効にできます。
+- **権限の継承**:スペースの管理者は、そのスペース内のすべてのプロジェクトへ完全にアクセスでき、プロジェクトレベルで権限を引き下げることはできません。
+- **リンクのセキュリティ**:招待リンクを入手した人は誰でも、プロジェクトへの参加を試みることができます。リンクが漏えいした場合は、招待パネルでその横のXをクリックして無効にできます。
[権限マトリクス](/ja/basic/authority-matrix)と[権限の詳細](/ja/basic/space/space-permission)が併用されている場合、権限マトリクスの制限を受けないのは**管理者**ユーザーだけです。それ以外のすべてのユーザーは制限を受けます。
diff --git a/ja/basic/space/billing.mdx b/ja/basic/space/billing.mdx
index 77fb77ea..da3dfbbd 100644
--- a/ja/basic/space/billing.mdx
+++ b/ja/basic/space/billing.mdx
@@ -41,19 +41,19 @@ description: "サブスクリプションの管理、請求情報の確認、使
| 指標 | 説明 |
|--------|-------------|
-| **共同編集者の合計** | 現在のスペースとそのベースにいる、課金対象の共同編集者数 |
+| **共同編集者の合計** | 現在のスペースとそのプロジェクトにいる、課金対象の共同編集者数 |
| **月間オートメーション実行数の上限** | 1か月あたりのオートメーション実行枠。オートメーションを1回実行するごとに実行枠を1回分消費します |
| **レコードの合計** | スペース内の全テーブルにある行の総数 |
| **添付ファイルのストレージ** | アップロードされた添付ファイルが使用するストレージの合計 |
| **メールの合計** | Teable メールサービスを使用してオートメーションから送信されたメール数 |
-スペースのゴミ箱とベースのゴミ箱にあるデータも、レコード合計の統計に含まれます。レコードの総数を減らすには、「スペース → ゴミ箱」または「ベース → ゴミ箱」のデータを整理してください。
+スペースのゴミ箱とプロジェクトのゴミ箱にあるデータも、レコード合計の統計に含まれます。レコードの総数を減らすには、「スペース → ゴミ箱」または「プロジェクト → ゴミ箱」のデータを整理してください。
-**レコードの合計**カードの**詳細**をクリックすると、ベースごとのレコード使用量を確認できます。ダイアログには、各ベースの有効なレコード、ゴミ箱内のレコード、レコード合計が表示されます。ダイアログからベースのゴミ箱ページを開いたり、すでにゴミ箱にあるベースを完全に削除したりできます。
+**レコードの合計**カードの**詳細**をクリックすると、プロジェクトごとのレコード使用量を確認できます。ダイアログには、各プロジェクトの有効なレコード、ゴミ箱内のレコード、レコード合計が表示されます。ダイアログからプロジェクトのゴミ箱ページを開いたり、すでにゴミ箱にあるプロジェクトを完全に削除したりできます。
### 上限に達した場合
-スペースがプランの上限に達すると、Teable は処理を実行前に停止し、アップグレードダイアログを開きます。ダイアログには、到達した上限、現在の使用量、ベースごとの使用量へのリンクが表示されます。これは、貼り付け、連続入力、行の複製、レコードの一括作成、インポート、添付ファイルのアップロードに適用されます。
+スペースがプランの上限に達すると、Teable は処理を実行前に停止し、アップグレードダイアログを開きます。ダイアログには、到達した上限、現在の使用量、プロジェクトごとの使用量へのリンクが表示されます。これは、貼り付け、連続入力、行の複製、レコードの一括作成、インポート、添付ファイルのアップロードに適用されます。
続行するには、プランをアップグレードするか、レコードや添付ファイルを削除して空き容量を確保してください。
@@ -129,9 +129,9 @@ description: "サブスクリプションの管理、請求情報の確認、使
### 席
-席は前払いで購入するため、チームの人数に先立って購入しても問題ありません。スペースとそのベースで**所有者**、**作成者**、**編集者**のロールを持つ共同編集者が席を使用します。**コメント投稿者**と**閲覧者**は無料です。
+席は前払いで購入するため、チームの人数に先立って購入しても問題ありません。スペースとそのプロジェクトで**所有者**、**作成者**、**編集者**のロールを持つ共同編集者が席を使用します。**コメント投稿者**と**閲覧者**は無料です。
-クラウドプランでは、購入した席数が厳格な上限になります。スペースがこの上限を超える操作は Teable によってブロックされ、席の追加購入が案内されます。これには、メール招待、課金対象ロールの招待リンクの作成やリンクのロールを課金対象へ変更する操作、そのようなリンクからの参加、共同編集者の直接追加、課金対象ロールへの昇格が含まれます。すでに席を使用している人が別のベースに参加したり、ロールを変更したりしても、新しい席は使用しません。
+クラウドプランでは、購入した席数が厳格な上限になります。スペースがこの上限を超える操作は Teable によってブロックされ、席の追加購入が案内されます。これには、メール招待、課金対象ロールの招待リンクの作成やリンクのロールを課金対象へ変更する操作、そのようなリンクからの参加、共同編集者の直接追加、課金対象ロールへの昇格が含まれます。すでに席を使用している人が別のプロジェクトに参加したり、ロールを変更したりしても、新しい席は使用しません。
続行するには、プランページで席を追加するか、その人に無料のコメント投稿者または閲覧者ロールを付与します。席を購入できるのはスペース所有者だけです。
diff --git a/ja/basic/space/space-invite.mdx b/ja/basic/space/space-invite.mdx
index 0d862c3d..e54057d6 100644
--- a/ja/basic/space/space-invite.mdx
+++ b/ja/basic/space/space-invite.mdx
@@ -5,7 +5,7 @@ description: "メールまたはリンクで他のユーザーをスペースの
## スペースのコラボレーターとは
-スペースを別のユーザーと共有すると、そのユーザーはスペースのコラボレーターとなり、スペース内のすべてのベースへアクセスできます。
+スペースを別のユーザーと共有すると、そのユーザーはスペースのコラボレーターとなり、スペース内のすべてのプロジェクトへアクセスできます。
## スペースのコラボレーターを追加する
@@ -14,7 +14,7 @@ description: "メールまたはリンクで他のユーザーをスペースの
1. 左側のサイドバーで、コラボレーターを追加するスペースをクリックします。
2. スペース上部付近の「招待」ボタンをクリックします。
3. スペースへの招待ウィンドウが開き、メールまたはリンクによる招待オプションが表示されます。以前に設定した「招待リンク」と既存の「スペースのコラボレーター」も、それぞれのセクションに表示されます。
-4. **メールで招待**:1つまたは複数のメールアドレスを入力します(カンマ区切り)。次に、スペース内のすべてのベースでユーザーに付与する権限レベルを設定します。最後にメール送信をクリックし、共同作業へ招待します。
+4. **メールで招待**:1つまたは複数のメールアドレスを入力します(カンマ区切り)。次に、スペース内のすべてのプロジェクトでユーザーに付与する権限レベルを設定します。最後にメール送信をクリックし、共同作業へ招待します。
メールで招待を送信した後、パネルに表示されるスペースへの直接リンクをコピーして、別途送信できます。招待されたユーザーには、スペースを開くアプリ内通知も届きます。
@@ -24,7 +24,7 @@ description: "メールまたはリンクで他のユーザーをスペースの
className="docs-screenshot"
/>
-5. **リンクで招待**:「リンクで招待」オプションをクリックします。次に、スペース内のすべてのベースに対して招待リンクが付与する権限レベルを設定します。最後にリンク作成をクリックします。作成したリンクの横にあるクリップボードアイコンをクリックして、任意の方法で共有できます。
+5. **リンクで招待**:「リンクで招待」オプションをクリックします。次に、スペース内のすべてのプロジェクトに対して招待リンクが付与する権限レベルを設定します。最後にリンク作成をクリックします。作成したリンクの横にあるクリップボードアイコンをクリックして、任意の方法で共有できます。
-スペースのコラボレーターは、スペース内のすべてのベースへアクセスできます。特定のベースだけで作業する必要がある場合は、[ベースのコラボレーター](/ja/basic/space/base-invite)として追加することを検討してください。
+スペースのコラボレーターは、スペース内のすべてのプロジェクトへアクセスできます。特定のプロジェクトだけで作業する必要がある場合は、[プロジェクトのコラボレーター](/ja/basic/space/base-invite)として追加することを検討してください。
## 招待リンクを削除する
@@ -56,7 +56,7 @@ description: "メールまたはリンクで他のユーザーをスペースの
* **権限の制限**:他のコラボレーターを削除できるのは、管理者または作成者権限を持つユーザーだけです。
* **自分を削除**:スペースに他の管理者が1人以上いる場合は、自分のアクセス権を削除できます。
-* **範囲**:スペースからユーザーを削除しても、個別のベースに対して持つ権限は削除されません。
+* **範囲**:スペースからユーザーを削除しても、個別のプロジェクトに対して持つ権限は削除されません。
新しいユーザーをスペースへ追加する際は、次のロールを割り当てられます([権限の詳細](/ja/basic/space/space-permission)を参照)。
@@ -68,8 +68,8 @@ description: "メールまたはリンクで他のユーザーをスペースの
| コメント投稿者 | レコードへコメントできますが、データは変更できません。|
| 閲覧者 | 表示できますが、コメントはできません。|
-## ベースへのアクセスを確認する
+## プロジェクトへのアクセスを確認する {#ベースへのアクセスを確認する}
-各ユーザーまたは部門は、個別のベースに対する権限も持っている場合でも、スペースのコラボレーター一覧に1回だけ表示されます。ロールの横にある**ベース権限**バッジには、招待されたベースの数が表示されます。スペース自体へ追加されたことがないユーザーには、**選択したベースだけにアクセス可能**と表示されます。
+各ユーザーまたは部門は、個別のプロジェクトに対する権限も持っている場合でも、スペースのコラボレーター一覧に1回だけ表示されます。ロールの横にある**プロジェクト権限**バッジには、招待されたプロジェクトの数が表示されます。スペース自体へ追加されたことがないユーザーには、**選択したプロジェクトだけにアクセス可能**と表示されます。
-行を展開すると、それらのベースと各ベースでのロールを確認できます。そこから、**ベースへのアクセスを削除**で1つのベース権限を取り消し、ベースだけに参加しているユーザーの行で**コラボレーターを削除**を使用すると、そのユーザーがこのスペースで持つすべてのベース権限を取り消せます。
+行を展開すると、それらのプロジェクトと各プロジェクトでのロールを確認できます。そこから、**プロジェクトへのアクセスを削除**で1つのプロジェクト権限を取り消し、プロジェクトだけに参加しているユーザーの行で**コラボレーターを削除**を使用すると、そのユーザーがこのスペースで持つすべてのプロジェクト権限を取り消せます。
diff --git a/ja/basic/space/space-permission.mdx b/ja/basic/space/space-permission.mdx
index 66b5475a..bc48c5c3 100644
--- a/ja/basic/space/space-permission.mdx
+++ b/ja/basic/space/space-permission.mdx
@@ -1,20 +1,20 @@
---
title: "コラボレーション権限の詳細"
-description: "スペースとベースにおける4つの異なる権限レベルの操作範囲を説明します。"
+description: "スペースとプロジェクトにおける4つの異なる権限レベルの操作範囲を説明します。"
---
Teableでは、テーブル、フィールド、レコードレベルで、よりきめ細かく権限を制御できます。[権限マトリクス](/ja/basic/authority-matrix)のセクションをご覧ください。
-### ベースの操作
+### プロジェクトの操作 {#ベースの操作}
| 説明 | 作成者/管理者 | 編集者 | コメント投稿者 | 閲覧者 |
| ----------- | :------------: | :----: | :-------: | :----: |
-| ベース内のデータを表示 | ✅ | ✅ | ✅ | ✅ |
+| プロジェクト内のデータを表示 | ✅ | ✅ | ✅ | ✅ |
| 同等以下の権限を持つユーザーを招待 | ✅ | ✅ | ✅ | ✅ |
| ビュー共有リンクを作成または削除 | ✅ | ✅ | | |
| オートメーションを作成、編集 | ✅ | | | |
| 権限マトリクスを有効化 | ✅ | | | |
-| ベース共同作業の招待リンクを作成または削除 | ✅ | | | |
-| ベース名を変更 | ✅ | | | |
+| プロジェクト共同作業の招待リンクを作成または削除 | ✅ | | | |
+| プロジェクト名を変更 | ✅ | | | |
### レコードの操作
@@ -51,12 +51,12 @@ description: "スペースとベースにおける4つの異なる権限レベ
| 説明 | 管理者 | 作成者 | 編集者 | コメント投稿者 | 閲覧者 |
| ----------- | :-----: | :-----: | :----: | :-------: | :----: |
-| スペース内のすべてのベースへアクセス | ✅ | ✅ | ✅ | ✅ | ✅ |
+| スペース内のすべてのプロジェクトへアクセス | ✅ | ✅ | ✅ | ✅ | ✅ |
| 同等以下の権限を持つユーザーを招待 | ✅ | ✅ | ✅ | ✅ | ✅ |
| スペース名を変更 | ✅ | ✅ | | | |
-| スペース内のベースを追加、削除 | ✅ | ✅ | | | |
-| スペース内のベースを並べ替え | ✅ | ✅ | | | |
-| スペース間でベースを移動 | ✅ | ✅ | | | |
+| スペース内のプロジェクトを追加、削除 | ✅ | ✅ | | | |
+| スペース内のプロジェクトを並べ替え | ✅ | ✅ | | | |
+| スペース間でプロジェクトを移動 | ✅ | ✅ | | | |
| 請求設定を調整し、スペースをアップグレード | ✅ | | | | |
| 管理者権限を付与 | ✅ | | | | |
diff --git a/ja/basic/table.mdx b/ja/basic/table.mdx
index 09328e12..5ee16378 100644
--- a/ja/basic/table.mdx
+++ b/ja/basic/table.mdx
@@ -1,16 +1,16 @@
---
title: "概要"
-description: "ベース内のテーブルを作成、インポート、共有、管理します。"
+description: "プロジェクト内のテーブルを作成、インポート、共有、管理します。"
---
{/* mintlify-resync: 2026-05-14 */}
-各ベースには、関連データを保存、管理するための複数のテーブルを含められます。Teableのテーブルはデータベーステーブルに相当します。[スプレッドシートとの違い](/ja/compare/teable-vs-excel)を理解すると、Teableを最大限に活用できます。
+各プロジェクトには、関連データを保存、管理するための複数のテーブルを含められます。Teableのテーブルはデータベーステーブルに相当します。[スプレッドシートとの違い](/ja/compare/teable-vs-excel)を理解すると、Teableを最大限に活用できます。
## テーブルを作成、管理する
### テーブルを追加する
-ベース内でディレクトリの`+`ボタンをクリックし、次のいずれかを選択します。
+プロジェクト内でディレクトリの`+`ボタンをクリックし、次のいずれかを選択します。
-他のテーブルが削除対象のテーブルへリンクしている場合、削除確認ダイアログには、削除の影響を受けるフィールドと、それぞれが属するベースおよびテーブルが表示されます。テーブルを削除すると、これらのリンクフィールドはリンクレコードのタイトルを保持した一行テキストフィールドへ変換され、それを基に構築されたルックアップまたはロールアップフィールドは機能しなくなります。
+他のテーブルが削除対象のテーブルへリンクしている場合、削除確認ダイアログには、削除の影響を受けるフィールドと、それぞれが属するプロジェクトおよびテーブルが表示されます。テーブルを削除すると、これらのリンクフィールドはリンクレコードのタイトルを保持した一行テキストフィールドへ変換され、それを基に構築されたルックアップまたはロールアップフィールドは機能しなくなります。
### ゴミ箱
-ベースの左上にあるゴミ箱アイコンをクリックし、削除したテーブルを管理します。
+プロジェクトの左上にあるゴミ箱アイコンをクリックし、削除したテーブルを管理します。
-- **復元**:すべてのデータを保持したまま、テーブルをベースへ戻します
+- **復元**:すべてのデータを保持したまま、テーブルをプロジェクトへ戻します
- **ゴミ箱を空にする**:ゴミ箱内のすべてのテーブルを完全に削除します
テーブルを復元しても、リンク変換は元に戻りません。他のテーブルのリンクフィールドはテキストのままになるため、接続を戻す必要がある場合は作り直してください。
diff --git a/ja/basic/table/import.mdx b/ja/basic/table/import.mdx
index 44fb3b89..c318cecd 100644
--- a/ja/basic/table/import.mdx
+++ b/ja/basic/table/import.mdx
@@ -4,7 +4,7 @@ description: "CSV、Excel、Airtable、Googleスプレッドシートのデー
---
{/* mintlify-resync: 2026-05-14 */}
-インポートを使用して、新しいテーブルを初期化する、既存のテーブルへ新しいデータを追加する、AirtableまたはGoogleスプレッドシートからTeableベースへテーブルを取り込むことができます。ベース全体をインポートする場合も、AirtableとGoogleスプレッドシートを利用できます。
+インポートを使用して、新しいテーブルを初期化する、既存のテーブルへ新しいデータを追加する、AirtableまたはGoogleスプレッドシートからTeableプロジェクトへテーブルを取り込むことができます。プロジェクト全体をインポートする場合も、AirtableとGoogleスプレッドシートを利用できます。
AIチャットのConnect Everythingを使用して、Airtable、Baserow、NocoDB、SmartSuite、その他のシステムをTeableへ移行します。
@@ -72,16 +72,16 @@ Excelファイルの上限は**5MB**です。より大きなデータセット
インスタンスにAirtable連携が設定されている場合、次の2つの方法でAirtableインポートを利用できます。
-- 新しいTeableベースを作成するには、対象スペースのメニューを開き、**インポート**をクリックして**Airtableからインポート**を選択します。
-- 表示中のTeableベースへテーブルをインポートするには、ベースのリソースメニューを使用します。
+- 新しいTeableプロジェクトを作成するには、対象スペースのメニューを開き、**インポート**をクリックして**Airtableからインポート**を選択します。
+- 表示中のTeableプロジェクトへテーブルをインポートするには、プロジェクトのリソースメニューを使用します。
-1. 対象のTeableベースを開きます。
+1. 対象のTeableプロジェクトを開きます。
2. 左側のディレクトリ上部にある`+`をクリックします。
3. **その他のソースから追加**で、**Airtable**を選択します。
@@ -99,8 +99,8 @@ Excelファイルの上限は**5MB**です。より大きなデータセット
次のいずれかの場所から開始します。
-- 新しいTeableベースを作成するには、対象スペースのメニューを開き、**インポート**をクリックして**Googleスプレッドシートからインポート**を選択します。
-- 表示中のベースへテーブルを追加するには、左側のディレクトリ上部にある`+`をクリックし、**その他のソースから追加**で**Googleスプレッドシート**を選択します。
+- 新しいTeableプロジェクトを作成するには、対象スペースのメニューを開き、**インポート**をクリックして**Googleスプレッドシートからインポート**を選択します。
+- 表示中のプロジェクトへテーブルを追加するには、左側のディレクトリ上部にある`+`をクリックし、**その他のソースから追加**で**Googleスプレッドシート**を選択します。
@@ -113,7 +113,7 @@ Excelファイルの上限は**5MB**です。より大きなデータセット
各タブは、行数と列数を示すカードとして表示されます。必要なタブを選択します。データを含めずフィールド構造だけが必要な場合は、**レコードをインポート**をオフにします。
- **インポートを開始**をクリックし、ダイアログを開いたままにします。テーブルごとの進捗が表示され、完了時には各テーブルへ追加されたレコード数が表示されます。新しいベースとしてインポートした後、**ベースを開く**を使用すると、結果へ直接移動できます。
+ **インポートを開始**をクリックし、ダイアログを開いたままにします。テーブルごとの進捗が表示され、完了時には各テーブルへ追加されたレコード数が表示されます。新しいプロジェクトとしてインポートした後、**プロジェクトを開く**を使用すると、結果へ直接移動できます。
diff --git a/ja/basic/view/toolbar.mdx b/ja/basic/view/toolbar.mdx
index 9ed454c9..cb7256db 100644
--- a/ja/basic/view/toolbar.mdx
+++ b/ja/basic/view/toolbar.mdx
@@ -148,9 +148,9 @@ description: "現在のビューで、フィルター、グループ、並べ替
## ビューを共有する
-**ビューを共有**では、現在のビューをリンクとして公開します。訪問者には、そのビューのデータとレイアウトが表示されます。ベースの共同編集者として招待する操作とは異なります。
+**ビューを共有**では、現在のビューをリンクとして公開します。訪問者には、そのビューのデータとレイアウトが表示されます。プロジェクトの共同編集者として招待する操作とは異なります。
-ベース全体、特定のテーブル、またはフォルダーを共有するには、[ベース](/ja/basic/base)のベース共有を使用してください。
+プロジェクト全体、特定のテーブル、またはフォルダーを共有するには、[プロジェクト](/ja/basic/base)のプロジェクト共有を使用してください。
| 共有オプション | 適した用途 |
| --- | --- |
@@ -240,5 +240,5 @@ description: "現在のビューで、フィルター、グループ、並べ替
## 注意事項
- 個人モードを使用している場合を除き、フィルター、グループ、並べ替え、表示フィールド、行の高さを変更すると、現在のビューを使用する全員に影響します。
-- ビューの共有で公開されるのは現在のビューの結果であり、ベースのすべての権限ではありません。継続的な共同作業には、メンバー権限またはベース共有を使用してください。
+- ビューの共有で公開されるのは現在のビューの結果であり、プロジェクトのすべての権限ではありません。継続的な共同作業には、メンバー権限またはプロジェクト共有を使用してください。
- どちらのモードでも、セルの値に対する編集は全員に同期されます。
diff --git a/ja/deploy/env.mdx b/ja/deploy/env.mdx
index 62b0cfcb..0f28773d 100644
--- a/ja/deploy/env.mdx
+++ b/ja/deploy/env.mdx
@@ -71,7 +71,7 @@ mode: "wide"
| BACKEND_MAIL_AUTH_USER | デフォルトのメールサーバー認証ユーザー名 | - | - | username |
| BACKEND_MAIL_AUTH_PASS | デフォルトのメールサーバー認証パスワード | - | - | usertoken |
| BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH | 招待メールの件名に含める招待者名の最大文字数。空または0の場合、切り詰めません | - | - | 32 |
-| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | 招待メールの件名に含めるスペース名またはベース名の最大文字数。空または0の場合、切り詰めません | - | - | 32 |
+| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | 招待メールの件名に含めるスペース名またはプロジェクト名の最大文字数。空または0の場合、切り詰めません | - | - | 32 |
| **セッション/JWT設定** | | | | |
| BACKEND_SESSION_EXPIRES_IN | セッションの有効期間 | 7d | - | 7d |
| BACKEND_SESSION_COOKIE_SECURE | セッションCookieを保護するかどうか | false | - | true |
@@ -93,7 +93,7 @@ mode: "wide"
| TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | 1回の変更操作あたりの最大レコード数 | 20000 | - | 20000 |
| TABLE_LIMIT_COMPUTED_CELL_VALUE_MAX_BYTES | 計算セル値の最大バイト数 | 262144 | - | 262144 |
| TABLE_LIMIT_FORMULA_MAX_LENGTH | 数式の最大文字数 | 8192 | - | 8192 |
-| TABLE_LIMIT_TABLES_PER_BASE_MAX | 1ベースあたりのテーブルの最大数 | 1000 | - | 1000 |
+| TABLE_LIMIT_TABLES_PER_BASE_MAX | 1プロジェクトあたりのテーブルの最大数 | 1000 | - | 1000 |
| TABLE_LIMIT_FIELDS_PER_TABLE_MAX | 1テーブルあたりのフィールドの最大数 | 500 | - | 500 |
| TABLE_LIMIT_VIEWS_PER_TABLE_MAX | 1テーブルあたりのビューの最大数 | 100 | - | 100 |
| TABLE_LIMIT_CREATE_TABLE_FIELDS_MAX | テーブル作成時に受け付けるフィールドの最大数 | 1000 | - | 1000 |
@@ -133,10 +133,10 @@ mode: "wide"
| TELEMETRY_REPORT_DISABLED | 接続されたインスタンスからのライセンス遵守レポートを含む、セルフホスト版のテレメトリーレポートを無効にします | false | - | true |
| **データベース設定** | | | | |
| PRISMA_DATABASE_URL | データベース接続URL。設定が必須です | - | はい | postgresql://teable:teable@127.0.0.1:5432/teable |
-| PUBLIC_DATABASE_PROXY | ベースの「データベース接続」パネルで生成される認証情報に使用する、外部からアクセス可能なデータベースアドレス(host:port)。外部からの読み取り専用 SQL アクセスを有効にするには設定してください | - | - | db.example.com:42345 |
+| PUBLIC_DATABASE_PROXY | プロジェクトの「データベース接続」パネルで生成される認証情報に使用する、外部からアクセス可能なデータベースアドレス(host:port)。外部からの読み取り専用 SQL アクセスを有効にするには設定してください | - | - | db.example.com:42345 |
| PRISMA_TRANSACTION_TIMEOUT | トランザクションがタイムアウトするまで実行できる最大時間(ミリ秒)。長時間のトランザクション(多数の外部キーを伴う一括更新など)では値を増やしてください | 5000 | - | 60000 |
| PRISMA_TRANSACTION_MAX_WAIT | プールからトランザクションを取得するまでの最大待機時間(ミリ秒) | 2000 | - | 5000 |
-| BIG_TRANSACTION_TIMEOUT | 大規模なベースのエクスポートなど、大きな内部トランザクションのタイムアウト(ミリ秒) | 600000 | - | 1200000 |
+| BIG_TRANSACTION_TIMEOUT | 大規模なプロジェクトのエクスポートなど、大きな内部トランザクションのタイムアウト(ミリ秒) | 600000 | - | 1200000 |
## シークレットとローテーション {#secrets-and-rotation}
diff --git a/ru/api-doc/get-id.mdx b/ru/api-doc/get-id.mdx
index 304049e0..c43abf86 100644
--- a/ru/api-doc/get-id.mdx
+++ b/ru/api-doc/get-id.mdx
@@ -14,11 +14,11 @@ title: "Получение ID"
## BaseId
-Откройте нужную Базу и скопируйте из URL строку, начинающуюся с 'bse'; пример: `bseXXXXXXXXXX`
+Откройте нужный Проект и скопируйте из URL строку, начинающуюся с 'bse'; пример: `bseXXXXXXXXXX`
diff --git a/ru/api-doc/oauth.mdx b/ru/api-doc/oauth.mdx
index 02425af2..6c711131 100644
--- a/ru/api-doc/oauth.mdx
+++ b/ru/api-doc/oauth.mdx
@@ -33,7 +33,7 @@ Teable поддерживает три режима авторизации OAuth
| Ресурс | Области действия |
|----------|--------|
| **Приложение** | `app\|create`, `app\|read`, `app\|update`, `app\|delete` |
-| **База** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
+| **Проект** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
| **Таблица** | `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` |
@@ -296,14 +296,14 @@ curl https://app.teable.ai/api/table/TABLE_ID/record \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Как правило, первым шагом после получения токена является получение всех Баз, доступных текущему пользователю:
+Как правило, первым шагом после получения токена является получение всех Проектов, доступных текущему пользователю:
```bash
curl https://app.teable.ai/api/base/access/all \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Эта конечная точка возвращает все Базы, к которым текущий пользователь имеет разрешение на доступ. Для последующих вызовов API можно использовать `baseId` из ответа.
+Эта конечная точка возвращает все Проекты, к которым текущий пользователь имеет разрешение на доступ. Для последующих вызовов API можно использовать `baseId` из ответа.
## Обновление токенов доступа
diff --git a/ru/api-doc/record/interface.mdx b/ru/api-doc/record/interface.mdx
index 75473a9f..425cdf54 100644
--- a/ru/api-doc/record/interface.mdx
+++ b/ru/api-doc/record/interface.mdx
@@ -2,7 +2,7 @@
title: "Интерфейс Поля Записи"
---
-Поле подстановки не является отдельным типом Поля. Можно подставлять Поле любого типа из связанной Базы. Тип Поля подстановки определяется исходным Полем в связанной Базе и имеет свойство isLookup. Поля подстановки нельзя редактировать.
+Поле подстановки не является отдельным типом Поля. Можно подставлять Поле любого типа из связанного Проекта. Тип Поля подстановки определяется исходным Полем в связанном Проекте и имеет свойство isLookup. Поля подстановки нельзя редактировать.
Все возвращаемые значения Полей в некоторых случаях могут иметь `isMultipleCellValue: true`:
diff --git a/ru/api-doc/sql-query.mdx b/ru/api-doc/sql-query.mdx
index 12163eaf..f21f8855 100644
--- a/ru/api-doc/sql-query.mdx
+++ b/ru/api-doc/sql-query.mdx
@@ -11,12 +11,12 @@ Teable позволяет подключаться к базовой базе д
### Создание подключения к базе данных
-1. **Откройте Таблицу**: Сначала откройте любую таблицу в Базе, к которой хотите подключиться.
-2. **Перейдите на страницу дизайна**: Нажмите значок ⚙️ в правом верхнем углу, чтобы перейти на страницу дизайна Базы.
+1. **Откройте Таблицу**: Сначала откройте любую таблицу в Проекте, к которому хотите подключиться.
+2. **Перейдите на страницу дизайна**: Нажмите значок ⚙️ в правом верхнем углу, чтобы перейти на страницу дизайна Проекта.
@@ -50,7 +50,7 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
**Примечание:** В PostgreSQL используйте двойные кавычки `"` вокруг имён схем и таблиц, чтобы сохранить чувствительность к регистру.
Для написания этого запроса необходимо знать три вещи:
-- **Имя схемы (BaseId)**: Идентификатор Базы, начинающийся с `bse`
+- **Имя схемы (BaseId)**: Идентификатор Проекта, начинающийся с `bse`
- **Имя Таблицы**: Физическое имя таблицы в PostgreSQL
- **Имена Полей**: Фактические имена столбцов в базе данных
@@ -58,27 +58,27 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
### Поиск BaseId (имени схемы)
-Каждая База в Teable соответствует **схеме** в PostgreSQL. BaseId — это имя схемы, используемое в SQL-запросах.
+Каждый Проект в Teable соответствует **схеме** в PostgreSQL. BaseId — это имя схемы, используемое в SQL-запросах.
**Способ 1:** Посмотрите на URL: строка, начинающаяся с `bse`, — это BaseId.
-**Способ 2:** В интерфейсе дизайна Базы отображаемое имя схемы — это BaseId.
+**Способ 2:** В интерфейсе дизайна Проекта отображаемое имя схемы — это BaseId.
### Поиск имён Таблиц
-Имена Таблиц в интерфейсе Teable не синхронизируются автоматически с физическими именами таблиц базы данных. Проверьте интерфейс дизайна Базы, чтобы узнать фактическое имя таблицы базы данных.
+Имена Таблиц в интерфейсе Teable не синхронизируются автоматически с физическими именами таблиц базы данных. Проверьте интерфейс дизайна Проекта, чтобы узнать фактическое имя таблицы базы данных.
diff --git a/ru/api-doc/token.mdx b/ru/api-doc/token.mdx
index 9a817edc..55f5f6a4 100644
--- a/ru/api-doc/token.mdx
+++ b/ru/api-doc/token.mdx
@@ -15,7 +15,7 @@ description: "Персональные токены доступа исполь
3. Добавьте токену необходимые области разрешений.
-4. Укажите, к каким Базам и Пространствам токен может получать доступ.
+4. Укажите, к каким Проектам и Пространствам токен может получать доступ.
После создания токен будет показан только один раз. Рекомендуем скопировать его и сохранить в безопасном месте.
diff --git a/ru/basic/admin-panel/announcements.mdx b/ru/basic/admin-panel/announcements.mdx
index 475af2a5..f0d7fef9 100644
--- a/ru/basic/admin-panel/announcements.mdx
+++ b/ru/basic/admin-panel/announcements.mdx
@@ -15,7 +15,7 @@ description: "Публикуйте объявления в приложении
| Настройка | Что она определяет |
| --- | --- |
-| **Форма** | Где появляется объявление: **Баннер** в верхней части приложения, **Всплывающее уведомление** как кратковременное уведомление, **Модальное окно** как прерывающий диалог или **Карточка боковой панели** на боковых панелях пространства и базы. |
+| **Форма** | Где появляется объявление: **Баннер** в верхней части приложения, **Всплывающее уведомление** как кратковременное уведомление, **Модальное окно** как прерывающий диалог или **Карточка боковой панели** на боковых панелях пространства и проекта. |
| **Уровень** | Тон, который видят пользователи: **Информация**, **Обслуживание**, **Критично** или **Устранено**. |
| Заголовок и **Текст** | Текст объявления. |
| **Начало** / **Окончание** | Период, в течение которого показывается объявление. Время окончания должно быть позже времени начала. |
diff --git a/ru/basic/admin-panel/audit-log.mdx b/ru/basic/admin-panel/audit-log.mdx
index 354494b9..75dd05fd 100644
--- a/ru/basic/admin-panel/audit-log.mdx
+++ b/ru/basic/admin-panel/audit-log.mdx
@@ -11,9 +11,9 @@ description: "Просматривайте активность во всем э
## Что можно просмотреть
-Журнал аудита охватывает распространенные действия администрирования и совместной работы, включая пространства, базы, таблицы, представления, поля, записи, общий доступ, приглашения, токены доступа и матрицу полномочий.
+Журнал аудита охватывает распространенные действия администрирования и совместной работы, включая пространства, проекты, таблицы, представления, поля, записи, общий доступ, приглашения, токены доступа и матрицу полномочий.
-Каждая запись журнала показывает время операции, оператора, тип действия, связанную базу или пространство и источник запроса. Откройте запись журнала, чтобы просмотреть ее сведения.
+Каждая запись журнала показывает время операции, оператора, тип действия, связанный проект или пространство и источник запроса. Откройте запись журнала, чтобы просмотреть ее сведения.
## Действия с оператором
@@ -30,10 +30,10 @@ description: "Просматривайте активность во всем э
- **Выбрать оператора**: Показать действия, выполненные определенным пользователем.
- **Выбрать Пространство**: Показать активность в определенном пространстве.
-- **Выбрать Базу**: Показать активность для определенной базы.
-- **Выбрать действие**: Фильтруйте по типу операции: например, записи, поля, представления, таблицы, базы, общий доступ, матрица полномочий, роли матрицы полномочий, пространства, приглашения, пользователи и токены доступа.
+- **Выбрать Проект**: Показать активность для определенного проекта.
+- **Выбрать действие**: Фильтруйте по типу операции: например, записи, поля, представления, таблицы, проекты, общий доступ, матрица полномочий, роли матрицы полномочий, пространства, приглашения, пользователи и токены доступа.
-Если пользователь, база или пространство были удалены, запись остается в журнале, а ресурс помечается как удаленный.
+Если пользователь, проект или пространство были удалены, запись остается в журнале, а ресурс помечается как удаленный.
## Просмотр больших списков журналов
diff --git a/ru/basic/admin-panel/computed-outbox.mdx b/ru/basic/admin-panel/computed-outbox.mdx
index 9ebf6c9d..9a5a8c1e 100644
--- a/ru/basic/admin-panel/computed-outbox.mdx
+++ b/ru/basic/admin-panel/computed-outbox.mdx
@@ -30,7 +30,7 @@ description: "Отслеживайте доставку BullMQ и накопле
Чтобы сузить список:
- Нажимайте плитки состояний над таблицей для фильтрации по состоянию: **Ожидание**, **Активно**, **Отложено**, **Сбой**, **Завершено (сохранено)** и т. д. Можно выбрать несколько состояний одновременно, а при наведении на плитку отображается значение этого состояния.
-- Фильтруйте по **Пространству**, **Базе**, **Причине** или **Результату**, ищите задачу, Базу, Пространство или ошибку либо задайте минимальное время обработки, чтобы найти медленные задачи.
+- Фильтруйте по **Пространству**, **Проекту**, **Причине** или **Результату**, ищите задачу, Проект, Пространство или ошибку либо задайте минимальное время обработки, чтобы найти медленные задачи.
- Нажмите строку, чтобы открыть **Цепочку вычислений**: временные метки очереди, задержку доставки, время обработки, полную причину сбоя с отредактированным SQL для неудачной доставки и описанные ниже сведения о распространении.
**Завершено** не означает, что задача выполнила работу. Метка результата показывает, что фактически сделала доставка: **Обработано** выполнило задачу, **Без изменений** не обнаружило ничего, что осталось сделать, **Отложено** перенесло ее на более позднее время, а **Припарковано** означает, что ее область действия приостановлена. Фильтр **Результат** сужает список по этому результату и показывает, сколько доставок охватывает каждый из них, поэтому сочетание **Завершено (сохранено)** с **Обработано** оставляет только доставки, которые действительно выполнили задачу.
@@ -58,7 +58,7 @@ description: "Отслеживайте доставку BullMQ и накопле
Количество **Сбоев** и раздел **Обслуживание аномалий** показывают разные типы проблем, поэтому их значения могут отличаться.
-**Обслуживание аномалий** объединяет аномалии в проблемные группы — по одной для каждой Базы, исходной таблицы и ошибки, — поэтому легко обнаружить одну первопричину. Перед восстановлением чего-либо изучите причину сбоя и устраните основную проблему. Разверните группу, чтобы прочитать сведения об ошибке и охватываемых ею задачах; эти строки предназначены для проверки, а восстановление всегда выполняется для всей группы.
+**Обслуживание аномалий** объединяет аномалии в проблемные группы — по одной для каждого Проекта, исходной таблицы и ошибки, — поэтому легко обнаружить одну первопричину. Перед восстановлением чего-либо изучите причину сбоя и устраните основную проблему. Разверните группу, чтобы прочитать сведения об ошибке и охватываемых ею задачах; эти строки предназначены для проверки, а восстановление всегда выполняется для всей группы.
Доступные для группы действия зависят от ее типа:
@@ -70,7 +70,7 @@ description: "Отслеживайте доставку BullMQ и накопле
После восстановления группы Teable сообщает, сколько задач было восстановлено, сколько из них было впервые поставлено в очередь или уже находилось в ней, а также сколько было доставлено или отложено. Затем воркеры обрабатывают группу с учетом текущих ограничений параллелизма и разделения задач.
-Группа с пометкой **База удалена** относится к Базе, которой больше не существует. Ее восстановление сразу же снова завершится неудачей, поэтому доступно только действие **Удалить группу**.
+Группа с пометкой **Проект удалён** относится к Проекту, которого больше не существует. Ее восстановление сразу же снова завершится неудачей, поэтому доступно только действие **Удалить группу**.
Перемещение таблицы в корзину больше не создает здесь аномалий. Вычисляемая задача, которая все еще ссылается на удаленную в корзину таблицу, пропускает шаги, читающие ее, завершает шаги, нацеленные на активные таблицы, и завершается.
@@ -101,9 +101,9 @@ description: "Отслеживайте доставку BullMQ и накопле
| Элемент управления | Что ограничивает |
| --- | --- |
| **Параллелизм на процесс** | Сколько вычисляемых задач одновременно обрабатывает каждый процесс воркера. |
-| **Ограничения получения задач на Базу** | Сколько вычисляемых задач одновременно выполняется для одной Базы (**На Базу**) и для одной исходной таблицы в ней (**На исходную таблицу**). По умолчанию оба значения равны 2 и принимают значения от 1 до 16. |
+| **Ограничения получения задач на Проект** | Сколько вычисляемых задач одновременно выполняется для одного Проекта (**На Проект**) и для одной исходной таблицы в нём (**На исходную таблицу**). По умолчанию оба значения равны 2 и принимают значения от 1 до 16. |
-Увеличивайте ограничения получения задач, если узким местом является одна загруженная База, и параллелизм на процесс, если в очередь одновременно поставлено много Баз.
+Увеличивайте ограничения получения задач, если узким местом является один загруженный Проект, и параллелизм на процесс, если в очередь одновременно поставлено много Проектов.
Более высокий параллелизм сильнее нагружает вашу базу данных. Пространства, хранящие данные в [арендаторе базы данных](/ru/basic/admin-panel/database-tenant), сохраняют значения ограничений получения задач из настроек окружения по умолчанию, поскольку их пулы подключений рассчитаны на эти значения.
diff --git a/ru/basic/admin-panel/database-tenant.mdx b/ru/basic/admin-panel/database-tenant.mdx
index c54addaa..a102a9ef 100644
--- a/ru/basic/admin-panel/database-tenant.mdx
+++ b/ru/basic/admin-panel/database-tenant.mdx
@@ -26,7 +26,7 @@ description: "Размещайте данные Пространства Teable
Нет. Это Пространство Teable, данные которого хранятся в этой базе данных.
- Нет. Он изменяет место, где Teable хранит и управляет собственными данными Пространства. Вы предоставляете PostgreSQL базу данных, размещенную в другом месте, а Teable создает и управляет там собственными данными. Существующие таблицы и записи в этой базе данных не подключаются к Teable и не импортируются автоматически как Базы.
+ Нет. Он изменяет место, где Teable хранит и управляет собственными данными Пространства. Вы предоставляете PostgreSQL базу данных, размещенную в другом месте, а Teable создает и управляет там собственными данными. Существующие таблицы и записи в этой базе данных не подключаются к Teable и не импортируются автоматически как Проекты.
diff --git a/ru/basic/admin-panel/multitenancy.mdx b/ru/basic/admin-panel/multitenancy.mdx
index 31d8275c..fdd78de5 100644
--- a/ru/basic/admin-panel/multitenancy.mdx
+++ b/ru/basic/admin-panel/multitenancy.mdx
@@ -16,10 +16,10 @@ noindex: true
Экземпляр Teable
├── Арендатор организации A
│ ├── Администраторы организации, участники и отделы
-│ └── Пространства, Базы и настройки уровня организации
+│ └── Пространства, Проекты и настройки уровня организации
├── Арендатор организации B
│ ├── Администраторы организации, участники и отделы
-│ └── Пространства, Базы и настройки уровня организации
+│ └── Пространства, Проекты и настройки уровня организации
└── Арендатор организации C
```
@@ -107,7 +107,7 @@ noindex: true
| --- | --- |
| **Пользователи** | Просмотр и управление пользователями в текущей организации |
| **Организация** | Создание, перемещение, переименование и удаление отделов, а также управление участниками отделов |
-| **Управление пространствами** | Добавление Пространств в организацию или их удаление из нее, а также просмотр количества Пространств и Баз |
+| **Управление пространствами** | Добавление Пространств в организацию или их удаление из нее, а также просмотр количества Пространств и Проектов |
| **Настройки аутентификации** | Настройка сторонних провайдеров аутентификации для организации |
| **Настройки безопасности** | Подтверждение доменов электронной почты, чтобы новые пользователи с этими доменами автоматически присоединялись к организации |
| **Настройки экземпляра** | Изменение названия организации, автоматического доступа к Пространству и области действия отделов |
diff --git a/ru/basic/admin-panel/skills.mdx b/ru/basic/admin-panel/skills.mdx
index 1bf7e076..e24a24a9 100644
--- a/ru/basic/admin-panel/skills.mdx
+++ b/ru/basic/admin-panel/skills.mdx
@@ -9,7 +9,7 @@ description: "Публикуйте навыки, которые может ис
Используйте **Навыки**, чтобы публиковать навыки для всего экземпляра. Навык, добавленный здесь, доступен в каждом ИИ-чате, Конструкторе приложений и беседе с ботом, поэтому используйте его для методов работы, которые ваша организация должна применять по умолчанию: например, для корпоративного стиля письма, правил подготовки отчетов или общего процесса интеграции.
-Навыки, добавленные пользователями в других местах, остаются в собственной области действия. См. [ИИ-чат](/ru/basic/ai/ai-chat) для личных навыков, навыков базы и пространства.
+Навыки, добавленные пользователями в других местах, остаются в собственной области действия. См. [ИИ-чат](/ru/basic/ai/ai-chat) для личных навыков, навыков проекта и пространства.
## Добавление навыка
@@ -34,5 +34,5 @@ description: "Публикуйте навыки, которые может ис
## Когда имя используется дважды
-Навык, опубликованный здесь, является значением по умолчанию для экземпляра. Если навык базы, пространства, личный навык, навык приложения или бота использует то же имя, в этой беседе действует более узкий навык, а навык экземпляра игнорируется.
+Навык, опубликованный здесь, является значением по умолчанию для экземпляра. Если навык проекта, пространства, личный навык, навык приложения или бота использует то же имя, в этой беседе действует более узкий навык, а навык экземпляра игнорируется.
diff --git a/ru/basic/admin-panel/spaces.mdx b/ru/basic/admin-panel/spaces.mdx
index 791e8810..3095dbd2 100644
--- a/ru/basic/admin-panel/spaces.mdx
+++ b/ru/basic/admin-panel/spaces.mdx
@@ -8,7 +8,7 @@ description: "Управляйте всеми пространствами в с
### Сведения о Пространстве
* **Название Пространства**: Отображаемое название пространства
-* **Базы**: Общее количество баз в пространстве
+* **Проекты**: Общее количество проектов в пространстве
* **Участники**: Общее количество пользователей, имеющих доступ к пространству
* **Время создания**: Время создания пространства
* **Автоматическое присоединение**: Разрешает ли пространство новым пользователям присоединяться автоматически
@@ -26,7 +26,7 @@ description: "Управляйте всеми пространствами в с
При удалении пространства из панели администрирования:
* Пространство немедленно помечается как удаленное
-* Все базы и данные в пространстве становятся недоступны
+* Все проекты и данные в пространстве становятся недоступны
* Участники теряют доступ к пространству
* Эту операцию нельзя отменить
diff --git a/ru/basic/admin-panel/table-query-ops.mdx b/ru/basic/admin-panel/table-query-ops.mdx
index 3ef9ef69..8d69cdd6 100644
--- a/ru/basic/admin-panel/table-query-ops.mdx
+++ b/ru/basic/admin-panel/table-query-ops.mdx
@@ -26,7 +26,7 @@ description: "Просматривайте покрытие поиска и ин
| **Не настроено** | Таблицы без покрытия поиска. |
| **Недоступно** | Таблицы, которые сейчас не могут использовать индексированный поиск. Причина указана в строке. |
-Поле поиска принимает названия и идентификаторы таблиц, Баз и Пространств. Сортировать можно по параметру **Больше всего медленных запросов** или **Название таблицы**. **Окно наблюдения** охватывает последний час или 24 часа, и все показатели наблюдений в списке следуют этому окну. Наблюдения хранятся 2 дня, более ранние в списке не отображаются.
+Поле поиска принимает названия и идентификаторы таблиц, Проектов и Пространств. Сортировать можно по параметру **Больше всего медленных запросов** или **Название таблицы**. **Окно наблюдения** охватывает последний час или 24 часа, и все показатели наблюдений в списке следуют этому окну. Наблюдения хранятся 2 дня, более ранние в списке не отображаются.
В каждой строке указаны оценочное число строк и размер таблицы, запросы и медленные запросы за окно, текущий метод поиска и покрытие Полей, число индексов фильтрации/сортировки, а также количество открытых рекомендаций и активных задач. Нажмите название таблицы, чтобы открыть подробности.
diff --git a/ru/basic/admin-panel/template-admin.mdx b/ru/basic/admin-panel/template-admin.mdx
index d49f5b14..2aa4a904 100644
--- a/ru/basic/admin-panel/template-admin.mdx
+++ b/ru/basic/admin-panel/template-admin.mdx
@@ -1,6 +1,6 @@
---
title: "Администрирование шаблонов"
-description: "Управляйте шаблонами рабочих процессов организации, чтобы пользователи могли быстро начать работу с предварительно настроенными базами."
+description: "Управляйте шаблонами рабочих процессов организации, чтобы пользователи могли быстро начать работу с предварительно настроенными проектами."
---
Доступно для самостоятельного развертывания на тарифе Business и выше
@@ -16,12 +16,12 @@ description: "Управляйте шаблонами рабочих проце
* **Описание в Markdown**: Подробное описание с поддержкой форматирования расширенного текста
* **Категория**: Группируйте шаблоны по бизнес-сценариям (например, HR, продажи, разработка)
* **Системный**: Показывает, является ли шаблон официальным системным шаблоном
-* **Источник**: Исходная база, использованная для создания этого шаблона
+* **Источник**: Исходный проект, использованный для создания этого шаблона
#### Операции с шаблонами
* **Новый шаблон**: Создать новую конфигурацию шаблона
-* **Опубликовать снимок**: Зафиксировать текущее состояние исходной базы. Перед публикацией шаблона необходимо опубликовать снимок.
+* **Опубликовать снимок**: Зафиксировать текущее состояние исходного проекта. Перед публикацией шаблона необходимо опубликовать снимок.
* **Статус (публикация)**: Включите или выключите отображение шаблона в центре шаблонов. Требуются название, описание и снимок.
* **Закрепить**: Закрепить важные шаблоны вверху списка
* **Удалить**: Удалить конфигурацию шаблона
@@ -31,8 +31,8 @@ description: "Управляйте шаблонами рабочих проце
Пользователи самостоятельного развертывания могут импортировать шаблоны из официального Teable Cloud:
1. **Скачать**: Получите файл `.tea` в [Официальном центре шаблонов](https://teable.ai/templates)
-2. **Импортировать**: Импортируйте файл `.tea` как новую базу в своем пространстве
+2. **Импортировать**: Импортируйте файл `.tea` как новый проект в своем пространстве
3. **Создать шаблон**: Перейдите в Администрирование шаблонов > Новый шаблон
-4. **Выбрать источник**: Выберите импортированную базу в качестве источника
+4. **Выбрать источник**: Выберите импортированный проект в качестве источника
5. **Опубликовать**: Настройте сведения, опубликуйте снимок и включите статус
diff --git a/ru/basic/ai/ai-chat.mdx b/ru/basic/ai/ai-chat.mdx
index 9bd160d7..8b373b87 100644
--- a/ru/basic/ai/ai-chat.mdx
+++ b/ru/basic/ai/ai-chat.mdx
@@ -35,7 +35,7 @@ description: Взаимодействуйте с данными на естес
- **Мои секреты**: откройте **+** → **Больше** → **Мои секреты**, чтобы сохранить API-ключи или другие учётные данные в разделе **Настройки** → **Интеграции**. Эти значения принадлежат вам, ИИ-чат читает их во время работы как переменные окружения, и вы можете выдавать их отдельным приложениям и автоматизациям. См. [Учётные данные и интеграции](/ru/basic/credential).
- **Запросы учётных данных**: когда ИИ нужна сторонняя учётная запись или секрет, он закрепляет в беседе карточку запроса. Выберите **Подключить мой аккаунт**, чтобы пройти OAuth, либо выдайте уже имеющиеся учётные данные. Кнопка **Пропустить** оставляет их при вас, и ИИ продолжает с тем, что может выполнить без них.
- **Скрейпер**: откройте меню **+**, выберите **Скрейпер**, затем платформу и тип данных. Пункты бывают двух видов: одни собирают данные по вставленной ссылке, например **личный профиль** в LinkedIn или **отзывы о товаре** на Amazon; другие ищут по ключевому слову, хештегу или имени, например **поиск видео** в TikTok или **посты сабреддита** на Reddit. Teable подставит в поле ввода готовую инструкцию и оставит в конце часть, которую нужно дополнить. **Любая веб-страница** принимает вставленную ссылку напрямую.
-- **Навыки**: откройте меню **+** и выберите **Навыки**, чтобы импортировать, включать, отключать или пробовать навыки в текущем чате. При импорте выберите, кто сможет его использовать: **Личный** оставляет его только вам, **База** предоставляет его соавторам в этой базе, а **Пространство** — всем в этом пространстве. Введите `/` в поле ввода, чтобы выбрать включенный навык. Сведения о подключении или миграции внешней системы см. в разделе [Подключайте и переносите всё](/ru/basic/ai/connect-everything).
+- **Навыки**: откройте меню **+** и выберите **Навыки**, чтобы импортировать, включать, отключать или пробовать навыки в текущем чате. При импорте выберите, кто сможет его использовать: **Личный** оставляет его только вам, **Проект** предоставляет его соавторам в этом проекте, а **Пространство** — всем в этом пространстве. Введите `/` в поле ввода, чтобы выбрать включенный навык. Сведения о подключении или миграции внешней системы см. в разделе [Подключайте и переносите всё](/ru/basic/ai/connect-everything).
- **Использование контекста**: кольцо рядом с полем ввода показывает, какую часть контекстного окна модели сейчас использует беседа. Нажмите его, чтобы увидеть процент и количество токенов. Когда контекст заполняется, Teable сжимает беседу; если нужен чистый контекст, начните новый чат.
- **Управление файлами**: откройте **+** → **Ещё** → **Управление файлами**, чтобы просмотреть файлы в изолированной среде текущего чата. Можно просматривать поддерживаемые файлы, скачивать их или удалять ненужные файлы и папки. Для управления файлами беседа уже должна существовать.
- **Очередь сообщений**: отправка другого сообщения, пока ИИ работает, не прерывает его. Сообщение ожидает в очереди над полем ввода и будет отправлено после завершения текущего запуска. Элементы в очереди сохраняют те же чипы таблицы, представления, вложения и выбора, что и поле ввода чата; **Удалить** удаляет элемент, **...** → **Редактировать сообщение** возвращает его в поле ввода, а для элемента только с текстом также доступно **Направить**, чтобы передать его текст текущему запуску вместо ожидания.
@@ -129,9 +129,9 @@ description: Взаимодействуйте с данными на естес
### Память
-Память хранит информацию, которую вы явно просите Cuppy запомнить. Память ограничена пользователем и Базой: у каждого пользователя в каждой Базе есть независимый контекст памяти, и память, сохраненная в другой Базе, не появится автоматически в текущей.
+Память хранит информацию, которую вы явно просите Cuppy запомнить. Память ограничена пользователем и Проектом: у каждого пользователя в каждом Проекте есть независимый контекст памяти, и память, сохраненная в другом Проекте, не появится автоматически в текущем.
-- Сохранение памяти в текущей Базе
+- Сохранение памяти в текущем Проекте
Скажите в беседе, что Cuppy должен запомнить:
@@ -139,12 +139,12 @@ description: Взаимодействуйте с данными на естес
Пожалуйста, запомни xxx.
```
-- Повторное использование памяти из другой Базы
+- Повторное использование памяти из другого Проекта
-Попросите Cuppy прочитать другую Базу и сохранить соответствующие части в текущей Базе:
+Попросите Cuppy прочитать другой Проект и сохранить соответствующие части в текущем Проекте:
```text
-Cuppy, пожалуйста, прочитай память для Базы с ID bsexxxxxxxxxxxx и сохрани соответствующую память в этой текущей Базе.
+Cuppy, пожалуйста, прочитай память для Проекта с ID bsexxxxxxxxxxxx и сохрани соответствующую память в текущем Проекте.
```
### Работа с длительными задачами
@@ -228,8 +228,8 @@ Cuppy, пожалуйста, прочитай память для Базы с ID
Введите `@` в поле ввода и выберите узел, на который должен ссылаться ИИ-чат. Для выборок в представлении «Сетка» также можно выбрать строки, столбцы, одну ячейку или диапазон ячеек, а затем использовать **Добавить в чат** в контекстном меню.
-
- Да. ИИ не ограничен Базой, к которой относится чат: он может искать другие Базы, к которым у вас есть доступ, и работать в них. Укажите Базу в запросе, например «сравни эту таблицу с таблицей заказов в Базе продаж». `@` выводит только узлы текущей Базы, а всё, что вы явно не направили в другое место, по-прежнему происходит в собственной Базе чата.
+
+ Да. ИИ не ограничен Проектом, к которому относится чат: он может искать другие Проекты, к которым у вас есть доступ, и работать в них. Укажите Проект в запросе, например «сравни эту таблицу с таблицей заказов в Проекте продаж». `@` выводит только узлы текущего Проекта, а всё, что вы явно не направили в другое место, по-прежнему происходит в собственном Проекте чата.
@@ -239,8 +239,8 @@ Cuppy, пожалуйста, прочитай память для Базы с ID
По умолчанию нет. Только вы можете открывать собственные артефакты. Включите **Включить общий доступ** в просмотрщике и отправьте ссылку, выбрав **Участники пространства**, если артефакт должен оставаться внутри пространства.
-
- Нет. Память ограничена пользователем и Базой. Если хотите повторно использовать память из другой Базы, попросите Cuppy прочитать память этой Базы и сохранить соответствующие части в текущей Базе.
+
+ Нет. Память ограничена пользователем и Проектом. Если хотите повторно использовать память из другого Проекта, попросите Cuppy прочитать память этого Проекта и сохранить соответствующие части в текущем Проекте.
@@ -268,11 +268,11 @@ Cuppy, пожалуйста, прочитай память для Базы с ID
- Откройте меню **+** и выберите **Навыки**, чтобы импортировать навыки или управлять ими, либо введите `/` в поле ввода, чтобы выбрать включенный навык. При импорте выберите, кто может использовать навык: «личный» для собственных чатов, «база», когда он нужен соавторам в той же Базе, и «пространство», когда он нужен всем в пространстве. Пользователи, которые могут управлять Базой, могут добавлять навыки Базы, а владельцы и создатели пространства могут добавлять навыки Пространства. Если ИИ-чат представляет файл `.skill`, используйте **Установить** на карточке файла, чтобы добавить его.
+ Откройте меню **+** и выберите **Навыки**, чтобы импортировать навыки или управлять ими, либо введите `/` в поле ввода, чтобы выбрать включенный навык. При импорте выберите, кто может использовать навык: «личный» для собственных чатов, «проект», когда он нужен соавторам в том же Проекте, и «пространство», когда он нужен всем в пространстве. Пользователи, которые могут управлять Проектом, могут добавлять навыки Проекта, а владельцы и создатели пространства могут добавлять навыки Пространства. Если ИИ-чат представляет файл `.skill`, используйте **Установить** на карточке файла, чтобы добавить его.
- Одновременно действует только одна версия, и общая версия команды имеет приоритет над личной копией: навык Базы имеет приоритет над навыком Пространства, а навык Пространства — над личным навыком. В беседе приложения или бота сначала применяется навык, добавленный для этого приложения или бота. Чтобы перевести всех на новую версию, обновите копию в Базе или Пространстве.
+ Одновременно действует только одна версия, и общая версия команды имеет приоритет над личной копией: навык Проекта имеет приоритет над навыком Пространства, а навык Пространства — над личным навыком. В беседе приложения или бота сначала применяется навык, добавленный для этого приложения или бота. Чтобы перевести всех на новую версию, обновите копию в Проекте или Пространстве.
diff --git a/ru/basic/ai/app-builder.mdx b/ru/basic/ai/app-builder.mdx
index 336d962e..659b04c2 100644
--- a/ru/basic/ai/app-builder.mdx
+++ b/ru/basic/ai/app-builder.mdx
@@ -5,21 +5,21 @@ description: Превращайте свои данные в пользоват
Доступно на всех тарифах Cloud; для самостоятельного размещения требуется Business или выше.
-Конструктор приложений Teable позволяет превращать ваши Базы данных в полнофункциональные персонализированные веб-приложения без написания кода. Сочетая возможности структуры ваших данных и дизайна на основе ИИ, вы можете за считаные минуты запускать внутренние инструменты, клиентские порталы и панели мониторинга данных.
+Конструктор приложений Teable позволяет превращать ваши Проекты в полнофункциональные персонализированные веб-приложения без написания кода. Сочетая возможности структуры ваших данных и дизайна на основе ИИ, вы можете за считаные минуты запускать внутренние инструменты, клиентские порталы и панели мониторинга данных.
## Обзор
Конструктор приложений использует процесс «Запрос в приложение». Вы описываете желаемый результат, а ИИ создаёт для вас структуру, страницы и логику приложения. Затем вы можете точно настроить каждую деталь с помощью визуального редактора или кода.
-Используйте Конструктор приложений для создания пользовательских интерфейсов и самостоятельных приложений. Для интерактивного анализа данных и разовых вопросов внутри базы данных используйте [AI Chat](/ru/basic/ai/ai-chat).
+Используйте Конструктор приложений для создания пользовательских интерфейсов и самостоятельных приложений. Для интерактивного анализа данных и разовых вопросов внутри проекта используйте [AI Chat](/ru/basic/ai/ai-chat).
## Создание приложения
Существует два основных способа создать приложение:
-1. **Из Базы**: в любой Базе нажмите «Создать приложение», чтобы сгенерировать приложение, связанное с текущими данными.
+1. **Из Проекта**: в любом Проекте нажмите «Создать приложение», чтобы сгенерировать приложение, связанное с текущими данными.
2. **Из чата**: откройте AI Chat и скажите «Создай CRM-приложение для этой Таблицы клиентов».
## Интерфейс редактора приложений
@@ -39,7 +39,7 @@ description: Превращайте свои данные в пользоват
- **Редактирование на естественном языке**: опишите изменения, например *«Сделай заголовок синим»* или *«Добавь форму отправки для новых Записей»*.
- **Автоматическая маршрутизация**: ИИ понимает, на какой компонент или страницу вы ссылаетесь, и изменяет их напрямую.
- **Интеграции**: когда задача приложения требует доступа к сторонней учётной записи, Конструктор приложений может показать в панели чата карточку, например **Подключить Slack**. Нажмите **Подключить**, чтобы авторизоваться через OAuth. Нажмите **Пропустить**, чтобы отменить авторизацию; ИИ продолжит работу с частями, которые может выполнить без этого подключения.
-- **Навыки**: откройте меню **+** и выберите **Навыки**, чтобы управлять навыками для этого диалога приложения. Добавленный здесь навык доступен только текущему приложению, также здесь можно использовать навыки, общие с Базой и Пространством приложения. Введите `/` в поле ввода, чтобы выбрать включённый навык.
+- **Навыки**: откройте меню **+** и выберите **Навыки**, чтобы управлять навыками для этого диалога приложения. Добавленный здесь навык доступен только текущему приложению, также здесь можно использовать навыки, общие с Проектом и Пространством приложения. Введите `/` в поле ввода, чтобы выбрать включённый навык.
- **Управление файлами**: откройте **+** → **Ещё** → **Управление файлами**, чтобы просмотреть файлы в песочнице приложения. Используйте этот раздел для предварительного просмотра поддерживаемых файлов, загрузки созданных файлов или удаления ненужных файлов и папок.
- **Очистить беседу**: если текущая беседа ушла в сторону, нажмите **Очистить чат** в правом нижнем углу панели, чтобы начать новый сеанс. Это очистит историю чата текущей беседы, но не удалит само приложение. При первом использовании появится подтверждение, где можно выбрать, не показывать его в следующий раз.
diff --git a/ru/basic/ai/connect-everything/migrate-airtable.mdx b/ru/basic/ai/connect-everything/migrate-airtable.mdx
index d258b5ab..d02b8d5c 100644
--- a/ru/basic/ai/connect-everything/migrate-airtable.mdx
+++ b/ru/basic/ai/connect-everything/migrate-airtable.mdx
@@ -13,7 +13,7 @@ keywords:
## Начните перенос
1. Создайте [персональный токен доступа Airtable](https://airtable.com/create/tokens) с доступом к Базам, которые хотите перенести.
-2. Откройте целевую Базу Teable и запустите ИИ-чат.
+2. Откройте целевый Проект Teable и запустите ИИ-чат.
3. Введите `/`, выберите **Подключение всего** и укажите токен.
4. Попросите ИИ Teable перенести Базу Airtable, затем проверьте результат.
diff --git a/ru/basic/ai/connect-everything/migrate-baserow.mdx b/ru/basic/ai/connect-everything/migrate-baserow.mdx
index ead15980..7455ab8a 100644
--- a/ru/basic/ai/connect-everything/migrate-baserow.mdx
+++ b/ru/basic/ai/connect-everything/migrate-baserow.mdx
@@ -13,7 +13,7 @@ keywords:
## Начните перенос
1. Скопируйте URL экземпляра Baserow и создайте [токен базы данных Baserow](https://baserow.io/user-docs/personal-api-tokens) с доступом на чтение к исходным Таблицам.
-2. Откройте целевую Базу Teable и запустите ИИ-чат.
+2. Откройте целевый Проект Teable и запустите ИИ-чат.
3. Введите `/`, выберите **Подключение всего** и укажите URL экземпляра и токен базы данных.
4. Попросите ИИ Teable перенести базу данных Baserow, затем проверьте результат.
diff --git a/ru/basic/ai/connect-everything/migrate-clickup.mdx b/ru/basic/ai/connect-everything/migrate-clickup.mdx
index 77076d86..72633671 100644
--- a/ru/basic/ai/connect-everything/migrate-clickup.mdx
+++ b/ru/basic/ai/connect-everything/migrate-clickup.mdx
@@ -16,7 +16,7 @@ keywords:
## Начните перенос
1. В ClickUp откройте **Настройки → Приложения**, затем скопируйте персональный токен API. См. [руководство ClickUp по аутентификации](https://developer.clickup.com/docs/authentication).
-2. Откройте целевую Базу Teable и запустите ИИ-чат.
+2. Откройте целевый Проект Teable и запустите ИИ-чат.
3. Введите `/`, выберите **Подключение всего** и укажите персональный токен API.
4. Попросите ИИ Teable перенести доступные рабочие пространства ClickUp и создать Представления проектов, панели мониторинга и Автоматизации, необходимые вашей команде.
diff --git a/ru/basic/ai/connect-everything/migrate-jira.mdx b/ru/basic/ai/connect-everything/migrate-jira.mdx
index d539855b..33d339a2 100644
--- a/ru/basic/ai/connect-everything/migrate-jira.mdx
+++ b/ru/basic/ai/connect-everything/migrate-jira.mdx
@@ -16,7 +16,7 @@ keywords:
## Начните перенос
1. Создайте [токен API Atlassian](https://id.atlassian.com/manage-profile/security/api-tokens) для учётной записи с доступом к проектам Jira, которые хотите перенести. См. [базовую аутентификацию Atlassian для REST API](https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/).
-2. Откройте целевую Базу Teable и запустите ИИ-чат.
+2. Откройте целевый Проект Teable и запустите ИИ-чат.
3. Введите `/`, выберите **Подключение всего** и укажите URL сайта Jira Cloud, адрес электронной почты учётной записи и токен API.
4. Попросите ИИ Teable перенести доступные проекты Jira и создать Представления проектов, панели мониторинга и Автоматизации, необходимые вашей команде.
diff --git a/ru/basic/ai/connect-everything/migrate-monday.mdx b/ru/basic/ai/connect-everything/migrate-monday.mdx
index 24f00b1d..27b4eb26 100644
--- a/ru/basic/ai/connect-everything/migrate-monday.mdx
+++ b/ru/basic/ai/connect-everything/migrate-monday.mdx
@@ -16,7 +16,7 @@ keywords:
## Начните перенос
1. В monday.com откройте меню профиля, выберите **Разработчики** и скопируйте персональный токен API. См. [руководство monday.com по аутентификации API](https://developer.monday.com/api-reference/docs/authentication).
-2. Откройте целевую Базу Teable и запустите ИИ-чат.
+2. Откройте целевый Проект Teable и запустите ИИ-чат.
3. Введите `/`, выберите **Подключение всего** и укажите персональный токен API.
4. Попросите ИИ Teable перенести доступные рабочие пространства monday.com и создать Представления проектов, панели мониторинга и Автоматизации, необходимые вашей команде.
diff --git a/ru/basic/ai/connect-everything/migrate-nocodb.mdx b/ru/basic/ai/connect-everything/migrate-nocodb.mdx
index e52db234..4c1a5614 100644
--- a/ru/basic/ai/connect-everything/migrate-nocodb.mdx
+++ b/ru/basic/ai/connect-everything/migrate-nocodb.mdx
@@ -13,7 +13,7 @@ keywords:
## Начните перенос
1. Скопируйте URL экземпляра NocoDB и создайте [токен API NocoDB](https://nocodb.com/docs/product-docs/account-settings/api-tokens) с доступом к исходной Базе.
-2. Откройте целевую Базу Teable и запустите ИИ-чат.
+2. Откройте целевый Проект Teable и запустите ИИ-чат.
3. Введите `/`, выберите **Подключение всего** и укажите URL экземпляра и токен API.
4. Попросите ИИ Teable перенести Базу NocoDB, затем проверьте результат.
diff --git a/ru/basic/ai/connect-everything/migrate-smartsheet.mdx b/ru/basic/ai/connect-everything/migrate-smartsheet.mdx
index a4172bdd..66204614 100644
--- a/ru/basic/ai/connect-everything/migrate-smartsheet.mdx
+++ b/ru/basic/ai/connect-everything/migrate-smartsheet.mdx
@@ -16,7 +16,7 @@ keywords:
## Начните перенос
1. В Smartsheet откройте **Учётная запись → Личные настройки → Доступ к API**, затем создайте токен доступа. См. [руководство Smartsheet по началу работы с API](https://developers.smartsheet.com/api/smartsheet/guides/getting-started).
-2. Откройте целевую Базу Teable и запустите ИИ-чат.
+2. Откройте целевый Проект Teable и запустите ИИ-чат.
3. Введите `/`, выберите **Подключение всего** и укажите токен доступа и среду учётной записи: standard, Regions Europe или Gov.
4. Попросите ИИ Teable перенести доступные рабочие пространства Smartsheet и создать Представления проектов, панели мониторинга и Автоматизации, необходимые вашей команде.
diff --git a/ru/basic/ai/connect-everything/migrate-smartsuite.mdx b/ru/basic/ai/connect-everything/migrate-smartsuite.mdx
index 5b771d17..9d675ffe 100644
--- a/ru/basic/ai/connect-everything/migrate-smartsuite.mdx
+++ b/ru/basic/ai/connect-everything/migrate-smartsuite.mdx
@@ -13,7 +13,7 @@ keywords:
## Начните перенос
1. Получите [ключ API SmartSuite и идентификатор рабочего пространства](https://help.smartsuite.com/en/articles/6096587-retrieving-your-api-key-and-workspace-id).
-2. Откройте целевую Базу Teable и запустите ИИ-чат.
+2. Откройте целевый Проект Teable и запустите ИИ-чат.
3. Введите `/`, выберите **Подключение всего** и укажите ключ API и идентификатор рабочего пространства.
4. Попросите ИИ Teable перенести решение SmartSuite, затем проверьте результат.
diff --git a/ru/basic/ai/overview.mdx b/ru/basic/ai/overview.mdx
index cc8fdf06..fd818020 100644
--- a/ru/basic/ai/overview.mdx
+++ b/ru/basic/ai/overview.mdx
@@ -45,7 +45,7 @@ Teable интегрирует мощные возможности ИИ во вс
1. **Включите ИИ** (только для самостоятельного развёртывания) — Teable Cloud поставляется со встроенным готовым к использованию ИИ. Пользователям самостоятельного развёртывания сначала следует завершить [настройку ИИ](/ru/basic/admin-panel/ai-setting). Если вы хотите подключить собственные модели, перейдите к разделу [Пользовательская модель ИИ](/ru/basic/ai/custom-model).
2. **Используйте ИИ-чат** — задавайте вопросы о своих данных или создавайте диаграммы
-3. **Создавайте приложения** — превратите свою Базу в веб-приложение с помощью простого запроса
+3. **Создавайте приложения** — превратите свой Проект в веб-приложение с помощью простого запроса
4. **Создавайте ИИ-поля** — добавляйте поля на базе ИИ для автоматической обработки данных
5. **Создавайте автоматизации** — используйте действия «Генерация ИИ» и «Запуск скрипта» в своих рабочих процессах
diff --git a/ru/basic/ai/teable-skill.mdx b/ru/basic/ai/teable-skill.mdx
index 54113837..d2539c91 100644
--- a/ru/basic/ai/teable-skill.mdx
+++ b/ru/basic/ai/teable-skill.mdx
@@ -24,7 +24,7 @@ npx skills add https://github.com/teableio/agent-skills
```text Простые начальные запросы wrap
-Создайте простую CRM-таблицу в <База> {вставьте URL Базы}.
+Создайте простую CRM-таблицу в <Проект> {вставьте URL Проекта}.
```
```text Локальные файлы → Teable wrap
diff --git a/ru/basic/authority-matrix.mdx b/ru/basic/authority-matrix.mdx
index 08ec1e73..b1d42290 100644
--- a/ru/basic/authority-matrix.mdx
+++ b/ru/basic/authority-matrix.mdx
@@ -1,13 +1,13 @@
---
title: "Обзор"
-description: "Настройте области доступа для разных команд в одной базе, чтобы участники видели, редактировали или экспортировали только нужные им данные."
+description: "Настройте области доступа для разных команд в одном проекте, чтобы участники видели, редактировали или экспортировали только нужные им данные."
---
{/* mintlify-resync: 2026-05-28 */}
Доступно на тарифе Business и выше
-Когда отделы продаж, финансов, операционной деятельности и руководство используют одну Базу,
-полномочия определяют, кто может войти в Базу, какие данные он может видеть или редактировать,
+Когда отделы продаж, финансов, операционной деятельности и руководство используют один Проект,
+полномочия определяют, кто может войти в Проект, какие данные он может видеть или редактировать,
а также может ли он импортировать или экспортировать данные. Матрица полномочий помогает командам
хранить данные в одном месте, разграничивая доступ по зонам ответственности.
@@ -24,7 +24,7 @@ description: "Настройте области доступа для разны
| Доступ на уровне отдела | Отдел продаж может вести записи клиентов, а финансовый отдел видит только поля выставления счетов. |
| Записи по исполнителю | Торговые представители могут просматривать и обновлять только назначенные им Записи. |
| Ограниченный ввод данных | Участники могут создавать новые Записи, не редактируя и не удаляя существующие. |
-| Конфиденциальные Поля в общей Базе | Участники могут просматривать записи заказов, не видя поля оплаты или стоимости. |
+| Конфиденциальные Поля в общем Проекте | Участники могут просматривать записи заказов, не видя поля оплаты или стоимости. |
| Управляемые приложения и рабочие процессы | Роли могут открывать выбранные приложения или рабочие процессы, тогда как неавторизованные узлы остаются скрытыми. |
## Как работают полномочия
@@ -45,7 +45,7 @@ description: "Настройте области доступа для разны
Используйте `Добавить роль`, чтобы создать пользовательскую роль. На странице сведений
о роли назначьте соавторов, добавьте краткое описание и настройте доступ для каждого
-узла в Базе:
+узла в Проекте:
Сведения об основных уровнях полномочий Пространства и Базы см. в разделе [Полномочия для совместной работы](/ru/basic/space/space-permission).
+Сведения об основных уровнях полномочий Пространства и Проекта см. в разделе [Полномочия для совместной работы](/ru/basic/space/space-permission).
diff --git a/ru/basic/authority-matrix/authority-matrix-practical-guide.mdx b/ru/basic/authority-matrix/authority-matrix-practical-guide.mdx
index e719e764..d1afd4a8 100644
--- a/ru/basic/authority-matrix/authority-matrix-practical-guide.mdx
+++ b/ru/basic/authority-matrix/authority-matrix-practical-guide.mdx
@@ -4,9 +4,9 @@ description: "Настройте роли Матрицы полномочий д
---
{/* mintlify-resync: 2026-05-28 */}
-В этом руководстве используется База отдела продаж с тремя Таблицами: `Клиенты`, `Заказы на продажу`
+В этом руководстве используется Проект отдела продаж с тремя Таблицами: `Клиенты`, `Заказы на продажу`
и `Товары`. Цель — позволить каждой роли работать с нужными ей данными, не открывая
-доступ ко всей Базе.
+доступ ко всему Проекту.
| Роль | Цель доступа |
| --- | --- |
@@ -26,7 +26,7 @@ description: "Настройте роли Матрицы полномочий д
- Откройте страницу Матрицы полномочий в Базе и включите главный переключатель. Пользователь,
+ Откройте страницу Матрицы полномочий в Проекте и включите главный переключатель. Пользователь,
который ее включает, добавляется как администратор.
diff --git a/ru/basic/automation.mdx b/ru/basic/automation.mdx
index e687141a..3349d023 100644
--- a/ru/basic/automation.mdx
+++ b/ru/basic/automation.mdx
@@ -65,8 +65,8 @@ description: "Создавайте рабочие процессы автома
| Элемент | Лимит |
|---|---|
-| Скорость отправки писем | 5 / секунда / база |
-| Скорость получения вебхуков | 50 / секунда / база, 2 / секунда / рабочий процесс |
+| Скорость отправки писем | 5 / секунда / проект |
+| Скорость получения вебхуков | 50 / секунда / проект, 2 / секунда / рабочий процесс |
| Размер полезной нагрузки вебхука | 4 MB |
| Квота запусков и хранение истории | Зависит от плана |
@@ -82,7 +82,7 @@ description: "Создавайте рабочие процессы автома
Teable Cloud также может отправлять критические уведомления о необычном использовании, например при значительном ежедневном увеличении или внезапном всплеске за короткое время. Система использует недавние ежедневные и почасовые модели запусков, а точные пороги могут меняться.
- Уведомление открывает **Настройки пространства** → **Оплата**. Когда информация доступна, в нём отображается, какой рабочий процесс и какая база внесли наибольший вклад в число запусков. Напоминания о квоте основаны на запусках, учитываемых в лимите вашего плана; проверки необычного использования также могут учитывать недавние запуски со статусом **успешно**, **неудачно** или **ожидает**.
+ Уведомление открывает **Настройки пространства** → **Оплата**. Когда информация доступна, в нём отображается, какой рабочий процесс и какой проект внесли наибольший вклад в число запусков. Напоминания о квоте основаны на запусках, учитываемых в лимите вашего плана; проверки необычного использования также могут учитывать недавние запуски со статусом **успешно**, **неудачно** или **ожидает**.
Если использование ожидаемо, рассмотрите покупку дополнительной квоты автоматизации или изменение плана. Если оно неожиданно, проверьте основной рабочий процесс и измените либо приостановите связанную автоматизацию.
diff --git a/ru/basic/automation/actions/communication/send-email-overview.mdx b/ru/basic/automation/actions/communication/send-email-overview.mdx
index 90ad0e6c..df8d8ac6 100644
--- a/ru/basic/automation/actions/communication/send-email-overview.mdx
+++ b/ru/basic/automation/actions/communication/send-email-overview.mdx
@@ -37,7 +37,7 @@ description: "Отправляйте настраиваемые письма и
\* Требуется указать хотя бы одно из полей **Кому** или **Скрытая копия**.
-**Ограничение скорости:** 5 писем в секунду на Базу.
+**Ограничение скорости:** 5 писем в секунду на Проект.
## Как настроить
diff --git a/ru/basic/automation/actions/records/create-record.mdx b/ru/basic/automation/actions/records/create-record.mdx
index 154e6013..ce5743ea 100644
--- a/ru/basic/automation/actions/records/create-record.mdx
+++ b/ru/basic/automation/actions/records/create-record.mdx
@@ -30,7 +30,7 @@ description: "Создавайте новую Запись в любой Таб
## Как настроить
1. Добавьте действие **Создать Запись** в рабочий процесс.
-2. Выберите **Таблицу**, в которой нужно создать Запись. По умолчанию это Таблица в той же Базе, но с помощью [межбазового доступа](/ru/basic/automation/actions/records/cross-base) можно выбрать Таблицу в другой Базе.
+2. Выберите **Таблицу**, в которой нужно создать Запись. По умолчанию это Таблица в том же Проекте, но с помощью [межпроектного доступа](/ru/basic/automation/actions/records/cross-base) можно выбрать Таблицу в другом Проекте.
3. В области сопоставления Полей отображаются все Поля целевой Таблицы. Для каждого Поля, которое нужно заполнить:
- **Постоянное значение:** введите значение непосредственно в Поле (например, «Новая» для Поля «Статус»).
- **Динамическое значение:** нажмите кнопку **+** рядом с Полем, чтобы вставить переменную из предыдущего шага. Например, вставьте Поле «Имя» из триггера, чтобы скопировать имя из Записи, запустившей процесс.
@@ -68,11 +68,11 @@ description: "Создавайте новую Запись в любой Таб
- Можно массово создавать Записи, объединив это действие с [циклом (пакетной обработкой)](../logic/loop-run). Например, получить 50 Записей из одной Таблицы и создать 50 соответствующих Записей в другой.
- Несопоставленные Поля получат значения Таблицы по умолчанию (если они есть) или останутся пустыми.
- Поля связанных Записей ожидают идентификаторы Записей, а не отображаемые значения. Чтобы создать связь с Записью, передавайте идентификатор Записи, а не её имя.
-- Используйте [межбазовый доступ](/ru/basic/automation/actions/records/cross-base), если целевая Таблица находится в другой Базе, не содержащей Автоматизацию.
+- Используйте [межпроектный доступ](/ru/basic/automation/actions/records/cross-base), если целевая Таблица находится в другом Проекте, не содержащем Автоматизацию.
## Связанные материалы
- [Обновить Запись](/ru/basic/automation/actions/records/update-record) — изменение существующих Записей вместо создания новых
- [Получить Записи](/ru/basic/automation/actions/records/get-records) — получение Записей для использования в качестве входных данных при создании новых
-- [Межбазовый доступ](/ru/basic/automation/actions/records/cross-base) — создание Записей в Таблицах за пределами текущей Базы
+- [Межпроектный доступ](/ru/basic/automation/actions/records/cross-base) — создание Записей в Таблицах за пределами текущего Проекта
- [Цикл (пакетная обработка)](../logic/loop-run) — создание нескольких Записей за один шаг действия
diff --git a/ru/basic/automation/actions/records/cross-base.mdx b/ru/basic/automation/actions/records/cross-base.mdx
index e3d98281..741676df 100644
--- a/ru/basic/automation/actions/records/cross-base.mdx
+++ b/ru/basic/automation/actions/records/cross-base.mdx
@@ -1,6 +1,6 @@
---
-title: "Межбазовый доступ"
-description: "Читайте и записывайте данные из разных Баз в одном рабочем процессе"
+title: "Межпроектный доступ"
+description: "Читайте и записывайте данные из разных Проектов в одном рабочем процессе"
---
{/* mintlify-resync: 2026-05-26 */}
@@ -10,74 +10,74 @@ description: "Читайте и записывайте данные из раз
Обратите внимание: если вы добавите действия вручную, ИИ не сможет распознать или изменить их позднее.
-По умолчанию действия Автоматизации работают с Таблицами в собственной Базе рабочего процесса. Межбазовый доступ позволяет рабочему процессу читать данные из другой Базы и записывать их туда. Используйте его для рабочих процессов, охватывающих несколько отделов, проектов или наборов данных.
+По умолчанию действия Автоматизации работают с Таблицами в собственном Проекте рабочего процесса. Межпроектный доступ позволяет рабочему процессу читать данные из другого Проекта и записывать их туда. Используйте его для рабочих процессов, охватывающих несколько отделов, проектов или наборов данных.
-Например, Автоматизация в Базе продаж может создать Запись о выполнении заказа в отдельной операционной Базе, а рабочий процесс отчётности — собрать данные из нескольких Баз проектов в единую сводку.
+Например, Автоматизация в Проекте продаж может создать Запись о выполнении заказа в отдельном операционном Проекте, а рабочий процесс отчётности — собрать данные из нескольких Проектов в единую сводку.
## Поддерживаемые действия
-| Действие | Поддержка межбазового доступа |
+| Действие | Поддержка межпроектного доступа |
|---|---|
| Создать Запись | Да |
| Обновить Запись | Да |
| Получить Записи | Да |
-Это три действия, ориентированные на Записи. Другим действиям («Отправить письмо», «HTTP-запрос» и т. д.) межбазовый доступ не нужен, поскольку они не обращаются к определённой Таблице.
+Это три действия, ориентированные на Записи. Другим действиям («Отправить письмо», «HTTP-запрос» и т. д.) межпроектный доступ не нужен, поскольку они не обращаются к определённой Таблице.
## Как настроить
1. Откройте поддерживаемое действие («Создать Запись», «Обновить Запись» или «Получить Записи») в рабочем процессе.
-2. Рядом со средством выбора **Таблицы** нажмите **Межбазовый доступ**.
-3. Откроется панель со всеми Пространствами и Базами, доступными вашей учётной записи. Выберите целевое **Пространство**, а затем целевую **Базу**.
-4. Выберите **Таблицу** в этой Базе. Если действие это поддерживает, можно также выбрать определённое **Представление**.
-5. Сопоставьте Поля и настройте действие как обычно. Теперь в списке Полей отображаются Поля целевой Таблицы, а не текущей Базы.
+2. Рядом со средством выбора **Таблицы** нажмите **Межпроектный доступ**.
+3. Откроется панель со всеми Пространствами и Проектами, доступными вашей учётной записи. Выберите целевое **Пространство**, а затем целевой **Проект**.
+4. Выберите **Таблицу** в этом Проекте. Если действие это поддерживает, можно также выбрать определённое **Представление**.
+5. Сопоставьте Поля и настройте действие как обычно. Теперь в списке Полей отображаются Поля целевой Таблицы, а не текущего Проекта.
6. Сохраните действие.
## Конкретный пример: от продаж к выполнению заказа
-Представьте, что у вас есть две Базы:
+Представьте, что у вас есть два Проекта:
-- **База продаж** — содержит Таблицу «Сделки», где отдел продаж отслеживает заключённые сделки.
-- **Операционная База** — содержит Таблицу «Выполнение заказов», где операционный отдел управляет доставкой.
+- **Проект продаж** — содержит Таблицу «Сделки», где отдел продаж отслеживает заключённые сделки.
+- **Операционный Проект** — содержит Таблицу «Выполнение заказов», где операционный отдел управляет доставкой.
Вы хотите автоматически создавать Запись о выполнении заказа при заключении сделки:
-1. **Триггер:** В Базе продаж используйте «Когда Запись соответствует условиям» с фильтром: `Этап` равен `Успешно закрыто`.
-2. **Действие:** «Создать Запись» с межбазовым доступом, направленным на Таблицу «Выполнение заказов» в операционной Базе.
+1. **Триггер:** В Проекте продаж используйте «Когда Запись соответствует условиям» с фильтром: `Этап` равен `Успешно закрыто`.
+2. **Действие:** «Создать Запись» с межпроектным доступом, направленным на Таблицу «Выполнение заказов» в операционном Проекте.
3. **Сопоставление Полей:** Сопоставьте имя клиента, продукт, количество и адрес доставки из сделки с соответствующими Полями Таблицы «Выполнение заказов».
-Теперь при каждом заключении сделки в операционной Базе автоматически создаётся Запись о выполнении заказа — передавать её вручную не требуется.
+Теперь при каждом заключении сделки в операционном Проекте автоматически создаётся Запись о выполнении заказа — передавать её вручную не требуется.
## Модель разрешений
-Когда вы создаёте, изменяете или применяете обновления рабочего процесса, Teable проверяет каждое действие с межбазовым доступом с учётом разрешений текущего редактора:
+Когда вы создаёте, изменяете или применяете обновления рабочего процесса, Teable проверяет каждое действие с межпроектным доступом с учётом разрешений текущего редактора:
-| Действие | Необходимое разрешение в целевой Базе |
+| Действие | Необходимое разрешение в целевом Проекте |
|---|---|
| Получить Записи | Чтение Полей и Записей |
| Создать Запись | Чтение Полей и Записей, а также создание Записей |
| Обновить Запись | Чтение Полей и Записей, а также обновление Записей |
-Активные рабочие процессы используют для целевой Базы идентификатор среды выполнения Автоматизации Teable. Записи, созданные или обновлённые действием с межбазовым доступом, отображаются как созданные **Роботом Автоматизации** в метаданных Записи и интерфейсах аудита.
+Активные рабочие процессы используют для целевого Проекта идентификатор среды выполнения Автоматизации Teable. Записи, созданные или обновлённые действием с межпроектным доступом, отображаются как созданные **Роботом Автоматизации** в метаданных Записи и интерфейсах аудита.
### Что происходит при изменении доступа
-Если у текущего редактора нет необходимого разрешения в целевой Базе, Teable не позволит ему добавить или изменить действия с межбазовым доступом, направленные на эту Базу. Если черновик уже содержит недоступные редактору действия с межбазовым доступом, Teable также не позволит применить этот черновик. Уже активная версия продолжит работать; Teable снова проверит разрешения при следующем изменении или применении рабочего процесса.
+Если у текущего редактора нет необходимого разрешения в целевом Проекте, Teable не позволит ему добавить или изменить действия с межпроектным доступом, направленные на этот Проект. Если черновик уже содержит недоступные редактору действия с межпроектным доступом, Teable также не позволит применить этот черновик. Уже активная версия продолжит работать; Teable снова проверит разрешения при следующем изменении или применении рабочего процесса.
Чтобы устранить ошибку разрешений при изменении или применении рабочего процесса:
-1. Попросите пользователя с доступом к обеим Базам изменить и применить рабочий процесс.
-2. Или восстановите необходимые разрешения в целевой Базе, а затем снова примените рабочий процесс.
+1. Попросите пользователя с доступом к обоим Проектам изменить и применить рабочий процесс.
+2. Или восстановите необходимые разрешения в целевом Проекте, а затем снова примените рабочий процесс.
## Советы
-- Межбазовый доступ позволяет обращаться к Базам в разных **Пространствах**. У редактора, настраивающего или применяющего рабочий процесс, должны быть необходимые разрешения в целевой Базе.
-- При сопоставлении Полей между Базами их типы должны быть совместимы. Например, текстовое Поле нельзя сопоставить с Полем вложения.
-- Если изменить структуру целевой Базы (переименовать Таблицы, удалить Поля), использующие их действия с межбазовым доступом перестанут работать. После структурных изменений обновите рабочий процесс.
-- Для сложных межбазовых рабочих процессов можно сосредоточить Автоматизации в одной центральной Базе, чтобы упростить их организацию.
+- Межпроектный доступ позволяет обращаться к Проектам в разных **Пространствах**. У редактора, настраивающего или применяющего рабочий процесс, должны быть необходимые разрешения в целевом Проекте.
+- При сопоставлении Полей между Проектами их типы должны быть совместимы. Например, текстовое Поле нельзя сопоставить с Полем вложения.
+- Если изменить структуру целевого Проекта (переименовать Таблицы, удалить Поля), использующие их действия с межпроектным доступом перестанут работать. После структурных изменений обновите рабочий процесс.
+- Для сложных межпроектных рабочих процессов можно сосредоточить Автоматизации в одном центральном Проекте, чтобы упростить их организацию.
## Связанные материалы
-- [Создать Запись](/ru/basic/automation/actions/records/create-record) — создание Записей в текущей или другой Базе
-- [Обновить Запись](/ru/basic/automation/actions/records/update-record) — обновление Записей в текущей или другой Базе
-- [Получить Записи](/ru/basic/automation/actions/records/get-records) — получение Записей из текущей или другой Базы
+- [Создать Запись](/ru/basic/automation/actions/records/create-record) — создание Записей в текущем или другом Проекте
+- [Обновить Запись](/ru/basic/automation/actions/records/update-record) — обновление Записей в текущем или другом Проекте
+- [Получить Записи](/ru/basic/automation/actions/records/get-records) — получение Записей из текущего или другого Проекта
diff --git a/ru/basic/automation/actions/records/get-records.mdx b/ru/basic/automation/actions/records/get-records.mdx
index c4b80cd1..686aba12 100644
--- a/ru/basic/automation/actions/records/get-records.mdx
+++ b/ru/basic/automation/actions/records/get-records.mdx
@@ -33,7 +33,7 @@ description: "Получайте Записи из Таблицы с допол
## Как настроить
1. Добавьте действие **Получить Записи** в рабочий процесс.
-2. Выберите **Таблицу**, к которой нужно выполнить запрос. Если Таблица находится в другой Базе, используйте [межбазовый доступ](/ru/basic/automation/actions/records/cross-base).
+2. Выберите **Таблицу**, к которой нужно выполнить запрос. Если Таблица находится в другом Проекте, используйте [межпроектный доступ](/ru/basic/automation/actions/records/cross-base).
3. (Необязательно) Выберите **Представление**, чтобы унаследовать настройки его фильтра, сортировки и видимости Полей.
4. (Необязательно) Добавьте условия **Фильтра**, чтобы сузить результаты. Например, `Статус` равен `Активно`, а `Дата выполнения` — раньше сегодняшней.
5. (Необязательно) Задайте **Skip** и **Take** для пагинации. Например, Skip 0 и Take 100, чтобы получить первые 100 Записей.
@@ -80,11 +80,11 @@ description: "Получайте Записи из Таблицы с допол
- Действие «Получить Записи» не изменяет данные — оно доступно только для чтения.
- Если запрос не вернул ни одной Записи, последующие шаги, обращающиеся к результатам, получат пустой массив. Убедитесь, что рабочий процесс корректно обрабатывает такую ситуацию (например, не отправляет письмо «Вот ваши результаты», если результатов нет).
- Фильтры действия «Получить Записи» работают так же, как фильтры Представления: условия можно объединять логикой AND/OR.
-- При использовании межбазового доступа запрос выполняется с разрешениями создателя рабочего процесса. Если создатель потеряет доступ к целевой Базе, шаг завершится ошибкой.
+- При использовании межпроектного доступа запрос выполняется с разрешениями создателя рабочего процесса. Если создатель потеряет доступ к целевому Проекту, шаг завершится ошибкой.
## Связанные материалы
-- [Межбазовый доступ](/ru/basic/automation/actions/records/cross-base) — запрос к Таблицам в других Базах
+- [Межпроектный доступ](/ru/basic/automation/actions/records/cross-base) — запрос к Таблицам в других Проектах
- [Цикл (пакетная обработка)](../logic/loop-run) — перебор массива результатов
- [Создать Запись](/ru/basic/automation/actions/records/create-record) — создание Записей на основе полученных данных
- [Обновить Запись](/ru/basic/automation/actions/records/update-record) — обновление Записей, найденных действием «Получить Записи»
diff --git a/ru/basic/automation/actions/records/update-record.mdx b/ru/basic/automation/actions/records/update-record.mdx
index 2b8c08a5..8853f7d6 100644
--- a/ru/basic/automation/actions/records/update-record.mdx
+++ b/ru/basic/automation/actions/records/update-record.mdx
@@ -93,11 +93,11 @@ description: "Изменяйте Поля существующей Записи
- Обновление Записи может запустить другие Автоматизации, отслеживающие ту же Таблицу. Учитывайте каскадные последствия.
- При обновлении нескольких Записей с помощью разделённых запятыми идентификаторов все Записи получают одинаковые значения Полей. Чтобы задать разные значения, используйте шаг [Цикл](../logic/loop-run).
- Чтобы очистить Поле, сопоставьте его с пустым значением. Если просто оставить его несопоставленным, оно *не* будет очищено.
-- Используйте [межбазовый доступ](/ru/basic/automation/actions/records/cross-base), чтобы обновлять Записи в Таблице, находящейся в другой Базе.
+- Используйте [межпроектный доступ](/ru/basic/automation/actions/records/cross-base), чтобы обновлять Записи в Таблице, находящейся в другом Проекте.
## Связанные материалы
- [Создать Запись](/ru/basic/automation/actions/records/create-record) — добавление новых Записей вместо изменения существующих
- [Получить Записи](/ru/basic/automation/actions/records/get-records) — получение Записей для поиска их идентификаторов перед обновлением
-- [Межбазовый доступ](/ru/basic/automation/actions/records/cross-base) — обновление Записей в Таблицах за пределами текущей Базы
+- [Межпроектный доступ](/ru/basic/automation/actions/records/cross-base) — обновление Записей в Таблицах за пределами текущего Проекта
- [Цикл (пакетная обработка)](../logic/loop-run) — обновление нескольких Записей с разными значениями
diff --git a/ru/basic/automation/ai/scripting/runscript.mdx b/ru/basic/automation/ai/scripting/runscript.mdx
index ecd5a160..696da1e0 100644
--- a/ru/basic/automation/ai/scripting/runscript.mdx
+++ b/ru/basic/automation/ai/scripting/runscript.mdx
@@ -210,7 +210,7 @@ output.set("records", data);
### Вызов ИИ из скрипта
-`POST /api/automation/runtime/ai` отправляет запрос модели ИИ вашей Базы. База определяется из контекста Автоматизации, поэтому её идентификатор не требуется. Тело принимает `prompt`, а также необязательные параметры `attachments`, `modelKey`, `temperature` и `outputType`; ответ имеет вид `{ "message": ... }`.
+`POST /api/automation/runtime/ai` отправляет запрос модели ИИ вашего Проекта. Проект определяется из контекста Автоматизации, поэтому его идентификатор не требуется. Тело принимает `prompt`, а также необязательные параметры `attachments`, `modelKey`, `temperature` и `outputType`; ответ имеет вид `{ "message": ... }`.
Вложения представляют собой элементы `{ url, mimetype, name }`: не более 10 на один вызов, каждый размером менее 20 МБ и со временем загрузки до 30 секунд. Поддерживаются изображения, PDF-файлы и документы Office. Модель чата по умолчанию может не читать изображения и подобные вложения, поэтому при отправке файлов укажите `modelKey`. Каждый вызов расходует кредиты.
diff --git a/ru/basic/automation/examples/api-automation.mdx b/ru/basic/automation/examples/api-automation.mdx
index d2c87cd4..59978931 100644
--- a/ru/basic/automation/examples/api-automation.mdx
+++ b/ru/basic/automation/examples/api-automation.mdx
@@ -17,7 +17,7 @@ description: "Создавайте и настраивайте рабочие п
## Предварительные требования
- Персональный токен доступа (PAT). См. [Токен доступа](/ru/api-doc/token).
-- Идентификаторы Базы, Таблицы и Полей. См. [Получение идентификаторов](/ru/api-doc/get-id).
+- Идентификаторы Проекта, Таблицы и Полей. См. [Получение идентификаторов](/ru/api-doc/get-id).
## Вспомогательные функции
@@ -74,7 +74,7 @@ await api("PUT", `/base/${baseId}/workflow/${wf.id}/active`, {
## Рекомендации
-- Используйте PAT с минимальными полномочиями — ограничьте его только необходимыми Пространствами и Базами.
+- Используйте PAT с минимальными полномочиями — ограничьте его только необходимыми Пространствами и Проектами.
- Храните токены в переменных среды и никогда не указывайте их непосредственно в коде.
- Перед включением используйте **Тестовый узел** для проверки.
- См. полную [Справку по API Автоматизации](/ru/api-reference/automation/put-base-workflow-action).
diff --git a/ru/basic/automation/examples/cross-base-sync.mdx b/ru/basic/automation/examples/cross-base-sync.mdx
index 17a1d823..3c8dbf48 100644
--- a/ru/basic/automation/examples/cross-base-sync.mdx
+++ b/ru/basic/automation/examples/cross-base-sync.mdx
@@ -1,6 +1,6 @@
---
-title: "Синхронизация записей между несколькими Базами"
-description: "Автоматически копируйте новые или обновлённые записи в другую Базу с помощью межбазового доступа"
+title: "Синхронизация записей между несколькими Проектами"
+description: "Автоматически копируйте новые или обновлённые записи в другой Проект с помощью межпроектного доступа"
---
Рекомендуем создавать примеры автоматизаций непосредственно в ИИ-чате. Просто опишите нужный рабочий процесс, и ИИ полностью настроит его за вас, включая триггер, действия, скрипт и конфигурацию.
@@ -9,18 +9,18 @@ description: "Автоматически копируйте новые или о
Откройте ИИ-чат на правой боковой панели Таблицы и сообщите ИИ, что вам нужно. Например, можно написать:
-*"При создании нового заказа в Базе «Продажи» создай соответствующую запись в Базе «Исполнение» с идентификатором заказа, именем клиента, суммой и статусом «Ожидает исполнения»"*
+*"При создании нового заказа в Проекте «Продажи» создай соответствующую запись в Проекте «Исполнение» с идентификатором заказа, именем клиента, суммой и статусом «Ожидает исполнения»"*
ИИ автоматически создаст весь рабочий процесс. Вы сможете просмотреть созданный скрипт, протестировать его на реальных данных и включить рабочий процесс, когда всё будет готово.
## Настройка вручную
-1. **Создайте рабочий процесс** в Базе **Продажи** с триггером **При создании записи**.
+1. **Создайте рабочий процесс** в Проекте **Продажи** с триггером **При создании записи**.
2. Выберите Таблицу **Заказы**.
3. Нажмите **Тест**.
4. **Добавьте действие** → **Создать запись**.
-5. Нажмите **Межбазовый доступ** рядом с элементом выбора Таблицы.
-6. Перейдите в Базу **Исполнение** и выберите Таблицу **Заказы**.
+5. Нажмите **Межпроектный доступ** рядом с элементом выбора Таблицы.
+6. Перейдите в Проект **Исполнение** и выберите Таблицу **Заказы**.
7. Сопоставьте Поля:
- Идентификатор заказа → идентификатор заказа из триггера (через **+**)
- Клиент → клиент из триггера
@@ -31,6 +31,6 @@ description: "Автоматически копируйте новые или о
## Двусторонняя синхронизация
Чтобы синхронизировать обновления в обоих направлениях:
-1. Создайте второй рабочий процесс в Базе **Исполнение**.
-2. Используйте **При обновлении записи** → **Обновить запись**, настроив межбазовый доступ обратно к Базе «Продажи».
+1. Создайте второй рабочий процесс в Проекте **Исполнение**.
+2. Используйте **При обновлении записи** → **Обновить запись**, настроив межпроектный доступ обратно к Проекту «Продажи».
3. Используйте фильтр, чтобы избежать бесконечных циклов: например, запускайте процесс только при изменении определённых Полей и перед обновлением проверяйте, действительно ли значение отличается.
diff --git a/ru/basic/automation/trigger/external/webhook-received.mdx b/ru/basic/automation/trigger/external/webhook-received.mdx
index b21ee6aa..a97702b9 100644
--- a/ru/basic/automation/trigger/external/webhook-received.mdx
+++ b/ru/basic/automation/trigger/external/webhook-received.mdx
@@ -78,7 +78,7 @@ Teable автоматически разбирает JSON и создаёт им
## Тестирование вебхука
-Проще всего выполнить тест с помощью `curl` в командной строке. Скопируйте настоящий URL с панели триггера, а не вводите его вручную: он содержит идентификаторы Базы и рабочего процесса.
+Проще всего выполнить тест с помощью `curl` в командной строке. Скопируйте настоящий URL с панели триггера, а не вводите его вручную: он содержит идентификаторы Проекта и рабочего процесса.
**Без авторизации:**
@@ -120,7 +120,7 @@ curl -X POST https://your-teable-instance.com/api/webhook/base/bseXXXXXXXXXXXX/w
| Область | Ограничение |
|---|---|
-| На Базу | 50 запросов в секунду |
+| На Проект | 50 запросов в секунду |
| На рабочий процесс | 2 запроса в секунду |
Запросы, превышающие ограничение частоты, получают HTTP-ответ 429. Если внешняя система отправляет запросы всплесками, предусмотрите повторные попытки с экспоненциальной задержкой.
diff --git a/ru/basic/base.mdx b/ru/basic/base.mdx
index a3b38b93..c766a2d9 100644
--- a/ru/basic/base.mdx
+++ b/ru/basic/base.mdx
@@ -1,42 +1,44 @@
---
title: "Обзор"
-description: "Создавайте, управляйте, импортируйте и экспортируйте базы. Перемещайте данные между пространствами Teable Cloud или переносите их между Cloud и Self-Hosted с помощью файлов .tea."
+description: "Создавайте, управляйте, импортируйте и экспортируйте проекты. Перемещайте данные между пространствами Teable Cloud или переносите их между Cloud и Self-Hosted с помощью файлов .tea."
---
{/* mintlify-resync: 2026-05-26 */}
-База — это инструмент для хранения и обработки всей информации по конкретному проекту. В каждом Пространстве может быть несколько Баз, и каждая База может работать независимо, обеспечивая понятную структуру информации для определённых проектов или наборов Таблиц.
+Проект объединяет связанные таблицы, приложения и автоматизации. В каждом Пространстве может быть несколько проектов, каждый со своими ресурсами и правами совместной работы.
-Пользователям, которые не знакомы с Базами, можно представить их как рабочие книги в Excel: каждая рабочая книга может содержать несколько листов.
+Проект — название ресурса `base` в интерфейсе. В API и CLI сохраняются `base`, поля вроде `baseId`, префикс идентификатора `bse` и URL `/base/...`.
-## Создание Баз и управление ими
+Пользователям, которые не знакомы с Проектами, можно представить их как рабочие книги в Excel: каждая рабочая книга может содержать несколько листов.
-### Добавление Базы
+## Создание Проектов и управление ими {#создание-баз-и-управление-ими}
+
+### Добавление Проекта {#добавление-базы}
1. Перейдите в Пространство
-2. Нажмите «Создать Базу» в правом верхнем углу
+2. Нажмите «Создать Проект» в правом верхнем углу
-### Переименование/удаление Базы
+### Переименование/удаление Проекта {#переименованиеудаление-базы}
1. Перейдите в Пространство
-2. Наведите указатель на Базу
+2. Наведите указатель на Проект
3. Нажмите кнопку «···», чтобы открыть меню
4. Нажмите «Переименовать» или «Удалить»
-### Организация ресурсов в Базе
+### Организация ресурсов в Проекте {#организация-ресурсов-в-базе}
-После входа в Базу на левой боковой панели отображаются ресурсы текущей Базы, например Таблицы, приложения и Автоматизации. Вы можете использовать папки для организации этих ресурсов и упрощения навигации по большим Базам.
+После входа в Проект на левой боковой панели отображаются ресурсы текущего Проекта, например Таблицы, приложения и Автоматизации. Вы можете использовать папки для организации этих ресурсов и упрощения навигации по большим Проектам.
К распространённым операциям относятся:
@@ -46,40 +48,40 @@ description: "Создавайте, управляйте, импортируйт
- **Добавление описаний**: Для Таблиц, приложений и Автоматизаций нажмите **Добавить описание** под названием ресурса в заголовке. Используйте описания, чтобы фиксировать назначение, владельца, примечания по передаче или правила использования. Teable открывает описание при первом открытии ресурса и ещё раз после его изменения.
- **Проверка сведений об узле**: Откройте меню `...` ресурса и выберите **Информация об узле**, чтобы просмотреть ID папки, Таблицы, Автоматизации или приложения, а также сведения о создании и изменении.
-### Дублирование Базы в другое Пространство {#duplicate-a-base-to-another-space}
+### Дублирование Проекта в другое Пространство {#duplicate-a-base-to-another-space}
-Шаг 1: В Пространстве выберите Базу, которую хотите дублировать;
+Шаг 1: В Пространстве выберите Проект, который хотите дублировать;
-Шаг 2: Нажмите значок меню и выберите пункт «Копировать Базу»;
+Шаг 2: Нажмите значок меню и выберите пункт «Копировать Проект»;
Шаг 3: Во всплывающем окне выберите целевое Пространство. В этом Пространстве вам нужны права Создателя.
-Для крупных Баз Teable показывает ход выполнения в диалоговом окне дублирования, пока копирует структуру Базы, Записи и вложения. Не закрывайте диалоговое окно до завершения копирования. История версий и соавторы не копируются.
+Для крупных Проектов Teable показывает ход выполнения в диалоговом окне дублирования, пока копирует структуру Проекта, Записи и вложения. Не закрывайте диалоговое окно до завершения копирования. История версий и соавторы не копируются.
-Если База содержит Поля «Ссылка», «Поиск», «Сводка», «Условный поиск» или «Условная сводка», указывающие на другое Пространство, перед дублированием Teable показывает затронутые Поля. Если вы продолжите, Teable преобразует эти Поля в **Однострочный текст** в дублированной Базе.
+Если Проект содержит Поля «Ссылка», «Поиск», «Сводка», «Условный поиск» или «Условная сводка», указывающие на другое Пространство, перед дублированием Teable показывает затронутые Поля. Если вы продолжите, Teable преобразует эти Поля в **Однострочный текст** в дублированном Проекте.
-### Перемещение Базы между Пространствами
+### Перемещение Проекта между Пространствами {#перемещение-базы-между-пространствами}
-Если у вас есть необходимые права в Пространстве, вы можете переместить Базу в другое Пространство. Если после перемещения Поля, основанные на связях, будут указывать на другие Пространства, Teable предупредит вас и перечислит затронутые Поля. После подтверждения Teable преобразует эти Поля в **Однострочный текст** в рамках перемещения.
+Если у вас есть необходимые права в Пространстве, вы можете переместить Проект в другое Пространство. Если после перемещения Поля, основанные на связях, будут указывать на другие Пространства, Teable предупредит вас и перечислит затронутые Поля. После подтверждения Teable преобразует эти Поля в **Однострочный текст** в рамках перемещения.
-## Импорт и экспорт Баз
+## Импорт и экспорт Проектов {#импорт-и-экспорт-баз}
Используйте AI Chat для переноса Airtable, Baserow, NocoDB, SmartSuite и других систем в Teable.
-### Импорт Базы (миграция данных)
+### Импорт Проекта (миграция данных) {#импорт-базы-миграция-данных}
-Формат файла `.tea` импортирует полную Базу со всеми её Таблицами, Полями, данными и конфигурациями. Это полезно для:
-- **Миграции данных**: Перемещения Баз между разными экземплярами Teable (например, из Cloud в Self-Hosted)
-- **Восстановления резервной копии**: Восстановления ранее экспортированной Базы
-- **Обмена шаблонами**: Передачи полных структур Баз другим командам
+Формат файла `.tea` импортирует полный Проект со всеми его Таблицами, Полями, данными и конфигурациями. Это полезно для:
+- **Миграции данных**: Перемещения Проектов между разными экземплярами Teable (например, из Cloud в Self-Hosted)
+- **Восстановления резервной копии**: Восстановления ранее экспортированного Проекта
+- **Обмена шаблонами**: Передачи полных структур Проектов другим командам
**Шаги:**
1. Перейдите в Пространство
@@ -89,19 +91,19 @@ description: "Создавайте, управляйте, импортируйт
-Если вы хотите создать Базу из Airtable, выберите **Импортировать из Airtable** в том же диалоговом окне импорта.
+Если вы хотите создать Проект из Airtable, выберите **Импортировать из Airtable** в том же диалоговом окне импорта.
-### Экспорт Базы (резервное копирование и миграция) {#export-base-backup-&-migration}
+### Экспорт Проекта (резервное копирование и миграция) {#export-base-backup-&-migration}
-Экспортируйте Базу в файл `.tea` для резервного копирования или миграции. Экспортированный файл содержит все Таблицы, Поля, данные, Представления и конфигурации.
+Экспортируйте Проект в файл `.tea` для резервного копирования или миграции. Экспортированный файл содержит все Таблицы, Поля, данные, Представления и конфигурации.
**Шаги:**
1. Перейдите в Пространство
-2. Наведите указатель на Базу, которую хотите экспортировать
+2. Наведите указатель на Проект, который хотите экспортировать
3. Нажмите кнопку 「···», чтобы открыть меню
4. Нажмите 「Экспортировать」
5. Оставьте параметр **Включить Записи** включённым, чтобы экспортировать данные Записей. Отключите его, чтобы экспортировать только структуру и конфигурацию.
@@ -110,28 +112,28 @@ description: "Создавайте, управляйте, импортируйт
-- Чтобы перенести данные между экземплярами Teable, экспортируйте Базу из исходного экземпляра, затем импортируйте файл `.tea` в целевой экземпляр. Все данные и конфигурации будут сохранены.
-- Teable преобразует поля связей между Базами в Поля **Однострочный текст** в экспортированном файле.
-- При дублировании или перемещении Базы между Пространствами Поля связей между Пространствами преобразуются в **Однострочный текст**.
+- Чтобы перенести данные между экземплярами Teable, экспортируйте Проект из исходного экземпляра, затем импортируйте файл `.tea` в целевой экземпляр. Все данные и конфигурации будут сохранены.
+- Teable преобразует поля связей между Проектами в Поля **Однострочный текст** в экспортированном файле.
+- При дублировании или перемещении Проекта между Пространствами Поля связей между Пространствами преобразуются в **Однострочный текст**.
-## Публикация Базы
+## Публикация Проекта {#публикация-базы}
-Базами можно делиться через публичные ссылки. Область публикации может охватывать всю Базу или выбранный в данный момент элемент.
+Проектами можно делиться через публичные ссылки. Область публикации может охватывать весь Проект или выбранный в данный момент элемент.
-1. Перейдите в целевую Базу
-2. Откройте меню публикации для Базы или выбранного элемента
+1. Перейдите в целевый Проект
+2. Откройте меню публикации для Проекта или выбранного элемента
3. Включите **Поделиться в интернете**
4. Скопируйте ссылку для публикации или QR-код
@@ -139,30 +141,30 @@ description: "Создавайте, управляйте, импортируйт
| Область | Описание |
|------|------|
-| **Поделиться всей Базой** | Публикует все элементы текущей Базы. Новые Таблицы и папки, добавленные позже, включаются автоматически. |
+| **Поделиться всем Проектом** | Публикует все элементы текущего Проекта. Новые Таблицы и папки, добавленные позже, включаются автоматически. |
| **Поделиться выбранным элементом** | Публикует выбранный в данный момент элемент. При публикации папки включаются её дочерние элементы. |
В настройках публикации можно настроить разрешения для ссылки, **Разрешить зрителям копировать данные**, доступ по паролю, повторную генерацию ссылки, удаление ссылки для публикации или копирование конфигурации встраивания.
Если область публикации включает приложение, приложение необходимо опубликовать, прежде чем к нему можно будет получить доступ через публичную ссылку.
-## Возможности Базы
+## Возможности Проекта {#возможности-базы}
-База может содержать несколько Таблиц для записи и организации рабочей или бизнес-информации.
+Проект может содержать несколько Таблиц для записи и организации рабочей или бизнес-информации.
-Например: База для управления клиентами может иметь отдельные Таблицы для «Компаний-клиентов», «Контактов клиентов» и «Записей о взаимодействиях с клиентами», а База для управления переговорными комнатами — отдельные Таблицы для «Управления переговорными комнатами», «Оборудования переговорных комнат» и «Бронирований переговорных комнат».
+Например: Проект для управления клиентами может иметь отдельные Таблицы для «Компаний-клиентов», «Контактов клиентов» и «Записей о взаимодействиях с клиентами», а Проект для управления переговорными комнатами — отдельные Таблицы для «Управления переговорными комнатами», «Оборудования переговорных комнат» и «Бронирований переговорных комнат».
-Поэтому большинство возможностей Базы связано с Таблицами:
+Поэтому большинство возможностей Проекта связано с Таблицами:
-* **Создание Таблиц**: Базы позволяют пользователям создавать новые Таблицы в соответствии с требованиями проекта, определяя структуру Таблицы, Поля и типы данных.
-* **Редактирование Таблиц**: Пользователи могут редактировать существующие Таблицы в Базе, включая добавление, удаление и изменение Записей.
-* **Экспорт и импорт данных**: Базы поддерживают экспорт данных в CSV и импорт данных в форматах CSV и XLSX.
+* **Создание Таблиц**: Проекты позволяют пользователям создавать новые Таблицы в соответствии с требованиями проекта, определяя структуру Таблицы, Поля и типы данных.
+* **Редактирование Таблиц**: Пользователи могут редактировать существующие Таблицы в Проекте, включая добавление, удаление и изменение Записей.
+* **Экспорт и импорт данных**: Проекты поддерживают экспорт данных в CSV и импорт данных в форматах CSV и XLSX.
Дополнительную информацию о Таблицах см. в [разделе «Таблицы»](/ru/basic/table).
diff --git a/ru/basic/credential.mdx b/ru/basic/credential.mdx
index 1859b549..572008c9 100644
--- a/ru/basic/credential.mdx
+++ b/ru/basic/credential.mdx
@@ -39,7 +39,7 @@ description: Управляйте своими подключениями и с
Для каждой выдачи нужно **Имя переменной** — псевдоним, под которым эти учётные данные известны внутри приложения или автоматизации. Правила именования те же, что и для ключа секрета, и именно это имя читает код.
-В панели могут быть заглушки **Не привязано**. При копировании приложения, дублировании рабочего процесса, импорте или дублировании базы переносятся псевдонимы, которые ожидает код, но не сами учётные данные. Нажмите **Привязать мои**, чтобы подставить свои и приложение или автоматизация заработали.
+В панели могут быть заглушки **Не привязано**. При копировании приложения, дублировании рабочего процесса, импорте или дублировании проекта переносятся псевдонимы, которые ожидает код, но не сами учётные данные. Нажмите **Привязать мои**, чтобы подставить свои и приложение или автоматизация заработали.
Если за псевдонимом стоят чужие учётные данные, кнопка **Заменить моим** переводит его на ваши. **Только отозвать доступ (оставить заглушку)** снимает привязку и сохраняет заглушку, так что менять код не придётся.
diff --git a/ru/basic/security.mdx b/ru/basic/security.mdx
index b901fe31..9efe66f9 100644
--- a/ru/basic/security.mdx
+++ b/ru/basic/security.mdx
@@ -112,13 +112,13 @@ Teable предоставляет несколько вариантов резе
| Метод | Описание | Сценарий использования |
|--------|-------------|----------|
-| **[Экспорт Базы](/ru/basic/base#export-base-backup-&-migration)** | Скачать всю Базу как файл `.tea` (структура, данные, Автоматизации) | Полное резервное копирование, миграция |
-| **[Дублирование Базы](/ru/basic/base#duplicate-a-base-to-another-space)** | Создать копию Базы в Teable | Быстрый снимок состояния |
+| **[Экспорт Проекта](/ru/basic/base#export-base-backup-&-migration)** | Скачать весь Проект как файл `.tea` (структура, данные, Автоматизации) | Полное резервное копирование, миграция |
+| **[Дублирование Проекта](/ru/basic/base#duplicate-a-base-to-another-space)** | Создать копию Проекта в Teable | Быстрый снимок состояния |
| **[Экспорт CSV](/ru/basic/table/export)** | Экспортировать данные отдельной таблицы | Переносимость данных |
| **[Экспорт API](/ru/api-doc/record/get)** | Программно экспортировать Записи через REST API | Автоматизированное резервное копирование |
-Вы можете вручную создавать резервные копии Баз, экспортируя всю Базу как файл `.tea`, отдельные таблицы как файлы CSV или получая данные через API Teable.
+Вы можете вручную создавать резервные копии Проектов, экспортируя весь Проект как файл `.tea`, отдельные таблицы как файлы CSV или получая данные через API Teable.
## Единый вход (SSO)
diff --git a/ru/basic/space.mdx b/ru/basic/space.mdx
index 2cfb4a9e..d348dc63 100644
--- a/ru/basic/space.mdx
+++ b/ru/basic/space.mdx
@@ -64,15 +64,15 @@ description: "Создавайте, переименовывайте, удаля
## Доступные мне
-Когда кто-то предоставляет вам доступ к Базе в качестве соавтора, База появляется в разделе **Доступные мне** на боковой панели Пространства.
+Когда кто-то предоставляет вам доступ к Проекту в качестве соавтора, Проект появляется в разделе **Доступные мне** на боковой панели Пространства.
-Базы, к которым вам предоставлен доступ, отличаются от Баз в ваших собственных Пространствах:
+Проекты, к которым вам предоставлен доступ, отличаются от Проектов в ваших собственных Пространствах:
- Доступ контролируется предоставившим его пользователем.
-- Доступные действия зависят от предоставленного вам разрешения для Базы.
-- Если предоставивший доступ пользователь отзовёт его, База больше не будет отображаться.
+- Доступные действия зависят от предоставленного вам разрешения для Проекта.
+- Если предоставивший доступ пользователь отзовёт его, Проект больше не будет отображаться.
-О публичном доступе к Базе см. [База](/ru/basic/base).
+О публичном доступе к Проекту см. [Проект](/ru/basic/base).
## Настройки Пространства
@@ -95,7 +95,7 @@ description: "Создавайте, переименовывайте, удаля
**Чат в IM**
-На странице **Чат в IM** администраторы Пространства могут создавать ботов и настраивать их модель, доступные Базы, Навыки, файлы и интеграцию с IM.
+На странице **Чат в IM** администраторы Пространства могут создавать ботов и настраивать их модель, доступные Проекты, Навыки, файлы и интеграцию с IM.
**Тариф**
diff --git a/ru/basic/space/base-invite.mdx b/ru/basic/space/base-invite.mdx
index 594648d0..9057db12 100644
--- a/ru/basic/space/base-invite.mdx
+++ b/ru/basic/space/base-invite.mdx
@@ -1,39 +1,39 @@
---
-title: "Приглашение в Базу"
-description: "Управляйте разрешениями на уровне Базы. Приглашайте участников в конкретную Базу, не предоставляя доступ ко всему Пространству, для более детального и безопасного совместного использования данных."
+title: "Приглашение в Проект"
+description: "Управляйте разрешениями на уровне Проекта. Приглашайте участников в конкретный Проект, не предоставляя доступ ко всему Пространству, для более детального и безопасного совместного использования данных."
---
-## Кто такой соавтор Базы?
+## Кто такой соавтор Проекта? {#кто-такой-соавтор-базы}
-Соавтор Базы — это участник, приглашённый только в определённую Базу. В отличие от соавторов Пространства, он может получать доступ только к Базам, в которые был приглашён, и не может видеть другие Базы в Пространстве.
+Соавтор Проекта — это участник, приглашённый только в определённый Проект. В отличие от соавторов Пространства, он может получать доступ только к Проектам, в которые был приглашён, и не может видеть другие Проекты в Пространстве.
-## Добавление соавторов Базы
+## Добавление соавторов Проекта {#добавление-соавторов-базы}
-Откройте любую Базу и нажмите кнопку `Пригласить` в правом верхнем углу. Поддерживаются два способа:
+Откройте любой Проект и нажмите кнопку `Пригласить` в правом верхнем углу. Поддерживаются два способа:
-- **Приглашение по электронной почте**: Введите адрес электронной почты получателя, установите уровень разрешений для Базы (например, «Создатель») и нажмите **Отправить приглашение**.
+- **Приглашение по электронной почте**: Введите адрес электронной почты получателя, установите уровень разрешений для Проекта (например, «Создатель») и нажмите **Отправить приглашение**.
- **Приглашение по ссылке**: Перейдите на вкладку «Пригласить по ссылке», чтобы создать специальную ссылку-приглашение. Скопируйте и отправьте ссылку. Получатели смогут присоединиться, нажав её.
-После отправки приглашения по электронной почте вы можете скопировать прямую ссылку на Базу, отображаемую на панели, и отправить её отдельно. Приглашённый также получит уведомление в приложении, открывающее Базу.
+После отправки приглашения по электронной почте вы можете скопировать прямую ссылку на Проект, отображаемую на панели, и отправить её отдельно. Приглашённый также получит уведомление в приложении, открывающее Проект.
-На панели приглашения можно просмотреть всех пользователей, которые сейчас имеют доступ к Базе:
+На панели приглашения можно просмотреть всех пользователей, которые сейчас имеют доступ к Проекту:
-- **Соавторы Базы**: Участники, приглашённые непосредственно только в эту Базу.
-- **Соавторы Пространства**: Отображаются со значком «Пространство» рядом с именем; это указывает, что они являются участниками уровня Пространства и автоматически наследуют доступ к этой Базе.
+- **Соавторы Проекта**: Участники, приглашённые непосредственно только в этот Проект.
+- **Соавторы Пространства**: Отображаются со значком «Пространство» рядом с именем; это указывает, что они являются участниками уровня Пространства и автоматически наследуют доступ к этому Проекту.
-База предлагает четыре роли разрешений для поддержки разных уровней совместной работы. Подробное сравнение разрешений см. в разделе [Сведения о разрешениях](/ru/basic/space/space-permission).
+Проект предлагает четыре роли разрешений для поддержки разных уровней совместной работы. Подробное сравнение разрешений см. в разделе [Сведения о разрешениях](/ru/basic/space/space-permission).
Для более детального контроля на уровне Таблицы, Поля или Записи используйте функцию [Матрица прав](/ru/basic/authority-matrix).
@@ -46,12 +46,12 @@ description: "Управляйте разрешениями на уровне Б
## Примеры использования
-Приглашение в Базу предназначено для внешних соавторов. Например, внештатного дизайнера, нанятого для организации библиотеки ресурсов, можно пригласить только в эту Базу с разрешением **Редактор**, не предоставляя ему доступ к другим Базам в Пространстве.
+Приглашение в Проект предназначено для внешних соавторов. Например, внештатного дизайнера, нанятого для организации библиотеки ресурсов, можно пригласить только в этот Проект с разрешением **Редактор**, не предоставляя ему доступ к другим Проектам в Пространстве.
## Примечания
-- **Наследование разрешений**: Менеджер Пространства автоматически имеет полный доступ ко всем Базам в этом Пространстве, и его разрешения нельзя понизить на уровне Базы.
-- **Безопасность ссылок**: Любой, кто получит ссылку-приглашение, может попытаться присоединиться к Базе. Если ссылка раскрыта, вы можете отозвать её, нажав X рядом с ней на панели приглашения.
+- **Наследование разрешений**: Менеджер Пространства автоматически имеет полный доступ ко всем Проектам в этом Пространстве, и его разрешения нельзя понизить на уровне Проекта.
+- **Безопасность ссылок**: Любой, кто получит ссылку-приглашение, может попытаться присоединиться к Проекту. Если ссылка раскрыта, вы можете отозвать её, нажав X рядом с ней на панели приглашения.
Когда [Матрица прав](/ru/basic/authority-matrix) и [Сведения о разрешениях](/ru/basic/space/space-permission) используются одновременно, только пользователи с ролью **Менеджер** освобождены от ограничений Матрицы прав. Все остальные пользователи подпадают под эти ограничения.
diff --git a/ru/basic/space/billing.mdx b/ru/basic/space/billing.mdx
index 2ff3c8f7..07df0463 100644
--- a/ru/basic/space/billing.mdx
+++ b/ru/basic/space/billing.mdx
@@ -41,19 +41,19 @@ description: "Узнайте, как управлять подпиской, пр
| Показатель | Описание |
|--------|-------------|
-| **Всего участников** | Количество платных участников в текущем пространстве и его базах |
+| **Всего участников** | Количество платных участников в текущем пространстве и его проектах |
| **Максимальное количество запусков автоматизации в месяц** | Ежемесячная квота запусков автоматизации. Каждый запуск автоматизации использует 1 единицу квоты запусков |
| **Всего записей** | Общее количество строк во всех таблицах пространства |
| **Хранилище вложений** | Общий объём хранилища, используемый загруженными вложениями |
| **Всего писем** | Письма, отправленные автоматизацией через службу электронной почты Teable |
-Данные как в корзине пространства, так и в корзине базы учитываются в статистике общего количества записей. Чтобы уменьшить общее количество записей, очистите данные в разделах «Пространство → Корзина» или «База → Корзина».
+Данные как в корзине пространства, так и в корзине проекта учитываются в статистике общего количества записей. Чтобы уменьшить общее количество записей, очистите данные в разделах «Пространство → Корзина» или «Проект → Корзина».
-Нажмите **Сведения** на карточке **Всего записей**, чтобы просмотреть использование записей по базам. В диалоговом окне отображаются активные записи, записи в корзине и общее количество записей для каждой базы. В этом диалоговом окне можно открыть страницу корзины базы или окончательно удалить базу, которая уже находится в корзине.
+Нажмите **Сведения** на карточке **Всего записей**, чтобы просмотреть использование записей по проектам. В диалоговом окне отображаются активные записи, записи в корзине и общее количество записей для каждого проекта. В этом диалоговом окне можно открыть страницу корзины проекта или окончательно удалить проект, который уже находится в корзине.
### При достижении лимита
-Когда пространство достигает лимита плана, Teable останавливает действие до его выполнения и открывает диалоговое окно обновления. В нём указывается достигнутый лимит, объём уже использованного ресурса и ссылка на использование по каждой базе. Это относится к вставке, заполнению, дублированию строк, массовому созданию записей, импорту и загрузке вложений.
+Когда пространство достигает лимита плана, Teable останавливает действие до его выполнения и открывает диалоговое окно обновления. В нём указывается достигнутый лимит, объём уже использованного ресурса и ссылка на использование по каждому проекту. Это относится к вставке, заполнению, дублированию строк, массовому созданию записей, импорту и загрузке вложений.
Чтобы продолжить, обновите план или освободите место, удалив записи или вложения.
@@ -129,9 +129,9 @@ description: "Узнайте, как управлять подпиской, пр
### Места
-Места приобретаются заранее, и можно купить их с запасом для команды. Место занимают участники с ролью **Владелец**, **Создатель** или **Редактор** в пространстве и его базах. Роли **Комментатор** и **Просмотр** предоставляются бесплатно.
+Места приобретаются заранее, и можно купить их с запасом для команды. Место занимают участники с ролью **Владелец**, **Создатель** или **Редактор** в пространстве и его проектах. Роли **Комментатор** и **Просмотр** предоставляются бесплатно.
-В облачных планах приобретённые места являются жёстким лимитом. Teable блокирует любое действие, которое превысит этот лимит, и предлагает добавить места. Это включает приглашения по электронной почте, создание ссылки-приглашения с платной ролью или переключение ссылки на такую роль, присоединение по такой ссылке, непосредственное добавление участников и повышение пользователя до платной роли. Пользователь, уже занимающий место, может присоединиться к другой базе или изменить роль без занятия нового места.
+В облачных планах приобретённые места являются жёстким лимитом. Teable блокирует любое действие, которое превысит этот лимит, и предлагает добавить места. Это включает приглашения по электронной почте, создание ссылки-приглашения с платной ролью или переключение ссылки на такую роль, присоединение по такой ссылке, непосредственное добавление участников и повышение пользователя до платной роли. Пользователь, уже занимающий место, может присоединиться к другому проекту или изменить роль без занятия нового места.
Чтобы продолжить, добавьте места на странице плана или назначьте человеку бесплатную роль Комментатора или Просмотра. Купить места может только владелец пространства.
diff --git a/ru/basic/space/space-invite.mdx b/ru/basic/space/space-invite.mdx
index 708dc1db..768422ba 100644
--- a/ru/basic/space/space-invite.mdx
+++ b/ru/basic/space/space-invite.mdx
@@ -5,7 +5,7 @@ description: "Приглашайте других пользователей с
## Кто такой соавтор Пространства?
-Когда вы предоставляете доступ к Пространству другому пользователю, он становится соавтором Пространства и получает доступ ко всем Базам в этом Пространстве.
+Когда вы предоставляете доступ к Пространству другому пользователю, он становится соавтором Пространства и получает доступ ко всем Проектам в этом Пространстве.
## Добавление соавторов Пространства
@@ -14,7 +14,7 @@ description: "Приглашайте других пользователей с
1. Нажмите Пространство, в которое хотите добавить соавторов, на левой боковой панели.
2. Нажмите кнопку «Пригласить» в верхней части Пространства.
3. Откроется окно приглашения в Пространство, в котором вы увидите варианты приглашения по электронной почте или по ссылке. В соответствующих разделах также будут доступны ранее настроенные «Ссылки-приглашения» и существующие «Соавторы Пространства».
-4. **Приглашение по электронной почте**: Введите адрес электронной почты или несколько адресов (через запятую). Затем установите уровень разрешений, который пользователи должны иметь для всех Баз в Пространстве. Наконец, нажмите «Отправить письмо», чтобы пригласить пользователей к совместной работе.
+4. **Приглашение по электронной почте**: Введите адрес электронной почты или несколько адресов (через запятую). Затем установите уровень разрешений, который пользователи должны иметь для всех Проектов в Пространстве. Наконец, нажмите «Отправить письмо», чтобы пригласить пользователей к совместной работе.
После отправки приглашения по электронной почте вы можете скопировать прямую ссылку на Пространство, отображаемую на панели, и отправить её отдельно. Приглашённый также получит уведомление в приложении, открывающее Пространство.
@@ -24,7 +24,7 @@ description: "Приглашайте других пользователей с
className="docs-screenshot"
/>
-5. **Приглашение по ссылке**: Нажмите вариант «Пригласить по ссылке». Затем установите уровень разрешений, который ссылка-приглашение предоставит для всех Баз в Пространстве. Наконец, нажмите «Создать ссылку». Теперь вы можете нажать значок буфера обмена рядом с созданной ссылкой и поделиться ею любым удобным способом.
+5. **Приглашение по ссылке**: Нажмите вариант «Пригласить по ссылке». Затем установите уровень разрешений, который ссылка-приглашение предоставит для всех Проектов в Пространстве. Наконец, нажмите «Создать ссылку». Теперь вы можете нажать значок буфера обмена рядом с созданной ссылкой и поделиться ею любым удобным способом.
-Соавторы Пространства имеют доступ ко всем Базам в Пространстве. Если кому-то нужно работать только с определёнными Базами, рассмотрите возможность добавить его в качестве [соавтора Базы](/ru/basic/space/base-invite).
+Соавторы Пространства имеют доступ ко всем Проектам в Пространстве. Если кому-то нужно работать только с определёнными Проектами, рассмотрите возможность добавить его в качестве [соавтора Проекта](/ru/basic/space/base-invite).
## Удаление ссылок-приглашений
@@ -56,7 +56,7 @@ description: "Приглашайте других пользователей с
* **Ограничение разрешений**: Только пользователи с разрешениями «Менеджер» или «Создатель» могут удалять других соавторов.
* **Самостоятельное удаление**: Вы можете отозвать собственный доступ, если в Пространстве есть хотя бы ещё один Менеджер.
-* **Область действия**: Удаление пользователя из Пространства не удаляет его разрешения для отдельных Баз.
+* **Область действия**: Удаление пользователя из Пространства не удаляет его разрешения для отдельных Проектов.
При добавлении новых пользователей в Пространство вы можете назначить следующие роли (см. [Сведения о разрешениях](/ru/basic/space/space-permission)):
@@ -68,9 +68,9 @@ description: "Приглашайте других пользователей с
| Комментатор | Может комментировать Записи, но не может изменять данные. |
| Наблюдатель | Может просматривать, но не может комментировать. |
-## Проверка доступа к Базам
+## Проверка доступа к Проектам {#проверка-доступа-к-базам}
-Каждый пользователь или отдел отображается в списке соавторов Пространства один раз, даже если у него также есть разрешения для отдельных Баз. Значок **Разрешения Базы** рядом с ролью показывает, в сколько Баз он был приглашён. Пользователь, которого никогда не добавляли в само Пространство, указан как **Есть доступ только к выбранным Базам**.
+Каждый пользователь или отдел отображается в списке соавторов Пространства один раз, даже если у него также есть разрешения для отдельных Проектов. Значок **Разрешения Проекта** рядом с ролью показывает, в сколько Проектов он был приглашён. Пользователь, которого никогда не добавляли в само Пространство, указан как **Есть доступ только к выбранным Проектам**.
-Разверните строку, чтобы увидеть эти Базы и роль в каждой из них. Отсюда **Удалить доступ к Базе** отзывает одно разрешение для Базы, а **Удалить соавтора** в строке пользователя только с доступом к Базам отзывает все разрешения для Баз, которыми этот пользователь обладает в данном Пространстве.
+Разверните строку, чтобы увидеть эти Проекты и роль в каждой из них. Отсюда **Удалить доступ к Проекту** отзывает одно разрешение для Проекта, а **Удалить соавтора** в строке пользователя только с доступом к Проектам отзывает все разрешения для Проектов, которыми этот пользователь обладает в данном Пространстве.
diff --git a/ru/basic/space/space-permission.mdx b/ru/basic/space/space-permission.mdx
index e1428f2a..53ac31e8 100644
--- a/ru/basic/space/space-permission.mdx
+++ b/ru/basic/space/space-permission.mdx
@@ -1,20 +1,20 @@
---
title: "Сведения о разрешениях для совместной работы"
-description: "В этом разделе описывается область действия четырёх различных уровней разрешений в Пространствах и Базах."
+description: "В этом разделе описывается область действия четырёх различных уровней разрешений в Пространствах и Проектах."
---
Teable предоставляет более детальный контроль разрешений на уровне Таблицы, Поля и Записи. См. раздел [Матрица прав](/ru/basic/authority-matrix).
-### Операции с Базой
+### Операции с Проектом {#операции-с-базой}
| Описание | Создатель/Менеджер | Редактор | Комментатор | Наблюдатель |
| ----------- | :------------: | :----: | :-------: | :----: |
-| Просмотр данных в Базе | ✅ | ✅ | ✅ | ✅ |
+| Просмотр данных в Проекте | ✅ | ✅ | ✅ | ✅ |
| Приглашение пользователей с равными или более низкими разрешениями | ✅ | ✅ | ✅ | ✅ |
| Создание или удаление ссылок общего доступа к Представлению | ✅ | ✅ | | |
| Создание и редактирование автоматизаций | ✅ | | | |
| Включение матрицы прав | ✅ | | | |
-| Создание или удаление ссылок-приглашений для совместной работы с Базой | ✅ | | | |
-| Переименование Базы | ✅ | | | |
+| Создание или удаление ссылок-приглашений для совместной работы с Проектом | ✅ | | | |
+| Переименование Проекта | ✅ | | | |
### Операции с Записями
@@ -51,12 +51,12 @@ description: "В этом разделе описывается область
| Описание | Менеджер | Создатель | Редактор | Комментатор | Наблюдатель |
| ----------- | :-----: | :-----: | :----: | :-------: | :----: |
-| Доступ ко всем Базам в Пространстве | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Доступ ко всем Проектам в Пространстве | ✅ | ✅ | ✅ | ✅ | ✅ |
| Приглашение пользователей с равными или более низкими разрешениями | ✅ | ✅ | ✅ | ✅ | ✅ |
| Переименование Пространства | ✅ | ✅ | | | |
-| Добавление и удаление Баз в Пространстве | ✅ | ✅ | | | |
-| Изменение порядка Баз в Пространстве | ✅ | ✅ | | | |
-| Перемещение Баз между Пространствами | ✅ | ✅ | | | |
+| Добавление и удаление Проектов в Пространстве | ✅ | ✅ | | | |
+| Изменение порядка Проектов в Пространстве | ✅ | ✅ | | | |
+| Перемещение Проектов между Пространствами | ✅ | ✅ | | | |
| Настройка параметров биллинга, повышение тарифа Пространства | ✅ | | | | |
| Предоставление разрешений Менеджера | ✅ | | | | |
diff --git a/ru/basic/table.mdx b/ru/basic/table.mdx
index 83762ae8..cd8edfd3 100644
--- a/ru/basic/table.mdx
+++ b/ru/basic/table.mdx
@@ -1,16 +1,16 @@
---
title: "Обзор"
-description: "Создавайте, импортируйте, публикуйте Таблицы и управляйте ими в Базе."
+description: "Создавайте, импортируйте, публикуйте Таблицы и управляйте ими в Проекте."
---
{/* mintlify-resync: 2026-05-14 */}
-Каждая База может содержать несколько Таблиц для хранения и управления связанными данными. Таблицы Teable эквивалентны таблицам базы данных — понимание [их отличий от электронных таблиц](/ru/compare/teable-vs-excel) поможет вам использовать Teable максимально эффективно.
+Каждый Проект может содержать несколько Таблиц для хранения и управления связанными данными. Таблицы Teable эквивалентны таблицам базы данных — понимание [их отличий от электронных таблиц](/ru/compare/teable-vs-excel) поможет вам использовать Teable максимально эффективно.
## Создание Таблиц и управление ими
### Добавление Таблиц
-В Базе нажмите кнопку `+` в каталоге и выберите:
+В Проекте нажмите кнопку `+` в каталоге и выберите:
-Когда другие Таблицы содержат ссылки на удаляемую Таблицу, в диалоговом окне подтверждения перечисляются Поля, затрагиваемые удалением, а также База и Таблица, которым принадлежит каждое из них. При удалении Таблицы эти Поля ссылок преобразуются в Поля однострочного текста, сохраняющие названия связанных Записей, а Поля поиска или сводки, построенные на них, перестают работать.
+Когда другие Таблицы содержат ссылки на удаляемую Таблицу, в диалоговом окне подтверждения перечисляются Поля, затрагиваемые удалением, а также Проект и Таблица, которым принадлежит каждое из них. При удалении Таблицы эти Поля ссылок преобразуются в Поля однострочного текста, сохраняющие названия связанных Записей, а Поля поиска или сводки, построенные на них, перестают работать.
### Корзина
-Нажмите значок корзины в левом верхнем углу Базы, чтобы управлять удалёнными Таблицами.
+Нажмите значок корзины в левом верхнем углу Проекта, чтобы управлять удалёнными Таблицами.
-- **Восстановить**: Вернуть Таблицу в Базу со всеми данными без изменений
+- **Восстановить**: Вернуть Таблицу в Проект со всеми данными без изменений
- **Очистить корзину**: Безвозвратно удалить все Таблицы из корзины
Восстановление Таблицы не отменяет преобразование ссылок. Поля ссылок в других Таблицах остаются текстовыми, поэтому создайте их заново, если нужно восстановить связь.
diff --git a/ru/basic/table/import.mdx b/ru/basic/table/import.mdx
index 6032b624..025c55fb 100644
--- a/ru/basic/table/import.mdx
+++ b/ru/basic/table/import.mdx
@@ -4,7 +4,7 @@ description: "Импортируйте данные CSV, Excel, Airtable или
---
{/* mintlify-resync: 2026-05-14 */}
-Используйте импорт, чтобы инициализировать новую Таблицу, добавить новые данные в существующую Таблицу или перенести Таблицы из Airtable или Google Sheets в Базу Teable. Airtable и Google Sheets также доступны при импорте всей Базы.
+Используйте импорт, чтобы инициализировать новую Таблицу, добавить новые данные в существующую Таблицу или перенести Таблицы из Airtable или Google Sheets в Проект Teable. Airtable и Google Sheets также доступны при импорте всего Проекта.
Используйте «Подключить всё» в AI-чате для переноса Airtable, Baserow, NocoDB, SmartSuite и других систем в Teable.
@@ -72,16 +72,16 @@ description: "Импортируйте данные CSV, Excel, Airtable или
Если в вашем экземпляре настроена интеграция с Airtable, импорт из Airtable можно выполнить двумя способами:
-- Чтобы создать новую Базу Teable, откройте меню целевого Пространства, нажмите **Импортировать**, затем выберите **Импортировать из Airtable**.
-- Чтобы импортировать Таблицы в просматриваемую Базу Teable, используйте меню ресурсов Базы:
+- Чтобы создать новый Проект Teable, откройте меню целевого Пространства, нажмите **Импортировать**, затем выберите **Импортировать из Airtable**.
+- Чтобы импортировать Таблицы в просматриваемый Проект Teable, используйте меню ресурсов Проекта:
-1. Откройте целевую Базу Teable.
+1. Откройте целевый Проект Teable.
2. Нажмите `+` вверху левого каталога.
3. В разделе **Добавить из других источников** выберите **Airtable**.
@@ -99,8 +99,8 @@ description: "Импортируйте данные CSV, Excel, Airtable или
Начните с любого из двух способов:
-- Чтобы создать новую Базу Teable, откройте меню целевого Пространства, нажмите **Импортировать**, затем выберите **Импортировать из Google Sheets**.
-- Чтобы добавить Таблицы в просматриваемую Базу, нажмите `+` вверху левого каталога и выберите **Google Sheets** в разделе **Добавить из других источников**.
+- Чтобы создать новый Проект Teable, откройте меню целевого Пространства, нажмите **Импортировать**, затем выберите **Импортировать из Google Sheets**.
+- Чтобы добавить Таблицы в просматриваемый Проект, нажмите `+` вверху левого каталога и выберите **Google Sheets** в разделе **Добавить из других источников**.
@@ -113,7 +113,7 @@ description: "Импортируйте данные CSV, Excel, Airtable или
Каждая вкладка отображается в виде карточки с количеством строк и столбцов. Выберите нужные вкладки. Снимите флажок **Импортировать Записи**, если вам нужна только структура Полей без данных.
- Нажмите **Начать импорт** и не закрывайте диалоговое окно. В нём отображается ход выполнения для каждой Таблицы, а по завершении — количество Записей в каждой Таблице. После импорта новой Базы используйте **Открыть Базу**, чтобы сразу перейти к результату.
+ Нажмите **Начать импорт** и не закрывайте диалоговое окно. В нём отображается ход выполнения для каждой Таблицы, а по завершении — количество Записей в каждой Таблице. После импорта нового Проекта используйте **Открыть Проект**, чтобы сразу перейти к результату.
diff --git a/ru/basic/view/toolbar.mdx b/ru/basic/view/toolbar.mdx
index 06932aa8..0f34944b 100644
--- a/ru/basic/view/toolbar.mdx
+++ b/ru/basic/view/toolbar.mdx
@@ -148,9 +148,9 @@ description: "Используйте фильтры, группы, сортир
## Общий доступ к представлению
-Функция **Поделиться представлением** публикует текущее представление по ссылке. Посетители видят данные и компоновку этого представления. Это не то же самое, что приглашение в качестве участников Базы.
+Функция **Поделиться представлением** публикует текущее представление по ссылке. Посетители видят данные и компоновку этого представления. Это не то же самое, что приглашение в качестве участников Проекта.
-Чтобы предоставить общий доступ ко всей Базе, определённой Таблице или папке, используйте общий доступ к Базе в разделе [База](/ru/basic/base).
+Чтобы предоставить общий доступ ко всему Проекту, определённой Таблице или папке, используйте общий доступ к Проекту в разделе [Проект](/ru/basic/base).
| Вариант общего доступа | Для чего подходит |
| --- | --- |
@@ -240,5 +240,5 @@ description: "Используйте фильтры, группы, сортир
## Примечания
- Изменения фильтров, групп, сортировки, видимых полей или высоты строк влияют на всех пользователей текущего представления, если вы не находитесь в личном режиме.
-- Общий доступ к представлению публикует результат текущего представления, а не все разрешения Базы. Для постоянной совместной работы используйте разрешения участников или общий доступ к Базе.
+- Общий доступ к представлению публикует результат текущего представления, а не все разрешения Проекта. Для постоянной совместной работы используйте разрешения участников или общий доступ к Проекту.
- В обоих режимах изменения значений ячеек по-прежнему синхронизируются для всех.
diff --git a/ru/deploy/env.mdx b/ru/deploy/env.mdx
index 159baec1..df4682f8 100644
--- a/ru/deploy/env.mdx
+++ b/ru/deploy/env.mdx
@@ -71,7 +71,7 @@ mode: "wide"
| BACKEND_MAIL_AUTH_USER | Имя пользователя аутентификации почтового сервера по умолчанию | - | - | username |
| BACKEND_MAIL_AUTH_PASS | Пароль аутентификации почтового сервера по умолчанию | - | - | usertoken |
| BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH | Максимальная длина имени приглашающего в темах писем-приглашений. Пустое значение или 0 отключает усечение | - | - | 32 |
-| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Максимальная длина названия Пространства или Базы в темах писем-приглашений. Пустое значение или 0 отключает усечение | - | - | 32 |
+| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Максимальная длина названия Пространства или Проекта в темах писем-приглашений. Пустое значение или 0 отключает усечение | - | - | 32 |
| **Конфигурация сеанса/JWT** | | | | |
| BACKEND_SESSION_EXPIRES_IN | Время истечения сеанса | 7d | - | 7d |
| BACKEND_SESSION_COOKIE_SECURE | Защищать ли cookie сеанса | false | - | true |
@@ -93,7 +93,7 @@ mode: "wide"
| TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | Максимальное число Записей на мутацию | 20000 | - | 20000 |
| TABLE_LIMIT_COMPUTED_CELL_VALUE_MAX_BYTES | Максимальный размер вычисленного значения ячейки в байтах | 262144 | - | 262144 |
| TABLE_LIMIT_FORMULA_MAX_LENGTH | Максимальная длина формулы | 8192 | - | 8192 |
-| TABLE_LIMIT_TABLES_PER_BASE_MAX | Максимальное число Таблиц в Базе | 1000 | - | 1000 |
+| TABLE_LIMIT_TABLES_PER_BASE_MAX | Максимальное число Таблиц в Проекте | 1000 | - | 1000 |
| TABLE_LIMIT_FIELDS_PER_TABLE_MAX | Максимальное число Полей в Таблице | 500 | - | 500 |
| TABLE_LIMIT_VIEWS_PER_TABLE_MAX | Максимальное число Представлений в Таблице | 100 | - | 100 |
| TABLE_LIMIT_CREATE_TABLE_FIELDS_MAX | Максимальное число Полей, принимаемых при создании Таблицы | 1000 | - | 1000 |
@@ -133,10 +133,10 @@ mode: "wide"
| TELEMETRY_REPORT_DISABLED | Отключить отчётность телеметрии при самостоятельном размещении, включая отчёты о соблюдении лицензии от подключённых экземпляров | false | - | true |
| **Конфигурация базы данных** | | | | |
| PRISMA_DATABASE_URL | URL подключения к базе данных, должен быть настроен | - | Да | postgresql://teable:teable@127.0.0.1:5432/teable |
-| PUBLIC_DATABASE_PROXY | Внешне доступный адрес базы данных (хост:порт), используемый в учётных данных, созданных панелью Базы «Подключение к базе данных»; задайте его, чтобы включить внешний SQL-доступ только для чтения | - | - | db.example.com:42345 |
+| PUBLIC_DATABASE_PROXY | Внешне доступный адрес базы данных (хост:порт), используемый в учётных данных, созданных панелью Проекта «Подключение к базе данных»; задайте его, чтобы включить внешний SQL-доступ только для чтения | - | - | db.example.com:42345 |
| PRISMA_TRANSACTION_TIMEOUT | Максимальное время (мс), в течение которого может выполняться транзакция до истечения времени ожидания. Увеличьте для длительных транзакций (например, массовых обновлений с множеством внешних ключей) | 5000 | - | 60000 |
| PRISMA_TRANSACTION_MAX_WAIT | Максимальное время (мс) ожидания получения транзакции из пула | 2000 | - | 5000 |
-| BIG_TRANSACTION_TIMEOUT | Время ожидания (мс) для крупных внутренних транзакций, например экспорта крупных Баз | 600000 | - | 1200000 |
+| BIG_TRANSACTION_TIMEOUT | Время ожидания (мс) для крупных внутренних транзакций, например экспорта крупных Проектов | 600000 | - | 1200000 |
## Секреты и ротация {#secrets-and-rotation}
diff --git a/swagger.json b/swagger.json
index e792cf9d..d99ad6a3 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"}},"schemas":{},"parameters":{}},"paths":{"/table/{tableId}/record/{recordId}":{"get":{"summary":"Get record","description":"Retrieve a single record by its ID with options to specify field projections and output format.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"},"required":false,"description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details","name":"fieldKeyType","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"summary":"Update record","description":"Update a single record by its ID with support for field value typecast and record reordering.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"},"typecast":{"type":"boolean","description":"Automatic data conversion from cellValues if the typecast parameter is passed in. Automatic conversion is disabled by default to ensure data integrity, but it may be helpful for integrating with 3rd party data sources."},"record":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create record (will create a order index automatically)"},"anchorId":{"type":"string","description":"The record id to anchor to"},"position":{"type":"string","enum":["before","after"]}},"required":["viewId","anchorId","position"],"description":"Where this record to insert to (Optional)"}},"required":["record"],"description":"Update record by id"}}}},"responses":{"200":{"description":"Returns record data after update.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"fieldKeyType\":\"id\",\"typecast\":true,\"record\":{\"fields\":{\"property1\":null,\"property2\":null}},\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"fieldKeyType\":\"id\",\"typecast\":true,\"record\":{\"fields\":{\"property1\":null,\"property2\":null}},\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n fieldKeyType: 'id',\n typecast: true,\n record: {fields: {property1: null, property2: null}},\n order: {viewId: 'string', anchorId: 'string', position: 'before'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fieldKeyType\\\":\\\"id\\\",\\\"typecast\\\":true,\\\"record\\\":{\\\"fields\\\":{\\\"property1\\\":null,\\\"property2\\\":null}},\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Delete record","description":"Permanently delete a single record by its ID.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record":{"get":{"summary":"List records","description":"Retrieve a list of records with support for filtering, sorting, grouping, and pagination. The response includes record data and optional group information.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"},"required":false,"description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details","name":"fieldKeyType","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"}],"responses":{"200":{"description":"List of records","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"example":[{"id":"recXXXXXXX","fields":{"single line text":"text value"}}],"description":"Array of record objects "},"extra":{"type":"object","properties":{"groupPoints":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]},"description":"Group points for the view"},"allGroupHeaderRefs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"depth":{"type":"number","maximum":2,"minimum":0}},"required":["id","depth"]},"description":"All group header refs for the view, including collapsed group headers"},"searchHitIndex":{"type":"array","nullable":true,"items":{"type":"object","properties":{"recordId":{"type":"string"},"fieldId":{"type":"string"}},"required":["recordId","fieldId"]},"description":"The index of the records that match the search, highlight the records"}}}},"required":["records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/record?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"summary":"Create records","description":"Create one or multiple records with support for field value typecast and custom record ordering.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"},"typecast":{"type":"boolean","description":"Automatic data conversion from cellValues if the typecast parameter is passed in. Automatic conversion is disabled by default to ensure data integrity, but it may be helpful for integrating with 3rd party data sources."},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create record (will create a order index automatically)"},"anchorId":{"type":"string","description":"The record id to anchor to"},"position":{"type":"string","enum":["before","after"]}},"required":["viewId","anchorId","position"],"description":"Where this record to insert to (Optional)"},"records":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]},"example":[{"fields":{"single line text":"text value"}}],"description":"Array of record objects "}},"required":["records"],"description":"Multiple Create records"}}}},"responses":{"201":{"description":"Returns data about the records.","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"example":[{"id":"recXXXXXXX","fields":{"single line text":"text value"}}],"description":"Array of record objects "}},"required":["records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"fieldKeyType\":\"id\",\"typecast\":true,\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"},\"records\":[{\"fields\":{\"single line text\":\"text value\"}}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"fieldKeyType\":\"id\",\"typecast\":true,\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"},\"records\":[{\"fields\":{\"single line text\":\"text value\"}}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n fieldKeyType: 'id',\n typecast: true,\n order: {viewId: 'string', anchorId: 'string', position: 'before'},\n records: [{fields: {'single line text': 'text value'}}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fieldKeyType\\\":\\\"id\\\",\\\"typecast\\\":true,\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"},\\\"records\\\":[{\\\"fields\\\":{\\\"single line text\\\":\\\"text value\\\"}}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"summary":"Update multiple records","description":"Update multiple records in a single request with support for field value typecast and record reordering.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"},"typecast":{"type":"boolean","description":"Automatic data conversion from cellValues if the typecast parameter is passed in. Automatic conversion is disabled by default to ensure data integrity, but it may be helpful for integrating with 3rd party data sources."},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["id","fields"]}},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create record (will create a order index automatically)"},"anchorId":{"type":"string","description":"The record id to anchor to"},"position":{"type":"string","enum":["before","after"]}},"required":["viewId","anchorId","position"],"description":"Where this record to insert to (Optional)"}},"required":["records"],"description":"Multiple Update records"}}}},"responses":{"200":{"description":"Returns the records data after update.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"fieldKeyType\":\"id\",\"typecast\":true,\"records\":[{\"id\":\"string\",\"fields\":{\"property1\":null,\"property2\":null}}],\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"fieldKeyType\":\"id\",\"typecast\":true,\"records\":[{\"id\":\"string\",\"fields\":{\"property1\":null,\"property2\":null}}],\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n fieldKeyType: 'id',\n typecast: true,\n records: [{id: 'string', fields: {property1: null, property2: null}}],\n order: {viewId: 'string', anchorId: 'string', position: 'before'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fieldKeyType\\\":\\\"id\\\",\\\"typecast\\\":true,\\\"records\\\":[{\\\"id\\\":\\\"string\\\",\\\"fields\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}],\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/record\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Delete records","description":"Permanently delete multiple records by their IDs in a single request.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"recordIds","in":"query"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/record?recordIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record?recordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record?recordIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/record?recordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/duplicate":{"post":{"summary":"Duplicate record","description":"Create a copy of an existing record with optional custom positioning in the view.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create record (will create a order index automatically)"},"anchorId":{"type":"string","description":"The record id to anchor to"},"position":{"type":"string","enum":["before","after"]}},"required":["viewId","anchorId","position"],"description":"Where this record to insert to (Optional)"}}}},"responses":{"201":{"description":"Successful duplicate","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"example":[{"id":"recXXXXXXX","fields":{"single line text":"text value"}}],"description":"Array of record objects "}},"required":["records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({viewId: 'string', anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"string\\\",\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/{trashId}":{"delete":{"description":"Permanently delete a trash item by trashId","tags":["trash"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"trashId","in":"path"}],"responses":{"200":{"description":"Permanently deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/trash/%7BtrashId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/%7BtrashId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/trash/%7BtrashId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/trash/%7BtrashId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space":{"post":{"description":"Create a space","tags":["space"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}}}}}},"responses":{"201":{"description":"Returns information about a successfully created space.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"Get space list","description":"Get space list by query","tags":["space"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of space.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","name","role"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}":{"delete":{"description":"Delete a space by spaceId","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a space by spaceId","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns information about a space.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","name","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a space info","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}}}}}},"responses":{"200":{"description":"Returns information about a successfully updated space.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/invitation/link":{"get":{"description":"List a invitation link to your","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful response, return invitation information list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"invitationId":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"}},"required":["invitationId","role","inviteUrl","invitationCode","createdBy","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/invitation/link',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/invitation/link\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a invitation link to your","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"201":{"description":"Successful response, return the ID of the invitation link.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"}},"required":["invitationId","role","inviteUrl","invitationCode","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"role\":\"owner\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/invitation/link',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/invitation/link\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/invitation/link/{invitationId}":{"delete":{"description":"Delete a invitation link to your","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"}],"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a invitation link to your","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["invitationId","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"role\":\"owner\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/invitation/email":{"post":{"description":"Send invitations by e-mail","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email"},"minItems":1},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["emails","role"]}}}},"responses":{"201":{"description":"Successful response, return invitation information.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"invitationId":{"type":"string"}},"required":["invitationId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/invitation/email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"emails\":[\"user@example.com\"],\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/invitation/email';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"emails\":[\"user@example.com\"],\"role\":\"owner\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/invitation/email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({emails: ['user@example.com'], role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"emails\\\":[\\\"user@example.com\\\"],\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/invitation/email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/collaborators":{"get":{"description":"List a space collaborator","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeSystem","in":"query"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeBase","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"string","enum":["desc","asc"]},"required":false,"name":"orderBy","in":"query"}],"responses":{"200":{"description":"Successful response, return space collaborator list.","content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"avatar":{"type":"string","nullable":true},"createdTime":{"type":"string"},"type":{"type":"string","enum":["user"]},"resourceType":{"type":"string","enum":["space","base"]},"isSystem":{"type":"boolean"},"billable":{"type":"boolean"},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["userId","userName","email","role","avatar","createdTime","type","resourceType"]},{"type":"object","properties":{"departmentId":{"type":"string"},"departmentName":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"createdTime":{"type":"string"},"type":{"type":"string","enum":["department"]},"resourceType":{"type":"string","enum":["space","base"]},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["departmentId","departmentName","role","createdTime","type","resourceType"]}]}},"uniqTotal":{"type":"number"},"total":{"type":"number"}},"required":["collaborators","uniqTotal","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&includeBase=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&includeBase=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&includeBase=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&includeBase=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a collaborator","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"principalId","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":true,"name":"principalType","in":"query"}],"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a space collaborator","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"principalId":{"type":"string"},"principalType":{"type":"string","enum":["user","department"]},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["principalId","principalType","role"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/collaborators \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"principalId\":\"string\",\"principalType\":\"user\",\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborators';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"principalId\":\"string\",\"principalType\":\"user\",\"role\":\"owner\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/collaborators',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({principalId: 'string', principalType: 'user', role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"principalId\\\":\\\"string\\\",\\\"principalType\\\":\\\"user\\\",\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D/collaborators\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base":{"post":{"description":"Create a project","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"}},"required":["spaceId"]}}}},"responses":{"201":{"description":"Returns information about a successfully created project.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"name\":\"string\",\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"name\":\"string\",\"icon\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({spaceId: 'string', name: 'string', icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Create project","sidebarTitle":"Create project","description":"Create a project in the specified space."}}}},"/base/{baseId}":{"delete":{"description":"Delete a project by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project","sidebarTitle":"Delete project","description":"Move a project to the trash by its ID."}}},"get":{"description":"Get a project by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns information about a project.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project","sidebarTitle":"Get project","description":"Retrieve a project by its ID."}}},"patch":{"description":"Update a project info","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string"}}}}}},"responses":{"200":{"description":"Returns information about a successfully updated project.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true,"format":"emoji"}},"required":["spaceId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"icon\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project","sidebarTitle":"Update project","description":"Update a project's name or icon."}}}},"/table/{tableId}/view/{viewId}/order":{"put":{"description":"Update view order","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/order":{"put":{"description":"Update project order","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Put project order","sidebarTitle":"Update project order","description":"Change a project's position in its space."}}}},"/base/access/all":{"get":{"description":"Get project list by query","tags":["base"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of project.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/access/all \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/access/all';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/access/all',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/access/all\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"List accessible projects","sidebarTitle":"List accessible projects","description":"List projects accessible to the current user using the supplied query."}}}},"/base/{baseId}/collaborators":{"get":{"description":"List a project collaborator","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeSystem","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":false,"name":"role","in":"query"}],"responses":{"200":{"description":"Successful response, return project collaborator list.","content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"avatar":{"type":"string","nullable":true},"createdTime":{"type":"string"},"type":{"type":"string","enum":["user"]},"resourceType":{"type":"string","enum":["space","base"]},"isSystem":{"type":"boolean"},"billable":{"type":"boolean"},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["userId","userName","email","role","avatar","createdTime","type","resourceType"]},{"type":"object","properties":{"departmentId":{"type":"string"},"departmentName":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"createdTime":{"type":"string"},"type":{"type":"string","enum":["department"]},"resourceType":{"type":"string","enum":["space","base"]},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["departmentId","departmentName","role","createdTime","type","resourceType"]}]}},"total":{"type":"number"}},"required":["collaborators","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"List project collaborators","sidebarTitle":"List project collaborators","description":"List the collaborators of a project."}}},"delete":{"description":"Delete a project collaborators","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"principalId","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":true,"name":"principalType","in":"query"}],"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Remove project collaborator","sidebarTitle":"Remove project collaborator","description":"Remove the specified user or department from a project."}}},"patch":{"description":"Update a project collaborator","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"principalId":{"type":"string"},"principalType":{"type":"string","enum":["user","department"]},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["principalId","principalType","role"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/collaborators \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"principalId\":\"string\",\"principalType\":\"user\",\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"principalId\":\"string\",\"principalType\":\"user\",\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/collaborators',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({principalId: 'string', principalType: 'user', role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"principalId\\\":\\\"string\\\",\\\"principalType\\\":\\\"user\\\",\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/collaborators\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Update project collaborator","sidebarTitle":"Update project collaborator","description":"Update a collaborator's role in a project."}}}},"/base/duplicate":{"post":{"description":"duplicate a project","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fromBaseId":{"type":"string","description":"The project to duplicate"},"spaceId":{"type":"string","description":"The space to duplicate the project to"},"withRecords":{"type":"boolean","description":"Whether to duplicate the records"},"name":{"type":"string","description":"The name of the duplicated project"},"baseId":{"type":"string"},"nodes":{"type":"array","items":{"type":"string"},"description":"The node IDs to include in the duplication"},"shareId":{"type":"string","description":"The share ID when duplicating from a shared project. If provided, will use share permissions instead of base|update permission."}},"required":["fromBaseId","spaceId"]}}}},"responses":{"201":{"description":"Returns information about a successfully duplicated project.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"fromBaseId\":\"string\",\"spaceId\":\"string\",\"withRecords\":true,\"name\":\"string\",\"baseId\":\"string\",\"nodes\":[\"string\"],\"shareId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"fromBaseId\":\"string\",\"spaceId\":\"string\",\"withRecords\":true,\"name\":\"string\",\"baseId\":\"string\",\"nodes\":[\"string\"],\"shareId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n fromBaseId: 'string',\n spaceId: 'string',\n withRecords: true,\n name: 'string',\n baseId: 'string',\n nodes: ['string'],\n shareId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fromBaseId\\\":\\\"string\\\",\\\"spaceId\\\":\\\"string\\\",\\\"withRecords\\\":true,\\\"name\\\":\\\"string\\\",\\\"baseId\\\":\\\"string\\\",\\\"nodes\\\":[\\\"string\\\"],\\\"shareId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Duplicate project","sidebarTitle":"Duplicate project","description":"Create a copy of a project in the target space."}}}},"/base/create-from-template":{"post":{"summary":"Create a project from template or apply a template to a project","description":"Create a project from template or apply a template to a project","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"The space id to create a project from"},"templateId":{"type":"string","description":"The template id to create a project from"},"withRecords":{"type":"boolean","description":"Whether to create records from the template"},"baseId":{"type":"string","description":"The project id to apply the template to"}},"required":["spaceId","templateId"]}}}},"responses":{"201":{"description":"Returns information about a successfully created project.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"defaultUrl":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/create-from-template \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"templateId\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/create-from-template';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"templateId\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/create-from-template',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({spaceId: 'string', templateId: 'string', withRecords: true, baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"templateId\\\":\\\"string\\\",\\\"withRecords\\\":true,\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/create-from-template\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Create or update project from template","sidebarTitle":"Create or update project from template","description":"Create a project from a template or apply a template to an existing project."}}}},"/base/{baseId}/permission":{"get":{"description":"Get a project permission","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns data about a project permission.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/permission \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/permission';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/permission',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/permission\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project permissions","sidebarTitle":"Get project permissions","description":"Retrieve the current user's permissions for a project."}}}},"/base/{baseId}/invitation/link":{"get":{"description":"List a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successful response, return invitation information list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"invitationId":{"type":"string"},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","inviteUrl","invitationCode","createdBy","createdTime","role"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/invitation/link\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"List project invitation links","sidebarTitle":"List project invitation links","description":"List invitation links for a project."}}},"post":{"description":"Create a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"201":{"description":"Successful response, return the ID of the invitation link.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","inviteUrl","invitationCode","createdBy","createdTime","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/invitation/link\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Create project invitation link","sidebarTitle":"Create project invitation link","description":"Create a link for inviting collaborators to a project."}}}},"/base/{baseId}/invitation/link/{invitationId}":{"delete":{"description":"Delete a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"}],"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project invitation link","sidebarTitle":"Delete project invitation link","description":"Delete a project's invitation link by its ID."}}},"patch":{"description":"Update a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Update project invitation link","sidebarTitle":"Update project invitation link","description":"Update a project's invitation link settings."}}}},"/base/{baseId}/invitation/email":{"post":{"description":"Send invitations by e-mail","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email"},"minItems":1},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["emails","role"]}}}},"responses":{"201":{"description":"Successful response, return invitation information.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"invitationId":{"type":"string"}},"required":["invitationId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"emails\":[\"user@example.com\"],\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/email';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"emails\":[\"user@example.com\"],\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({emails: ['user@example.com'], role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"emails\\\":[\\\"user@example.com\\\"],\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/invitation/email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Invite project collaborators by email","sidebarTitle":"Invite project collaborators by email","description":"Send email invitations to join a project."}}}},"/base/shared-base":{"get":{"tags":["base"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns information about a shared project.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"},"spaceName":{"type":"string"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/shared-base \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/shared-base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/shared-base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/shared-base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"List projects shared with me","sidebarTitle":"List projects shared with me","description":"List projects shared with the current user or their departments."}}}},"/base/{baseId}/permanent":{"delete":{"description":"Permanently delete a project by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Permanently deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Permanently delete project","sidebarTitle":"Permanently delete project","description":"Permanently delete a project by its ID."}}}},"/space/{spaceId}/collaborator":{"post":{"description":"Add a collaborator to a space","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"type":"object","properties":{"principalId":{"type":"string"},"principalType":{"type":"string","enum":["user","department"]}},"required":["principalId","principalType"]}},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["collaborators","role"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/collaborator \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborator';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"owner\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/collaborator',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({collaborators: [{principalId: 'string', principalType: 'user'}], role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"collaborators\\\":[{\\\"principalId\\\":\\\"string\\\",\\\"principalType\\\":\\\"user\\\"}],\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/collaborator\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/collaborator":{"post":{"description":"Add a collaborator to a project","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"type":"object","properties":{"principalId":{"type":"string"},"principalType":{"type":"string","enum":["user","department"]}},"required":["principalId","principalType"]}},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["collaborators","role"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/collaborator \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborator';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/collaborator',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n collaborators: [{principalId: 'string', principalType: 'user'}],\n role: 'creator'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"collaborators\\\":[{\\\"principalId\\\":\\\"string\\\",\\\"principalType\\\":\\\"user\\\"}],\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/collaborator\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Add project collaborator","sidebarTitle":"Add project collaborator","description":"Add a collaborator to a project with the specified role."}}}},"/base/{baseId}/collaborators/users":{"get":{"summary":"Get project collaborator user list","description":"Get project collaborator user list","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeSystem","in":"query"},{"schema":{"type":"string","enum":["desc","asc"]},"required":false,"name":"orderBy","in":"query"}],"responses":{"200":{"description":"Successful response, return project collaborator user list.","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"List project collaborator users","sidebarTitle":"List project collaborator users","description":"List the user accounts that collaborate on a project."}}}},"/base/{baseId}/dashboard":{"get":{"description":"Get a list of dashboards in project","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboards.","content":{"application/json":{"schema":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project dashboard","sidebarTitle":"Get project dashboard"}}},"post":{"description":"Create a new dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Returns data about the created dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project dashboard","sidebarTitle":"Post project dashboard"}}}},"/base/{baseId}/dashboard/{id}":{"get":{"description":"Get a dashboard by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}},"pluginMap":{"type":"object","additionalProperties":{"type":"object","properties":{"id":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["id","pluginInstallId","name"]}}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project dashboard 1","sidebarTitle":"Get project dashboard 1"}}},"delete":{"description":"Delete a dashboard by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Dashboard deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project dashboard","sidebarTitle":"Delete project dashboard"}}}},"/base/{baseId}/dashboard/{dashboardId}/rename":{"patch":{"description":"Rename a dashboard by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Returns data about the renamed dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project dashboard rename","sidebarTitle":"Patch project dashboard rename"}}}},"/base/{baseId}/dashboard/{id}/layout":{"patch":{"description":"Update a dashboard layout by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["layout"]}}}},"responses":{"200":{"description":"Returns data about the updated dashboard layout.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["id","layout"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({layout: [{pluginInstallId: 'string', x: 0, y: 0, w: 0, h: 0}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"layout\\\":[{\\\"pluginInstallId\\\":\\\"string\\\",\\\"x\\\":0,\\\"y\\\":0,\\\"w\\\":0,\\\"h\\\":0}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project dashboard layout","sidebarTitle":"Patch project dashboard layout"}}}},"/base/{baseId}/dashboard/{id}/plugin":{"post":{"description":"Install a plugin to a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["name","pluginId"]}}}},"responses":{"201":{"description":"Returns data about the installed plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"}},"required":["id","pluginId","pluginInstallId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project dashboard plugin","sidebarTitle":"Post project dashboard plugin"}}}},"/base/{baseId}/dashboard/{dashboardId}/plugin/{pluginInstallId}":{"delete":{"description":"Remove a plugin from a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin removed successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project dashboard plugin","sidebarTitle":"Delete project dashboard plugin"}}},"get":{"description":"Get a dashboard install plugin by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboard install plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["pluginId","pluginInstallId","baseId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project dashboard plugin","sidebarTitle":"Get project dashboard plugin"}}}},"/base/{baseId}/dashboard/{dashboardId}/plugin/{pluginInstallId}/rename":{"patch":{"description":"Rename a plugin in a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Returns data about the renamed plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"}},"required":["id","pluginInstallId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project dashboard plugin rename","sidebarTitle":"Patch project dashboard plugin rename"}}}},"/base/{baseId}/dashboard/{dashboardId}/plugin/{pluginInstallId}/update-storage":{"patch":{"description":"Update storage of a plugin in a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Returns data about the updated plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"dashboardId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["baseId","dashboardId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project dashboard plugin update storage","sidebarTitle":"Patch project dashboard plugin update storage"}}}},"/base/{baseId}/dashboard/{id}/duplicate":{"post":{"description":"Duplicate a dashboard","summary":"Duplicate a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated dashboard info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}/plugin/{installedId}/duplicate":{"post":{"description":"Duplicate a dashboard installed plugin","summary":"Duplicate a dashboard installed plugin","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated dashboard info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin":{"post":{"description":"Create a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":20},"description":{"type":"string","maxLength":150},"detailDesc":{"type":"string","maxLength":3000},"logo":{"type":"string"},"url":{"type":"string","format":"uri"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"helpUrl":{"type":"string","format":"uri"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]},"minItems":1},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"autoCreateMember":{"type":"boolean"}},"required":["name","logo","positions"]}}}},"responses":{"201":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"url":{"type":"string"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"secret":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"}},"required":["id","name","logo","positions","secret","status","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/plugin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"logo\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}},\"autoCreateMember\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"logo\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}},\"autoCreateMember\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n detailDesc: 'string',\n logo: 'string',\n url: 'http://example.com',\n config: {\n contextMenu: {width: 0, height: 0, x: 0, y: 0, frozenResize: true, frozenDrag: true},\n view: null,\n dashboard: null,\n panel: null\n },\n helpUrl: 'http://example.com',\n positions: ['dashboard'],\n i18n: {\n en: {title: 'Plugin title', description: 'Plugin description'},\n zh: {title: '插件标题', description: '插件描述'}\n },\n autoCreateMember: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"detailDesc\\\":\\\"string\\\",\\\"logo\\\":\\\"string\\\",\\\"url\\\":\\\"http://example.com\\\",\\\"config\\\":{\\\"contextMenu\\\":{\\\"width\\\":0,\\\"height\\\":0,\\\"x\\\":0,\\\"y\\\":0,\\\"frozenResize\\\":true,\\\"frozenDrag\\\":true},\\\"view\\\":null,\\\"dashboard\\\":null,\\\"panel\\\":null},\\\"helpUrl\\\":\\\"http://example.com\\\",\\\"positions\\\":[\\\"dashboard\\\"],\\\"i18n\\\":{\\\"en\\\":{\\\"title\\\":\\\"Plugin title\\\",\\\"description\\\":\\\"Plugin description\\\"},\\\"zh\\\":{\\\"title\\\":\\\"插件标题\\\",\\\"description\\\":\\\"插件描述\\\"}},\\\"autoCreateMember\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/plugin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get plugins","tags":["plugin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns data about the plugins.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"url":{"type":"string"},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","logo","positions","i18n","status","createdTime","lastModifiedTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/plugin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{id}":{"delete":{"description":"Delete a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns no content."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/plugin/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/plugin/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string","maxLength":150},"detailDesc":{"type":"string","maxLength":3000},"url":{"type":"string","format":"uri"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"logo":{"type":"string"},"helpUrl":{"type":"string","format":"uri"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]},"minItems":1},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}}},"required":["name","positions"]}}}},"responses":{"200":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"url":{"type":"string"},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"secret":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","logo","positions","secret","status","createdTime","lastModifiedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/plugin/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"logo\":\"string\",\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7Bid%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"logo\":\"string\",\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n detailDesc: 'string',\n url: 'http://example.com',\n config: {\n contextMenu: {width: 0, height: 0, x: 0, y: 0, frozenResize: true, frozenDrag: true},\n view: null,\n dashboard: null,\n panel: null\n },\n logo: 'string',\n helpUrl: 'http://example.com',\n positions: ['dashboard'],\n i18n: {\n en: {title: 'Plugin title', description: 'Plugin description'},\n zh: {title: '插件标题', description: '插件描述'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"detailDesc\\\":\\\"string\\\",\\\"url\\\":\\\"http://example.com\\\",\\\"config\\\":{\\\"contextMenu\\\":{\\\"width\\\":0,\\\"height\\\":0,\\\"x\\\":0,\\\"y\\\":0,\\\"frozenResize\\\":true,\\\"frozenDrag\\\":true},\\\"view\\\":null,\\\"dashboard\\\":null,\\\"panel\\\":null},\\\"logo\\\":\\\"string\\\",\\\"helpUrl\\\":\\\"http://example.com\\\",\\\"positions\\\":[\\\"dashboard\\\"],\\\"i18n\\\":{\\\"en\\\":{\\\"title\\\":\\\"Plugin title\\\",\\\"description\\\":\\\"Plugin description\\\"},\\\"zh\\\":{\\\"title\\\":\\\"插件标题\\\",\\\"description\\\":\\\"插件描述\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/plugin/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{id}/regenerate-secret":{"post":{"description":"Regenerate a plugin secret","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"201":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"}},"required":["id","secret"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/plugin/%7Bid%7D/regenerate-secret \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7Bid%7D/regenerate-secret';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7Bid%7D/regenerate-secret',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/plugin/%7Bid%7D/regenerate-secret\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}":{"get":{"description":"Get a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"url":{"type":"string"},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"secret":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","logo","positions","secret","status","createdTime","lastModifiedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/%7BpluginId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/center/list":{"get":{"description":"Get a list of plugins center","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"ids","in":"query"},{"schema":{"type":"string"},"required":false,"name":"positions","in":"query"}],"responses":{"200":{"description":"Returns data about the plugin center list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"helpUrl":{"type":"string"},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"url":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"required":["id","name","logo","status","createdTime","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/submit":{"patch":{"description":"Submit a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin submitted successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/submit \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/submit';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D/submit',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/plugin/%7BpluginId%7D/submit\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/token":{"get":{"description":"Get a token","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"secret":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"authCode":{"type":"string"}},"required":["baseId","secret","scopes","authCode"]}}}},"responses":{"200":{"description":"Returns token.","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"expiresIn":{"type":"number"},"refreshExpiresIn":{"type":"number"}},"required":["accessToken","refreshToken","scopes","expiresIn","refreshExpiresIn"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\",\"secret\":\"string\",\"scopes\":[\"string\"],\"authCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/token';\nconst options = {\n method: 'GET',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"baseId\":\"string\",\"secret\":\"string\",\"scopes\":[\"string\"],\"authCode\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D/token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({baseId: 'string', secret: 'string', scopes: ['string'], authCode: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\",\\\"secret\\\":\\\"string\\\",\\\"scopes\\\":[\\\"string\\\"],\\\"authCode\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"GET\", \"/api/plugin/%7BpluginId%7D/token\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/refreshToken":{"post":{"description":"Refresh a token","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"refreshToken":{"type":"string"},"secret":{"type":"string"}},"required":["refreshToken","secret"]}}}},"responses":{"201":{"description":"Returns token.","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"expiresIn":{"type":"number"},"refreshExpiresIn":{"type":"number"}},"required":["accessToken","refreshToken","scopes","expiresIn","refreshExpiresIn"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/refreshToken \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"refreshToken\":\"string\",\"secret\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/refreshToken';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"refreshToken\":\"string\",\"secret\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D/refreshToken',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({refreshToken: 'string', secret: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"refreshToken\\\":\\\"string\\\",\\\"secret\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/plugin/%7BpluginId%7D/refreshToken\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/authCode":{"post":{"description":"Get an auth code","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"}},"required":["baseId"]}}}},"responses":{"201":{"description":"Returns auth code.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/authCode \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/authCode';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"baseId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D/authCode',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/plugin/%7BpluginId%7D/authCode\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/unpublish":{"patch":{"tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin unpublished successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/unpublish \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/unpublish';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D/unpublish',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/plugin/%7BpluginId%7D/unpublish\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/chart/{pluginInstallId}/dashboard/{positionId}/query":{"get":{"description":"Get a dashboard install plugin query by id","tags":["plugin","chart","dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"positionId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"baseId","in":"query"},{"schema":{"type":"string","enum":["json","text"]},"required":false,"name":"cellFormat","in":"query"}],"responses":{"200":{"description":"Returns data about the dashboard install plugin query.","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}}},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"column":{"type":"string"},"type":{"type":"string","enum":["aggregation","field"]},"fieldSource":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}},"required":["name","column","type"]}}},"required":["rows","columns"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/chart/{pluginInstallId}/plugin-panel/{positionId}/query":{"get":{"description":"Get a plugin panel install plugin query by id","tags":["plugin","chart","plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"positionId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"query"},{"schema":{"type":"string","enum":["json","text"]},"required":false,"name":"cellFormat","in":"query"}],"responses":{"200":{"description":"Returns data about the plugin panel install plugin query.","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}}},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"column":{"type":"string"},"type":{"type":"string","enum":["aggregation","field"]},"fieldSource":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}},"required":["name","column","type"]}}},"required":["rows","columns"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/export":{"get":{"description":"export a project by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"boolean","default":true},"required":false,"name":"includeData","in":"query"}],"responses":{"200":{"description":"export successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Export project","sidebarTitle":"Export project","description":"Export a project by its ID."}}}},"/template/create":{"post":{"description":"create a template","tags":["template"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"}}}}}},"responses":{"201":{"description":"Successfully create template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/template/create \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"category\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/create';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"category\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/create',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', category: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"category\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/template/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/notify/{token}":{"post":{"description":"Get Attachment information","tags":["attachments"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"},{"schema":{"type":"string"},"required":false,"name":"filename","in":"query"}],"responses":{"201":{"description":"Attachment information","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url 'https://app.teable.ai/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/{token}":{"get":{"description":"Upload attachment","tags":["attachments"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"},{"schema":{"type":"string","description":"File name for download"},"required":false,"description":"File name for download","name":"filename","in":"query"}],"responses":{"200":{"description":""}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/signature":{"post":{"description":"Retrieve upload signature.","tags":["attachments"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"contentType":{"type":"string","example":"image/png","description":"Mime type"},"contentLength":{"type":"number","example":123,"description":"File size"},"expiresIn":{"type":"number","example":3600,"description":"Token expire time, seconds"},"hash":{"type":"string","example":"xxxxxxxx","description":"File hash"},"type":{"type":"integer","enum":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"example":1,"description":"Type"},"baseId":{"type":"string"}},"required":["contentType","contentLength","type"]}}}},"responses":{"201":{"description":"return the upload URL and the key.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","example":"https://example.com/attachment/upload","description":"Upload url"},"uploadMethod":{"type":"string","example":"POST","description":"Upload method"},"token":{"type":"string","example":"xxxxxxxx","description":"Secret key"},"requestHeaders":{"type":"object","additionalProperties":{"nullable":true},"example":{"Content-Type":"image/png"}}},"required":["url","uploadMethod","token","requestHeaders"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/attachments/signature \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"contentType\":\"image/png\",\"contentLength\":123,\"expiresIn\":3600,\"hash\":\"xxxxxxxx\",\"type\":1,\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/signature';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"contentType\":\"image/png\",\"contentLength\":123,\"expiresIn\":3600,\"hash\":\"xxxxxxxx\",\"type\":1,\"baseId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/attachments/signature',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n contentType: 'image/png',\n contentLength: 123,\n expiresIn: 3600,\n hash: 'xxxxxxxx',\n type: 1,\n baseId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"contentType\\\":\\\"image/png\\\",\\\"contentLength\\\":123,\\\"expiresIn\\\":3600,\\\"hash\\\":\\\"xxxxxxxx\\\",\\\"type\\\":1,\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/attachments/signature\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/upload/{token}":{"post":{"description":"Upload attachment","tags":["attachments"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"}],"requestBody":{"description":"upload attachment","required":true,"content":{"application/json":{"schema":{"type":"string","format":"binary"}}}},"responses":{"201":{"description":"Upload successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/attachments/upload/%7Btoken%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '\"string\"'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/upload/%7Btoken%7D';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '\"string\"'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/attachments/upload/%7Btoken%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify('string'));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"\\\"string\\\"\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/attachments/upload/%7Btoken%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}":{"patch":{"description":"update a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"cover":{"type":"object","nullable":true,"properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]}},"required":["token","size","url","path","mimetype","name","id"]},"isPublished":{"type":"boolean"},"featured":{"type":"boolean"},"isSystem":{"type":"boolean"},"baseId":{"type":"string"},"markdownDescription":{"type":"string"}}}}}},"responses":{"201":{"description":"Successfully update template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"categoryId\":[\"string\"],\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"isPublished\":true,\"featured\":true,\"isSystem\":true,\"baseId\":\"string\",\"markdownDescription\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"categoryId\":[\"string\"],\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"isPublished\":true,\"featured\":true,\"isSystem\":true,\"baseId\":\"string\",\"markdownDescription\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n categoryId: ['string'],\n cover: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n name: 'string',\n id: 'string',\n thumbnailPath: {lg: 'string', sm: 'string'}\n },\n isPublished: true,\n featured: true,\n isSystem: true,\n baseId: 'string',\n markdownDescription: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"categoryId\\\":[\\\"string\\\"],\\\"cover\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"name\\\":\\\"string\\\",\\\"id\\\":\\\"string\\\",\\\"thumbnailPath\\\":{\\\"lg\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\"}},\\\"isPublished\\\":true,\\\"featured\\\":true,\\\"isSystem\\\":true,\\\"baseId\\\":\\\"string\\\",\\\"markdownDescription\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/template/%7BtemplateId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully delete template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/template/%7BtemplateId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"get template detail by templateId","summary":"get template detail by templateId","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"boolean","nullable":true},"required":false,"name":"featured","in":"query"},{"schema":{"type":"string"},"required":false,"name":"categoryId","in":"query"}],"responses":{"201":{"description":"Successfully get template detail.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"isSystem":{"type":"boolean"},"featured":{"type":"boolean"},"isPublished":{"type":"boolean"},"snapshot":{"type":"object","properties":{"baseId":{"type":"string"},"snapshotTime":{"type":"string","format":"date-time"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["baseId","snapshotTime","spaceId","name"]},"description":{"type":"string"},"baseId":{"type":"string"},"cover":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]},"presignedUrl":{"type":"string"}},"required":["token","size","url","path","mimetype","name","id","presignedUrl"]},"usageCount":{"type":"number"},"markdownDescription":{"type":"string"},"publishInfo":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true},"defaultUrl":{"type":"string"}}},"visitCount":{"type":"number"},"createdBy":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"},"email":{"type":"string"}},"required":["id"]}},"required":["id","snapshot","cover","usageCount","visitCount","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template":{"get":{"description":"get template list","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"number","nullable":true,"default":0,"example":0,"description":"The templates count you want to skip"},"required":false,"description":"The templates count you want to skip","name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"default":300,"example":300,"description":"The templates count you want to take"},"required":false,"description":"The templates count you want to take","name":"take","in":"query"}],"responses":{"201":{"description":"Successfully get template list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"isSystem":{"type":"boolean"},"featured":{"type":"boolean"},"isPublished":{"type":"boolean"},"snapshot":{"type":"object","properties":{"baseId":{"type":"string"},"snapshotTime":{"type":"string","format":"date-time"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["baseId","snapshotTime","spaceId","name"]},"description":{"type":"string"},"baseId":{"type":"string"},"cover":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]},"presignedUrl":{"type":"string"}},"required":["token","size","url","path","mimetype","name","id","presignedUrl"]},"usageCount":{"type":"number"},"markdownDescription":{"type":"string"},"publishInfo":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true},"defaultUrl":{"type":"string"}}},"visitCount":{"type":"number"},"createdBy":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"},"email":{"type":"string"}},"required":["id"]}},"required":["id","snapshot","cover","usageCount","visitCount","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/template?skip=0&take=300' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template?skip=0&take=300';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template?skip=0&take=300',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template?skip=0&take=300\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/published":{"get":{"description":"get published template list","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","default":true,"example":true,"description":"Whether to get featured templates"},"required":false,"description":"Whether to get featured templates","name":"featured","in":"query"},{"schema":{"type":"string","nullable":true,"example":"tc_123","description":"The template category id"},"required":false,"description":"The template category id","name":"categoryId","in":"query"},{"schema":{"type":"number","nullable":true,"default":0,"example":0,"description":"The templates count you want to skip"},"required":false,"description":"The templates count you want to skip","name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"default":100,"example":100,"description":"The templates count you want to take"},"required":false,"description":"The templates count you want to take","name":"take","in":"query"},{"schema":{"type":"string","example":"template","description":"The search keyword for template name"},"required":false,"description":"The search keyword for template name","name":"search","in":"query"}],"responses":{"201":{"description":"Successfully get published template list."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/snapshot":{"post":{"description":"create a template snapshot","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully create template snapshot."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D/snapshot \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/snapshot';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D/snapshot',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/template/%7BtemplateId%7D/snapshot\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/create":{"post":{"description":"create a template category","tags":["template"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Successfully create template category."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/template/category/create \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/create';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/category/create',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/template/category/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/list":{"get":{"description":"get template category list","tags":["template"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully get template category list."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/template/category/list \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/category/list',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/category/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/{templateCategoryId}":{"delete":{"description":"delete a template category","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateCategoryId","in":"path"}],"responses":{"201":{"description":"Successfully delete template category."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/category/%7BtemplateCategoryId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/template/category/%7BtemplateCategoryId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"update a template category name","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateCategoryId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Successfully update template category name."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/category/%7BtemplateCategoryId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/template/category/%7BtemplateCategoryId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/{templateCategoryId}/order":{"put":{"description":"Update template category order","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateCategoryId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/category/%7BtemplateCategoryId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/template/category/%7BtemplateCategoryId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/pin-top":{"patch":{"description":"pin top a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully pin top a template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D/pin-top \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/pin-top';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D/pin-top',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/template/%7BtemplateId%7D/pin-top\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/order":{"put":{"description":"Update template order","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/template/%7BtemplateId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/by-base/{baseId}":{"get":{"description":"get template by baseId","summary":"get template by baseId","tags":["template"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully get template.","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"isSystem":{"type":"boolean"},"featured":{"type":"boolean"},"isPublished":{"type":"boolean"},"snapshot":{"type":"object","properties":{"baseId":{"type":"string"},"snapshotTime":{"type":"string","format":"date-time"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["baseId","snapshotTime","spaceId","name"]},"description":{"type":"string"},"baseId":{"type":"string"},"cover":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]},"presignedUrl":{"type":"string"}},"required":["token","size","url","path","mimetype","name","id","presignedUrl"]},"usageCount":{"type":"number"},"markdownDescription":{"type":"string"},"publishInfo":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true},"defaultUrl":{"type":"string"}}},"visitCount":{"type":"number"},"createdBy":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"},"email":{"type":"string"}},"required":["id"]}},"required":["id","snapshot","cover","usageCount","visitCount","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/template/by-base/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/by-base/%7BbaseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/by-base/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/by-base/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/unpublish/{templateId}":{"delete":{"description":"unpublish a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully unpublish template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/template/unpublish/%7BtemplateId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/unpublish/%7BtemplateId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/unpublish/%7BtemplateId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/template/unpublish/%7BtemplateId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/visit":{"patch":{"description":"Increment template visit count","summary":"Increment template visit count","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"200":{"description":"Successfully incremented template visit count."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D/visit \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/visit';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D/visit',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/template/%7BtemplateId%7D/visit\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/permalink/{identifier}":{"get":{"description":"Get template redirect URL for permalink","summary":"Get template permalink redirect URL","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"identifier","in":"path"}],"responses":{"200":{"description":"Successfully resolved template permalink.","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/template/permalink/%7Bidentifier%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/permalink/%7Bidentifier%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/permalink/%7Bidentifier%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/permalink/%7Bidentifier%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/publish":{"put":{"description":"publish or unpublish a project","summary":"publish or unpublish a project","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"cover":{"type":"object","nullable":true,"properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]}},"required":["token","size","url","path","mimetype","name","id"]},"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true}},"required":["title","description"]}}}},"responses":{"200":{"description":"publish project successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/publish \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"title\":\"string\",\"description\":\"string\",\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"nodes\":[\"string\"],\"includeData\":true,\"defaultActiveNodeId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/publish';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"title\":\"string\",\"description\":\"string\",\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"nodes\":[\"string\"],\"includeData\":true,\"defaultActiveNodeId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/publish',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n title: 'string',\n description: 'string',\n cover: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n name: 'string',\n id: 'string',\n thumbnailPath: {lg: 'string', sm: 'string'}\n },\n nodes: ['string'],\n includeData: true,\n defaultActiveNodeId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"title\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"cover\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"name\\\":\\\"string\\\",\\\"id\\\":\\\"string\\\",\\\"thumbnailPath\\\":{\\\"lg\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\"}},\\\"nodes\\\":[\\\"string\\\"],\\\"includeData\\\":true,\\\"defaultActiveNodeId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/publish\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Publish or unpublish project","sidebarTitle":"Publish or unpublish project","description":"Change whether a project is published for sharing."}}}},"/base/import":{"post":{"description":"import a project","summary":"import a project","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notify":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]},"spaceId":{"type":"string"}},"required":["notify","spaceId"]}}}},"responses":{"200":{"description":"import successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/import \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/import',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n notify: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n presignedUrl: 'string'\n },\n spaceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"notify\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"presignedUrl\\\":\\\"string\\\"},\\\"spaceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Import project","sidebarTitle":"Import project","description":"Import a project into the target space."}}}},"/base/import-stream":{"post":{"description":"import a project with SSE progress stream","summary":"import a project with SSE progress events","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notify":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]},"spaceId":{"type":"string"}},"required":["notify","spaceId"]}}}},"responses":{"200":{"description":"SSE stream with progress events and final result"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/import-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/import-stream',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n notify: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n presignedUrl: 'string'\n },\n spaceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"notify\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"presignedUrl\\\":\\\"string\\\"},\\\"spaceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Import project with progress","sidebarTitle":"Import project with progress","description":"Import a project and receive progress updates through server-sent events."}}}},"/base/{baseId}/move":{"put":{"description":"move a project to another space","summary":"move a project to another space","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"}},"required":["spaceId"]}}}},"responses":{"200":{"description":"move to another space successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/move \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/move';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/move',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({spaceId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Move project","sidebarTitle":"Move project","description":"Move a project to another space."}}}},"/base/{baseId}/erd":{"get":{"description":"Get the erd of a project","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the erd of a project.","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"},"crossBaseId":{"type":"string"},"crossBaseName":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."}},"required":["id","name","type"]}}},"required":["id","name","fields"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"tableId":{"type":"string"},"tableName":{"type":"string"},"fieldId":{"type":"string"},"fieldName":{"type":"string"}},"required":["tableId","tableName","fieldId","fieldName"]},"target":{"type":"object","properties":{"tableId":{"type":"string"},"tableName":{"type":"string"},"fieldId":{"type":"string"},"fieldName":{"type":"string"}},"required":["tableId","tableName","fieldId","fieldName"]},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"]},"isOneWay":{"type":"boolean"},"type":{"anyOf":[{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},{"type":"string","enum":["lookup"]}]}},"required":["source","target","type"]}}},"required":["baseId","nodes","edges"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/erd \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/erd';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/erd',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/erd\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project relationship diagram","sidebarTitle":"Get project relationship diagram","description":"Retrieve the entity relationship diagram for a project."}}}},"/space/{spaceId}/base":{"get":{"description":"Get project list by query","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of project.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/base \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"List projects in space","sidebarTitle":"List projects in space","description":"List projects in the specified space using the supplied query."}}}},"/space/{spaceId}/permanent":{"delete":{"description":"Permanently delete a space by spaceId","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Permanently deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/mail-sender/test-transport-config":{"post":{"description":"Test mail transporter","tags":["mail"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"to":{"type":"string","format":"email"},"message":{"type":"string"},"transportConfig":{"type":"object","properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}},"required":["to","transportConfig"]}}}},"responses":{"200":{"description":"Test mail transporter successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/mail-sender/test-transport-config \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"to\":\"user@example.com\",\"message\":\"string\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/mail-sender/test-transport-config';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"to\":\"user@example.com\",\"message\":\"string\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/mail-sender/test-transport-config',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n to: 'user@example.com',\n message: 'string',\n transportConfig: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"to\\\":\\\"user@example.com\\\",\\\"message\\\":\\\"string\\\",\\\"transportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/mail-sender/test-transport-config\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting":{"patch":{"description":"Get the instance settings","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"disallowSignUp":{"type":"boolean"},"disallowSpaceCreation":{"type":"boolean"},"disallowSpaceInvitation":{"type":"boolean"},"enableEmailVerification":{"type":"boolean"},"enableCreditReward":{"type":"boolean"},"aiConfig":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"enable":{"type":"boolean"}}},"enableWaitlist":{"type":"boolean"},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}},"brandName":{"type":"string"},"canaryConfig":{"type":"object","properties":{"enabled":{"type":"boolean"},"spaceIds":{"type":"array","items":{"type":"string"},"default":[]},"forceV2All":{"type":"boolean"}},"required":["enabled"]},"notifyMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]},"automationMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}}}}}},"responses":{"200":{"description":"Update settings successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/setting \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"disallowSignUp\":true,\"disallowSpaceCreation\":true,\"disallowSpaceInvitation\":true,\"enableEmailVerification\":true,\"enableCreditReward\":true,\"aiConfig\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"enable\":true},\"enableWaitlist\":true,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"},\"brandName\":\"string\",\"canaryConfig\":{\"enabled\":true,\"spaceIds\":[],\"forceV2All\":true},\"notifyMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}},\"automationMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"disallowSignUp\":true,\"disallowSpaceCreation\":true,\"disallowSpaceInvitation\":true,\"enableEmailVerification\":true,\"enableCreditReward\":true,\"aiConfig\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"enable\":true},\"enableWaitlist\":true,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"},\"brandName\":\"string\",\"canaryConfig\":{\"enabled\":true,\"spaceIds\":[],\"forceV2All\":true},\"notifyMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}},\"automationMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n disallowSignUp: true,\n disallowSpaceCreation: true,\n disallowSpaceInvitation: true,\n enableEmailVerification: true,\n enableCreditReward: true,\n aiConfig: {\n llmProviders: [],\n embeddingModel: 'string',\n translationModel: 'string',\n chatModel: {\n lg: 'string',\n md: 'string',\n sm: 'string',\n ability: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n }\n },\n gatewayModels: [\n {\n id: 'string',\n label: 'string',\n enabled: true,\n capabilities: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n },\n pricing: {\n input: 'string',\n output: 'string',\n inputCacheRead: 'string',\n inputCacheWrite: 'string',\n reasoning: 'string',\n image: 'string',\n webSearch: 'string'\n },\n rates: {\n inputRate: 0,\n outputRate: 0,\n cacheReadRate: 0,\n cacheWriteRate: 0,\n reasoningRate: 0,\n imageRate: 0,\n webSearchRate: 0\n },\n isImageModel: true,\n defaultFor: ['chatLg'],\n testedAt: 0,\n ownedBy: 'alibaba',\n modelType: 'language',\n tags: ['reasoning'],\n contextWindow: 0,\n maxTokens: 0,\n description: 'string'\n }\n ],\n capabilities: {disableActions: ['string']},\n aiGatewayApiKey: 'string',\n aiGatewayBaseUrl: 'http://example.com',\n attachmentTest: {\n urlMode: {success: true, errorMessage: 'string'},\n base64Mode: {success: true, errorMessage: 'string'},\n testedAt: 'string',\n testedOrigin: 'string',\n recommendedMode: 'url'\n },\n attachmentTransferMode: 'url',\n aiGatewayApiKeys: ['string'],\n vertexByokCredential: {\n project: 'string',\n location: 'string',\n googleCredentials: {privateKey: 'string', clientEmail: 'string'}\n },\n concurrencyGroups: [{id: 'string', name: 'string', taskTypes: [], keys: [], perKey: 5}],\n concurrencyPerKey: 1,\n enable: true\n },\n enableWaitlist: true,\n appConfig: {\n apiKey: 'string',\n vercelToken: 'string',\n customDomain: 'string',\n creditCount: 0,\n v0BaseUrl: 'http://example.com',\n vercelBaseUrl: 'http://example.com'\n },\n brandName: 'string',\n canaryConfig: {enabled: true, spaceIds: [], forceV2All: true},\n notifyMailTransportConfig: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n },\n automationMailTransportConfig: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"disallowSignUp\\\":true,\\\"disallowSpaceCreation\\\":true,\\\"disallowSpaceInvitation\\\":true,\\\"enableEmailVerification\\\":true,\\\"enableCreditReward\\\":true,\\\"aiConfig\\\":{\\\"llmProviders\\\":[],\\\"embeddingModel\\\":\\\"string\\\",\\\"translationModel\\\":\\\"string\\\",\\\"chatModel\\\":{\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true}},\\\"gatewayModels\\\":[{\\\"id\\\":\\\"string\\\",\\\"label\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"capabilities\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"pricing\\\":{\\\"input\\\":\\\"string\\\",\\\"output\\\":\\\"string\\\",\\\"inputCacheRead\\\":\\\"string\\\",\\\"inputCacheWrite\\\":\\\"string\\\",\\\"reasoning\\\":\\\"string\\\",\\\"image\\\":\\\"string\\\",\\\"webSearch\\\":\\\"string\\\"},\\\"rates\\\":{\\\"inputRate\\\":0,\\\"outputRate\\\":0,\\\"cacheReadRate\\\":0,\\\"cacheWriteRate\\\":0,\\\"reasoningRate\\\":0,\\\"imageRate\\\":0,\\\"webSearchRate\\\":0},\\\"isImageModel\\\":true,\\\"defaultFor\\\":[\\\"chatLg\\\"],\\\"testedAt\\\":0,\\\"ownedBy\\\":\\\"alibaba\\\",\\\"modelType\\\":\\\"language\\\",\\\"tags\\\":[\\\"reasoning\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\"}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"]},\\\"aiGatewayApiKey\\\":\\\"string\\\",\\\"aiGatewayBaseUrl\\\":\\\"http://example.com\\\",\\\"attachmentTest\\\":{\\\"urlMode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"base64Mode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"testedAt\\\":\\\"string\\\",\\\"testedOrigin\\\":\\\"string\\\",\\\"recommendedMode\\\":\\\"url\\\"},\\\"attachmentTransferMode\\\":\\\"url\\\",\\\"aiGatewayApiKeys\\\":[\\\"string\\\"],\\\"vertexByokCredential\\\":{\\\"project\\\":\\\"string\\\",\\\"location\\\":\\\"string\\\",\\\"googleCredentials\\\":{\\\"privateKey\\\":\\\"string\\\",\\\"clientEmail\\\":\\\"string\\\"}},\\\"concurrencyGroups\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"taskTypes\\\":[],\\\"keys\\\":[],\\\"perKey\\\":5}],\\\"concurrencyPerKey\\\":1,\\\"enable\\\":true},\\\"enableWaitlist\\\":true,\\\"appConfig\\\":{\\\"apiKey\\\":\\\"string\\\",\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"creditCount\\\":0,\\\"v0BaseUrl\\\":\\\"http://example.com\\\",\\\"vercelBaseUrl\\\":\\\"http://example.com\\\"},\\\"brandName\\\":\\\"string\\\",\\\"canaryConfig\\\":{\\\"enabled\\\":true,\\\"spaceIds\\\":[],\\\"forceV2All\\\":true},\\\"notifyMailTransportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}},\\\"automationMailTransportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/setting\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get the instance settings","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the instance settings.","content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string"},"brandName":{"type":"string","nullable":true},"brandLogo":{"type":"string","nullable":true},"disallowSignUp":{"type":"boolean","nullable":true},"disallowSpaceCreation":{"type":"boolean","nullable":true},"disallowSpaceInvitation":{"type":"boolean","nullable":true},"disallowDashboard":{"type":"boolean","nullable":true},"enableEmailVerification":{"type":"boolean","nullable":true},"enableWaitlist":{"type":"boolean","nullable":true},"enableCreditReward":{"type":"boolean","nullable":true},"aiConfig":{"type":"object","nullable":true,"properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"enable":{"type":"boolean"}}},"notifyMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]},"automationMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]},"appConfig":{"type":"object","nullable":true,"properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}},"canaryConfig":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"spaceIds":{"type":"array","items":{"type":"string"},"default":[]},"forceV2All":{"type":"boolean"}},"required":["enabled"]},"trashCleanupEnabledAt":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["instanceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/public":{"get":{"description":"Get the public instance settings","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the public instance settings.","content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string"},"brandName":{"type":"string","nullable":true},"brandLogo":{"type":"string","nullable":true},"disallowSignUp":{"type":"boolean","nullable":true},"disallowSpaceCreation":{"type":"boolean","nullable":true},"disallowSpaceInvitation":{"type":"boolean","nullable":true},"disallowDashboard":{"type":"boolean","nullable":true},"enableEmailVerification":{"type":"boolean","nullable":true},"enableWaitlist":{"type":"boolean","nullable":true},"createdTime":{"type":"string"},"aiConfig":{"type":"object","nullable":true,"properties":{"enable":{"type":"boolean"},"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"}},"required":["type","name"]}},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}}},"required":["enable","llmProviders"]},"appGenerationEnabled":{"type":"boolean"},"turnstileSiteKey":{"type":"string","nullable":true},"changeEmailSendCodeMailRate":{"type":"number"},"resetPasswordSendMailRate":{"type":"number"},"signupVerificationSendCodeMailRate":{"type":"number"},"enableCreditReward":{"type":"boolean"}},"required":["instanceId","aiConfig"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/public \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/public';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/public',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting/public\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/logo":{"patch":{"description":"Upload logo","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"Successfully upload logo.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/setting/logo \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: multipart/form-data' \\\n --form file=string"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/logo';\nconst form = new FormData();\nform.append('file', 'string');\n\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/logo',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/setting/logo\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/test-llm":{"post":{"description":"Test LLM provider configuration","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"modelKey":{"type":"string"},"ability":{"type":"array","items":{"type":"string","enum":["image","pdf","webSearch","toolCall","reasoning","imageGeneration"]}},"testImageGeneration":{"type":"boolean"},"testImageToImage":{"type":"boolean"}},"required":["type","name","apiKey","baseUrl"]}}}},"responses":{"200":{"description":"Test result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"response":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/setting/test-llm \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"modelKey\":\"string\",\"ability\":[\"image\"],\"testImageGeneration\":true,\"testImageToImage\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/test-llm';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"modelKey\":\"string\",\"ability\":[\"image\"],\"testImageGeneration\":true,\"testImageToImage\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/test-llm',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'openai',\n name: 'string',\n apiKey: 'string',\n baseUrl: 'http://example.com',\n models: '',\n modelKey: 'string',\n ability: ['image'],\n testImageGeneration: true,\n testImageToImage: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"openai\\\",\\\"name\\\":\\\"string\\\",\\\"apiKey\\\":\\\"string\\\",\\\"baseUrl\\\":\\\"http://example.com\\\",\\\"models\\\":\\\"\\\",\\\"modelKey\\\":\\\"string\\\",\\\"ability\\\":[\\\"image\\\"],\\\"testImageGeneration\\\":true,\\\"testImageToImage\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/setting/test-llm\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/batch-test-llm":{"post":{"description":"Batch test all configured LLM models to verify compatibility with AI field features","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"providers":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"}},"required":["type","name","apiKey","baseUrl","isInstance"]}}}}}}},"responses":{"200":{"description":"Batch test results","content":{"application/json":{"schema":{"type":"object","properties":{"totalModels":{"type":"number"},"testedModels":{"type":"number"},"successCount":{"type":"number"},"failedCount":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"modelKey":{"type":"string"},"providerName":{"type":"string"},"providerType":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"model":{"type":"string"},"success":{"type":"boolean"},"error":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}},"required":["modelKey","providerName","providerType","model","success"]}}},"required":["totalModels","testedModels","successCount","failedCount","results"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/setting/batch-test-llm \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"providers\":[{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"isInstance\":true}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/batch-test-llm';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"providers\":[{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"isInstance\":true}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/batch-test-llm',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n providers: [\n {\n type: 'openai',\n name: 'string',\n apiKey: 'string',\n baseUrl: 'http://example.com',\n models: '',\n isInstance: true\n }\n ]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"providers\\\":[{\\\"type\\\":\\\"openai\\\",\\\"name\\\":\\\"string\\\",\\\"apiKey\\\":\\\"string\\\",\\\"baseUrl\\\":\\\"http://example.com\\\",\\\"models\\\":\\\"\\\",\\\"isInstance\\\":true}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/setting/batch-test-llm\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/test-api-key":{"post":{"description":"Test API key validity for AI Gateway or v0, optionally test attachment transfer modes","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["aiGateway","v0","vercel"]},"apiKey":{"type":"string"},"baseUrl":{"type":"string"},"testAttachment":{"type":"boolean"}},"required":["type","apiKey"]}}}},"responses":{"200":{"description":"Test result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","need_credit_card","insufficient_quota","network_error","unknown"]},"message":{"type":"string"}},"required":["code"]},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"recommendedMode":{"type":"string","enum":["url","base64"]},"testedOrigin":{"type":"string"}}}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/setting/test-api-key \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"aiGateway\",\"apiKey\":\"string\",\"baseUrl\":\"string\",\"testAttachment\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/test-api-key';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"aiGateway\",\"apiKey\":\"string\",\"baseUrl\":\"string\",\"testAttachment\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/test-api-key',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({type: 'aiGateway', apiKey: 'string', baseUrl: 'string', testAttachment: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"aiGateway\\\",\\\"apiKey\\\":\\\"string\\\",\\\"baseUrl\\\":\\\"string\\\",\\\"testAttachment\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/setting/test-api-key\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/test-public-access":{"get":{"description":"Test if this Teable instance is publicly accessible from the internet","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Public access test result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"publicOrigin":{"type":"string"},"error":{"type":"string"},"storageCheck":{"type":"object","properties":{"success":{"type":"boolean"},"storageUrl":{"type":"string"},"error":{"type":"string"}},"required":["success"]}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/test-public-access \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/test-public-access';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/test-public-access',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting/test-public-access\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/set-mail-transport-config":{"put":{"description":"Set mail transporter","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","enum":["notifyMailTransportConfig"]},{"type":"string","enum":["automationMailTransportConfig"]}]},"transportConfig":{"type":"object","properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}},"required":["name","transportConfig"]}}}},"responses":{"200":{"description":"Set mail transporter successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","enum":["notifyMailTransportConfig"]},{"type":"string","enum":["automationMailTransportConfig"]}]},"transportConfig":{"type":"object","properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}},"required":["name","transportConfig"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/admin/setting/set-mail-transport-config \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"notifyMailTransportConfig\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/set-mail-transport-config';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"notifyMailTransportConfig\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/set-mail-transport-config',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'notifyMailTransportConfig',\n transportConfig: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"notifyMailTransportConfig\\\",\\\"transportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/admin/setting/set-mail-transport-config\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/ai-key-stats":{"get":{"description":"Get per-key usage statistics for AI Gateway API keys","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Key statistics by group","content":{"application/json":{"schema":{"type":"object","properties":{"groups":{"type":"object","additionalProperties":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"fingerprint":{"type":"string"},"totalRequests":{"type":"number"},"totalFailures":{"type":"number"},"activeRequests":{"type":"number"},"lastUsedAt":{"type":"number","nullable":true},"isActive":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["index","fingerprint","totalRequests","totalFailures","activeRequests","lastUsedAt","isActive","lastError"]}},"totalSlots":{"type":"number"},"activeSlots":{"type":"number"},"waitingCount":{"type":"number"}},"required":["keys","totalSlots","activeSlots","waitingCount"]}}},"required":["groups"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/ai-key-stats \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/ai-key-stats';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/ai-key-stats',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting/ai-key-stats\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/plugin/{pluginId}/publish":{"patch":{"description":"Publish a plugin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin published successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/publish \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/publish';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/plugin/%7BpluginId%7D/publish',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/plugin/%7BpluginId%7D/publish\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/plugin/{pluginId}/unpublish":{"patch":{"description":"Admin unpublish a plugin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin unpublished successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/unpublish \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/unpublish';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/plugin/%7BpluginId%7D/unpublish',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/plugin/%7BpluginId%7D/unpublish\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/enterprise-license/status":{"get":{"description":"Get enterprise license expiration status","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns enterprise license expiration status.","content":{"application/json":{"schema":{"type":"object","properties":{"expiredTime":{"type":"string","nullable":true}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/enterprise-license/status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license/status';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/enterprise-license/status',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/enterprise-license/status\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/integration":{"get":{"description":"Get integration list by query","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of integration.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"type":{"type":"string","enum":["AI"]},"enable":{"type":"boolean"},"config":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}}}},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","spaceId","type","config","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/integration \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/integration',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/integration\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a integration to a space","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["AI"]},"enable":{"type":"boolean"},"config":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}}}}},"required":["type","config"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/integration \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"AI\",\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"AI\",\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/integration',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'AI',\n enable: true,\n config: {\n llmProviders: [],\n embeddingModel: 'string',\n translationModel: 'string',\n chatModel: {\n lg: 'string',\n md: 'string',\n sm: 'string',\n ability: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n }\n },\n gatewayModels: [\n {\n id: 'string',\n label: 'string',\n enabled: true,\n capabilities: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n },\n pricing: {\n input: 'string',\n output: 'string',\n inputCacheRead: 'string',\n inputCacheWrite: 'string',\n reasoning: 'string',\n image: 'string',\n webSearch: 'string'\n },\n rates: {\n inputRate: 0,\n outputRate: 0,\n cacheReadRate: 0,\n cacheWriteRate: 0,\n reasoningRate: 0,\n imageRate: 0,\n webSearchRate: 0\n },\n isImageModel: true,\n defaultFor: ['chatLg'],\n testedAt: 0,\n ownedBy: 'alibaba',\n modelType: 'language',\n tags: ['reasoning'],\n contextWindow: 0,\n maxTokens: 0,\n description: 'string'\n }\n ],\n capabilities: {disableActions: ['string']},\n aiGatewayApiKey: 'string',\n aiGatewayBaseUrl: 'http://example.com',\n attachmentTest: {\n urlMode: {success: true, errorMessage: 'string'},\n base64Mode: {success: true, errorMessage: 'string'},\n testedAt: 'string',\n testedOrigin: 'string',\n recommendedMode: 'url'\n },\n attachmentTransferMode: 'url',\n aiGatewayApiKeys: ['string'],\n vertexByokCredential: {\n project: 'string',\n location: 'string',\n googleCredentials: {privateKey: 'string', clientEmail: 'string'}\n },\n concurrencyGroups: [{id: 'string', name: 'string', taskTypes: [], keys: [], perKey: 5}],\n concurrencyPerKey: 1,\n appConfig: {\n apiKey: 'string',\n vercelToken: 'string',\n customDomain: 'string',\n creditCount: 0,\n v0BaseUrl: 'http://example.com',\n vercelBaseUrl: 'http://example.com'\n }\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"AI\\\",\\\"enable\\\":true,\\\"config\\\":{\\\"llmProviders\\\":[],\\\"embeddingModel\\\":\\\"string\\\",\\\"translationModel\\\":\\\"string\\\",\\\"chatModel\\\":{\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true}},\\\"gatewayModels\\\":[{\\\"id\\\":\\\"string\\\",\\\"label\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"capabilities\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"pricing\\\":{\\\"input\\\":\\\"string\\\",\\\"output\\\":\\\"string\\\",\\\"inputCacheRead\\\":\\\"string\\\",\\\"inputCacheWrite\\\":\\\"string\\\",\\\"reasoning\\\":\\\"string\\\",\\\"image\\\":\\\"string\\\",\\\"webSearch\\\":\\\"string\\\"},\\\"rates\\\":{\\\"inputRate\\\":0,\\\"outputRate\\\":0,\\\"cacheReadRate\\\":0,\\\"cacheWriteRate\\\":0,\\\"reasoningRate\\\":0,\\\"imageRate\\\":0,\\\"webSearchRate\\\":0},\\\"isImageModel\\\":true,\\\"defaultFor\\\":[\\\"chatLg\\\"],\\\"testedAt\\\":0,\\\"ownedBy\\\":\\\"alibaba\\\",\\\"modelType\\\":\\\"language\\\",\\\"tags\\\":[\\\"reasoning\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\"}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"]},\\\"aiGatewayApiKey\\\":\\\"string\\\",\\\"aiGatewayBaseUrl\\\":\\\"http://example.com\\\",\\\"attachmentTest\\\":{\\\"urlMode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"base64Mode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"testedAt\\\":\\\"string\\\",\\\"testedOrigin\\\":\\\"string\\\",\\\"recommendedMode\\\":\\\"url\\\"},\\\"attachmentTransferMode\\\":\\\"url\\\",\\\"aiGatewayApiKeys\\\":[\\\"string\\\"],\\\"vertexByokCredential\\\":{\\\"project\\\":\\\"string\\\",\\\"location\\\":\\\"string\\\",\\\"googleCredentials\\\":{\\\"privateKey\\\":\\\"string\\\",\\\"clientEmail\\\":\\\"string\\\"}},\\\"concurrencyGroups\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"taskTypes\\\":[],\\\"keys\\\":[],\\\"perKey\\\":5}],\\\"concurrencyPerKey\\\":1,\\\"appConfig\\\":{\\\"apiKey\\\":\\\"string\\\",\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"creditCount\\\":0,\\\"v0BaseUrl\\\":\\\"http://example.com\\\",\\\"vercelBaseUrl\\\":\\\"http://example.com\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/integration\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/integration/{integrationId}":{"patch":{"description":"Update a integration to a space","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enable":{"type":"boolean"},"config":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}}}}}}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n enable: true,\n config: {\n llmProviders: [],\n embeddingModel: 'string',\n translationModel: 'string',\n chatModel: {\n lg: 'string',\n md: 'string',\n sm: 'string',\n ability: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n }\n },\n gatewayModels: [\n {\n id: 'string',\n label: 'string',\n enabled: true,\n capabilities: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n },\n pricing: {\n input: 'string',\n output: 'string',\n inputCacheRead: 'string',\n inputCacheWrite: 'string',\n reasoning: 'string',\n image: 'string',\n webSearch: 'string'\n },\n rates: {\n inputRate: 0,\n outputRate: 0,\n cacheReadRate: 0,\n cacheWriteRate: 0,\n reasoningRate: 0,\n imageRate: 0,\n webSearchRate: 0\n },\n isImageModel: true,\n defaultFor: ['chatLg'],\n testedAt: 0,\n ownedBy: 'alibaba',\n modelType: 'language',\n tags: ['reasoning'],\n contextWindow: 0,\n maxTokens: 0,\n description: 'string'\n }\n ],\n capabilities: {disableActions: ['string']},\n aiGatewayApiKey: 'string',\n aiGatewayBaseUrl: 'http://example.com',\n attachmentTest: {\n urlMode: {success: true, errorMessage: 'string'},\n base64Mode: {success: true, errorMessage: 'string'},\n testedAt: 'string',\n testedOrigin: 'string',\n recommendedMode: 'url'\n },\n attachmentTransferMode: 'url',\n aiGatewayApiKeys: ['string'],\n vertexByokCredential: {\n project: 'string',\n location: 'string',\n googleCredentials: {privateKey: 'string', clientEmail: 'string'}\n },\n concurrencyGroups: [{id: 'string', name: 'string', taskTypes: [], keys: [], perKey: 5}],\n concurrencyPerKey: 1,\n appConfig: {\n apiKey: 'string',\n vercelToken: 'string',\n customDomain: 'string',\n creditCount: 0,\n v0BaseUrl: 'http://example.com',\n vercelBaseUrl: 'http://example.com'\n }\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"enable\\\":true,\\\"config\\\":{\\\"llmProviders\\\":[],\\\"embeddingModel\\\":\\\"string\\\",\\\"translationModel\\\":\\\"string\\\",\\\"chatModel\\\":{\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true}},\\\"gatewayModels\\\":[{\\\"id\\\":\\\"string\\\",\\\"label\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"capabilities\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"pricing\\\":{\\\"input\\\":\\\"string\\\",\\\"output\\\":\\\"string\\\",\\\"inputCacheRead\\\":\\\"string\\\",\\\"inputCacheWrite\\\":\\\"string\\\",\\\"reasoning\\\":\\\"string\\\",\\\"image\\\":\\\"string\\\",\\\"webSearch\\\":\\\"string\\\"},\\\"rates\\\":{\\\"inputRate\\\":0,\\\"outputRate\\\":0,\\\"cacheReadRate\\\":0,\\\"cacheWriteRate\\\":0,\\\"reasoningRate\\\":0,\\\"imageRate\\\":0,\\\"webSearchRate\\\":0},\\\"isImageModel\\\":true,\\\"defaultFor\\\":[\\\"chatLg\\\"],\\\"testedAt\\\":0,\\\"ownedBy\\\":\\\"alibaba\\\",\\\"modelType\\\":\\\"language\\\",\\\"tags\\\":[\\\"reasoning\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\"}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"]},\\\"aiGatewayApiKey\\\":\\\"string\\\",\\\"aiGatewayBaseUrl\\\":\\\"http://example.com\\\",\\\"attachmentTest\\\":{\\\"urlMode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"base64Mode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"testedAt\\\":\\\"string\\\",\\\"testedOrigin\\\":\\\"string\\\",\\\"recommendedMode\\\":\\\"url\\\"},\\\"attachmentTransferMode\\\":\\\"url\\\",\\\"aiGatewayApiKeys\\\":[\\\"string\\\"],\\\"vertexByokCredential\\\":{\\\"project\\\":\\\"string\\\",\\\"location\\\":\\\"string\\\",\\\"googleCredentials\\\":{\\\"privateKey\\\":\\\"string\\\",\\\"clientEmail\\\":\\\"string\\\"}},\\\"concurrencyGroups\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"taskTypes\\\":[],\\\"keys\\\":[],\\\"perKey\\\":5}],\\\"concurrencyPerKey\\\":1,\\\"appConfig\\\":{\\\"apiKey\\\":\\\"string\\\",\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"creditCount\\\":0,\\\"v0BaseUrl\\\":\\\"http://example.com\\\",\\\"vercelBaseUrl\\\":\\\"http://example.com\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a integration by integrationId","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/search":{"get":{"description":"Search projects and nodes within a space","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","enum":["space","base","table","view","field","record","workflow","app","dashboard","folder"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"string","minLength":1},"required":true,"name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Returns the search results.","content":{"application/json":{"schema":{"type":"object","properties":{"list":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["space","base","table","view","field","record","workflow","app","dashboard","folder"]},"icon":{"type":"string","nullable":true},"baseId":{"type":"string"},"baseName":{"type":"string"},"createdTime":{"type":"string"},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","avatar"]}},"required":["id","name","type","icon","baseId","baseName","createdTime"]}},"total":{"type":"number"},"nextCursor":{"type":"string","nullable":true}},"required":["list","total","nextCursor"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash":{"get":{"description":"Get trash list for spaces or projects","tags":["trash"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"spaceId","in":"query"},{"schema":{"type":"string","enum":["space","base"]},"required":true,"name":"resourceType","in":"query"}],"responses":{"200":{"description":"Get trash successfully","content":{"application/json":{"schema":{"type":"object","properties":{"trashItems":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string","enum":["space","base","table","app","workflow"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceId","resourceType","deletedTime","deletedBy"]},{"type":"object","properties":{"id":{"type":"string"},"resourceIds":{"type":"array","items":{"type":"string"}},"resourceType":{"type":"string","enum":["view","field","record"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceIds","resourceType","deletedTime","deletedBy"]}]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"resourceMap":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["id","spaceId","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]}},"required":["id","name","type"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"isLookup":{"type":"boolean","nullable":true},"isConditionalLookup":{"type":"boolean","nullable":true},"options":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["id","name","type","isLookup"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}]}},"nextCursor":{"type":"string","nullable":true}},"required":["trashItems","userMap","resourceMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/items":{"get":{"description":"Get trash items for project or table","tags":["trash"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"query"},{"schema":{"type":"string","enum":["base","table"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Get trash successfully","content":{"application/json":{"schema":{"type":"object","properties":{"trashItems":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string","enum":["space","base","table","app","workflow"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceId","resourceType","deletedTime","deletedBy"]},{"type":"object","properties":{"id":{"type":"string"},"resourceIds":{"type":"array","items":{"type":"string"}},"resourceType":{"type":"string","enum":["view","field","record"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceIds","resourceType","deletedTime","deletedBy"]}]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"resourceMap":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["id","spaceId","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]}},"required":["id","name","type"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"isLookup":{"type":"boolean","nullable":true},"isConditionalLookup":{"type":"boolean","nullable":true},"options":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["id","name","type","isLookup"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}]}},"nextCursor":{"type":"string","nullable":true}},"required":["trashItems","userMap","resourceMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/reset-items":{"delete":{"description":"Reset trash items for a project or table","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"query"},{"schema":{"type":"string","enum":["base","table"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Reset successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Clear project or table trash","sidebarTitle":"Clear project or table trash","description":"Clear trash items for the specified project or table."}}}},"/trash/restore/{trashId}":{"post":{"description":"restore a space, project, table, etc.","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"trashId","in":"path"}],"responses":{"201":{"description":"Restored successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/trash/restore/%7BtrashId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/restore/%7BtrashId%7D';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/trash/restore/%7BtrashId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/trash/restore/%7BtrashId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/history":{"get":{"summary":"Get record history","description":"Retrieve the change history of a specific record, including field modifications and user information.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Get the history list for a record","content":{"application/json":{"schema":{"type":"object","properties":{"historyList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tableId":{"type":"string"},"recordId":{"type":"string"},"fieldId":{"type":"string"},"before":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"after":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"createdTime":{"type":"string"},"createdBy":{"type":"string"}},"required":["id","tableId","recordId","fieldId","before","after","createdTime","createdBy"]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"nextCursor":{"type":"string","nullable":true}},"required":["historyList","userMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/history \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/history';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/history',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/history\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/history":{"get":{"summary":"Get table records history","description":"Retrieve the change history of all records in a table, including field modifications and user information.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Get the history list of all records in a table","content":{"application/json":{"schema":{"type":"object","properties":{"historyList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tableId":{"type":"string"},"recordId":{"type":"string"},"fieldId":{"type":"string"},"before":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"after":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"createdTime":{"type":"string"},"createdBy":{"type":"string"}},"required":["id","tableId","recordId","fieldId","before","after","createdTime","createdBy"]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"nextCursor":{"type":"string","nullable":true}},"required":["historyList","userMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/history \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/history';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/history',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/history\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/uploadAttachment":{"post":{"summary":"Upload attachment","description":"Upload an attachment from a file or URL and append it to the cell","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string","description":"ID of an attachment field"},"required":true,"description":"ID of an attachment field","name":"fieldId","in":"path"}],"requestBody":{"description":"upload attachment","required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"fileUrl":{"type":"string"}}}}}},"responses":{"201":{"description":"Returns record data after update.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: multipart/form-data' \\\n --form file=string \\\n --form fileUrl=string"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment';\nconst form = new FormData();\nform.append('file', 'string');\nform.append('fileUrl', 'string');\n\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"fileUrl\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"fileUrl\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/insertAttachment":{"post":{"summary":"Insert attachments at anchor","description":"Insert attachments after the anchor in the cell (append to end if anchor not found or not provided)","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string","description":"ID of an attachment field"},"required":true,"description":"ID of an attachment field","name":"fieldId","in":"path"}],"requestBody":{"description":"Attachments to insert and optional anchor position","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"token":{"type":"string"},"size":{"type":"number"},"mimetype":{"type":"string"},"presignedUrl":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"},"smThumbnailUrl":{"type":"string"},"lgThumbnailUrl":{"type":"string"}},"required":["id","name","path","token","size","mimetype"]},"minItems":1},"anchorId":{"type":"string"}},"required":["attachments"]}}}},"responses":{"201":{"description":"Returns record data after update.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"attachments\":[{\"id\":\"string\",\"name\":\"string\",\"path\":\"string\",\"token\":\"string\",\"size\":0,\"mimetype\":\"string\",\"presignedUrl\":\"string\",\"width\":0,\"height\":0,\"smThumbnailUrl\":\"string\",\"lgThumbnailUrl\":\"string\"}],\"anchorId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"attachments\":[{\"id\":\"string\",\"name\":\"string\",\"path\":\"string\",\"token\":\"string\",\"size\":0,\"mimetype\":\"string\",\"presignedUrl\":\"string\",\"width\":0,\"height\":0,\"smThumbnailUrl\":\"string\",\"lgThumbnailUrl\":\"string\"}],\"anchorId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n attachments: [\n {\n id: 'string',\n name: 'string',\n path: 'string',\n token: 'string',\n size: 0,\n mimetype: 'string',\n presignedUrl: 'string',\n width: 0,\n height: 0,\n smThumbnailUrl: 'string',\n lgThumbnailUrl: 'string'\n }\n ],\n anchorId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachments\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"path\\\":\\\"string\\\",\\\"token\\\":\\\"string\\\",\\\"size\\\":0,\\\"mimetype\\\":\\\"string\\\",\\\"presignedUrl\\\":\\\"string\\\",\\\"width\\\":0,\\\"height\\\":0,\\\"smThumbnailUrl\\\":\\\"string\\\",\\\"lgThumbnailUrl\\\":\\\"string\\\"}],\\\"anchorId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/status":{"get":{"summary":"Get record status","description":"Retrieve the visibility and deletion status of a specific record.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"},"required":false,"description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details","name":"fieldKeyType","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"}],"responses":{"200":{"description":"List of records","content":{"application/json":{"schema":{"type":"object","properties":{"isVisible":{"type":"boolean"},"isDeleted":{"type":"boolean"}},"required":["isVisible","isDeleted"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/auto-fill":{"post":{"summary":"Auto-fill a cell by AI","description":"Automatically fill a cell in a specific record and field","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the updated record status","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/button-click":{"post":{"summary":"Button click","description":"Button click","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the clicked cell","content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string"},"tableId":{"type":"string"},"fieldId":{"type":"string"},"record":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}},"required":["runId","tableId","fieldId","record"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/button-reset":{"post":{"summary":"Button reset","description":"Button reset","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the reset cell","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/collaborators":{"get":{"description":"Get collaborators of a record.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["userId","userName","email"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/form-submit":{"post":{"summary":"Submit form","description":"Submit a record through a form view. This will trigger \"When form submitted\" automations.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","description":"Form view ID"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"typecast":{"type":"boolean"}},"required":["viewId","fields"]}}}},"responses":{"201":{"description":"Returns the created record.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/form-submit \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"viewId\":\"string\",\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/form-submit';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"viewId\":\"string\",\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/form-submit',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({viewId: 'string', fields: {property1: null, property2: null}, typecast: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"string\\\",\\\"fields\\\":{\\\"property1\\\":null,\\\"property2\\\":null},\\\"typecast\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/form-submit\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field":{"post":{"summary":"Create field","description":"Create a new field in the specified table with the given configuration","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"The id of the field that start with \"fld\", followed by exactly 16 alphanumeric characters `/^fld[\\da-zA-Z]{16}$/`. It is sometimes useful to specify an id at creation time","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]}}}},"responses":{"201":{"description":"Returns data about a field.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'singleSelect',\n name: 'string',\n unique: true,\n notNull: true,\n dbFieldName: 'string',\n isLookup: true,\n isConditionalLookup: true,\n description: 'this is a summary',\n lookupOptions: {\n foreignTableId: 'string',\n lookupFieldId: 'string',\n linkFieldId: 'string',\n filter: {}\n },\n options: {\n expression: 'countall({values})',\n timeZone: 'string',\n formatting: null,\n showAs: {type: 'url'}\n },\n aiConfig: {\n modelKey: 'string',\n isAutoFill: true,\n attachPrompt: 'string',\n type: 'extraction',\n sourceFieldId: 'string'\n },\n id: 'fldxxxxxxxxxxxxxxxx',\n order: {viewId: 'string', orderIndex: 0}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"},\\\"id\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"orderIndex\\\":0}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"List fields","description":"Retrieve a list of fields in a table with optional filtering","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","description":"The id of the view."},"required":false,"description":"The id of the view.","name":"viewId","in":"query"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"filterHidden","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"}],"responses":{"200":{"description":"Returns the list of field.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Delete multiple fields","description":"Permanently remove multiple fields from the specified table","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"fieldIds","in":"query"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}":{"delete":{"summary":"Delete field","description":"Permanently remove a field from the specified table","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"Get a field","description":"Retrieve detailed information about a specific field by its ID","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns data about a field.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"summary":"Update field","description":"Update common properties of a field (name, description, dbFieldName). For other property changes, use the convert field API","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."}}}}}},"responses":{"200":{"description":"Updated Successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"this is a summary\",\"dbFieldName\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"this is a summary\",\"dbFieldName\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'this is a summary', dbFieldName: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"this is a summary\\\",\\\"dbFieldName\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/convert":{"put":{"summary":"Convert field type","description":"Convert field to a different type with automatic type casting and symmetric field handling","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false},{"nullable":true}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."}},"required":["type"],"description":"Provide the complete field configuration including all properties, modified or not"}}}},"responses":{"200":{"description":"Returns field data after update.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'singleSelect',\n name: 'string',\n unique: true,\n notNull: true,\n dbFieldName: 'string',\n isLookup: true,\n isConditionalLookup: true,\n description: 'this is a summary',\n lookupOptions: {\n foreignTableId: 'string',\n lookupFieldId: 'string',\n linkFieldId: 'string',\n filter: {}\n },\n options: {\n expression: 'countall({values})',\n timeZone: 'string',\n formatting: null,\n showAs: {type: 'url'}\n },\n aiConfig: {\n modelKey: 'string',\n isAutoFill: true,\n attachPrompt: 'string',\n type: 'extraction',\n sourceFieldId: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/filter-link-records":{"get":{"description":"Getting associated records for a view filter configuration.","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns the view to filter the configured records.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/filter-link-records":{"get":{"summary":"Get linked records for filter","description":"Retrieve associated records that match the view filter configuration for a linked field","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns the link field to filter the configured records.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/auto-fill":{"post":{"summary":"Auto-fill a field by AI","description":"Automatically generate suggestions for filling a specific field","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"filter":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"orderBy":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"groupBy":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"mode":{"type":"string","enum":["all","emptyOnly"],"default":"all"}}}}}},"responses":{"200":{"description":"Returns the task ID for the auto-fill process","content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"type":"string","nullable":true},"rowCount":{"type":"number"},"processedCount":{"type":"number"},"isLimited":{"type":"boolean"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"viewId\":\"viwXXXXXXX\",\"filter\":\"string\",\"orderBy\":\"string\",\"groupBy\":\"string\",\"ignoreViewQuery\":\"string\",\"mode\":\"all\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"viewId\":\"viwXXXXXXX\",\"filter\":\"string\",\"orderBy\":\"string\",\"groupBy\":\"string\",\"ignoreViewQuery\":\"string\",\"mode\":\"all\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n viewId: 'viwXXXXXXX',\n filter: 'string',\n orderBy: 'string',\n groupBy: 'string',\n ignoreViewQuery: 'string',\n mode: 'all'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"filter\\\":\\\"string\\\",\\\"orderBy\\\":\\\"string\\\",\\\"groupBy\\\":\\\"string\\\",\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"mode\\\":\\\"all\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/stop-fill":{"post":{"summary":"Stop auto-fill a field by AI","description":"Stop auto-fill a field by AI","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Stop auto-fill a field by AI successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/duplicate":{"post":{"summary":"Duplicate field","description":"Duplicate field","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"viewId":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Returns duplicated field data","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"viewId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"viewId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', viewId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"viewId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/delete-references":{"get":{"description":"Get resources that reference the given fields (for delete impact analysis)","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"fieldIds","in":"query"}],"responses":{"200":{"description":"Returns the referenced resources for the given fields","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"workflowNodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"type":{"type":"string"},"category":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","name","base"]}},"required":["id","type","category","source"]}},"authorityMatrixRoles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"views":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","name","base"]}},"required":["id","name","type","source"]}},"dependentFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","name","base"]}},"required":["id","name","type","source"]}}},"required":["workflowNodes","authorityMatrixRoles","views","dependentFields"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view":{"post":{"description":"Create a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]}}}},"responses":{"201":{"description":"Returns data about a view.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n type: 'grid',\n description: 'string',\n order: 0,\n options: {\n rowHeight: 'short',\n fieldNameDisplayLines: 1,\n frozenColumnCount: 0,\n frozenFieldId: 'string'\n },\n sort: {sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true},\n filter: {},\n group: [{fieldId: 'string', order: 'asc'}],\n isLocked: true,\n shareId: 'string',\n enableShare: true,\n shareMeta: {\n allowCopy: true,\n includeHiddenField: true,\n password: 'string',\n includeRecords: true,\n submit: {allow: true, requireLogin: true}\n },\n columnMeta: {\n property1: {order: 0, width: 0, hidden: true, statisticFunc: 'count'},\n property2: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"type\\\":\\\"grid\\\",\\\"description\\\":\\\"string\\\",\\\"order\\\":0,\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"},\\\"sort\\\":{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true},\\\"filter\\\":{},\\\"group\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"isLocked\\\":true,\\\"shareId\\\":\\\"string\\\",\\\"enableShare\\\":true,\\\"shareMeta\\\":{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}},\\\"columnMeta\\\":{\\\"property1\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"},\\\"property2\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"Get view list","description":"Get view list","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns the list of view.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}":{"delete":{"description":"Delete a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns data about a view.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/manual-sort":{"put":{"description":"Update view raw order","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}}},"required":["sortObjs"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({sortObjs: [{fieldId: 'string', order: 'asc'}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/column-meta":{"put":{"description":"Update view column meta","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"Field ID"},"columnMeta":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"additionalProperties":false}]}},"required":["fieldId","columnMeta"]}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '[{\"fieldId\":\"string\",\"columnMeta\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}]'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '[{\"fieldId\":\"string\",\"columnMeta\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}]'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify([\n {\n fieldId: 'string',\n columnMeta: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n }\n]));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"[{\\\"fieldId\\\":\\\"string\\\",\\\"columnMeta\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}]\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/filter":{"put":{"description":"Update view filter","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","example":{"filter":{"filterSet":[{"isSymbol":false,"fieldId":"fldxxxxxxxxxxxxxxxx","value":"value","operator":"is"}],"conjunction":"and"}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"filter\":{\"filterSet\":[{\"isSymbol\":false,\"fieldId\":\"fldxxxxxxxxxxxxxxxx\",\"value\":\"value\",\"operator\":\"is\"}],\"conjunction\":\"and\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"filter\":{\"filterSet\":[{\"isSymbol\":false,\"fieldId\":\"fldxxxxxxxxxxxxxxxx\",\"value\":\"value\",\"operator\":\"is\"}],\"conjunction\":\"and\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/filter',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n filter: {\n filterSet: [\n {\n isSymbol: false,\n fieldId: 'fldxxxxxxxxxxxxxxxx',\n value: 'value',\n operator: 'is'\n }\n ],\n conjunction: 'and'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"filter\\\":{\\\"filterSet\\\":[{\\\"isSymbol\\\":false,\\\"fieldId\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"value\\\":\\\"value\\\",\\\"operator\\\":\\\"is\\\"}],\\\"conjunction\\\":\\\"and\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/filter\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/sort":{"put":{"description":"Update view sort condition","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/sort \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/sort';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/sort',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/sort\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/group":{"put":{"description":"Update view group condition","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/group \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '[{\"fieldId\":\"string\",\"order\":\"asc\"}]'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/group';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '[{\"fieldId\":\"string\",\"order\":\"asc\"}]'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/group',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify([{fieldId: 'string', order: 'asc'}]));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}]\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/group\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/options":{"patch":{"description":"Update view option","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]}},"required":["options"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/options \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/options';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/options',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n options: {\n rowHeight: 'short',\n fieldNameDisplayLines: 1,\n frozenColumnCount: 0,\n frozenFieldId: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/options\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/record-order":{"put":{"description":"Update record order in view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string","description":"Id of the record that you want to move other records around"},"position":{"type":"string","enum":["before","after"]},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":1000,"description":"Ids of those records you want to move","maxLength":1000}},"required":["anchorId","position","recordIds"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\",\"recordIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\",\"recordIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before', recordIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\",\\\"recordIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/name":{"put":{"description":"Update view name","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/name';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/description":{"put":{"description":"Update view description","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"}},"required":["description"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/description \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/description';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"description\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/description',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({description: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/description\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/share-meta":{"put":{"description":"Update view share meta","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n allowCopy: true,\n includeHiddenField: true,\n password: 'string',\n includeRecords: true,\n submit: {allow: true, requireLogin: true}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/refresh-share-id":{"post":{"description":"Refresh view share id","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"201":{"description":"Returns successfully refreshed view share id","content":{"application/json":{"schema":{"type":"object","properties":{"shareId":{"type":"string"}},"required":["shareId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/disable-share":{"post":{"description":"Disable view share","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"201":{"description":"Returns successfully disable view share"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/enable-share":{"post":{"description":"Enable view share","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"201":{"description":"Returns successfully enable view share","content":{"application/json":{"schema":{"type":"object","properties":{"shareId":{"type":"string"}},"required":["shareId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/plugin":{"post":{"description":"Install a plugin to a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["pluginId"]}}}},"responses":{"201":{"description":"Returns data about the installed plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"},"viewId":{"type":"string"}},"required":["pluginId","pluginInstallId","name","viewId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/plugin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/plugin';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/plugin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/plugin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/plugin/{pluginInstallId}":{"patch":{"description":"Update storage of a plugin in a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Returns data about the updated plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"tableId":{"type":"string"},"viewId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["tableId","viewId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/plugin":{"get":{"description":"Get a view install plugin by id","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns data about the view install plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["pluginId","pluginInstallId","baseId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/locked":{"put":{"description":"Update the locked status of the view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isLocked":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/locked \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"isLocked\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/locked';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"isLocked\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/locked',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({isLocked: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isLocked\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/locked\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/duplicate":{"post":{"description":"Duplicate a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]}}}},"responses":{"201":{"description":"Returns data about a view.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n type: 'grid',\n description: 'string',\n order: 0,\n options: {\n rowHeight: 'short',\n fieldNameDisplayLines: 1,\n frozenColumnCount: 0,\n frozenFieldId: 'string'\n },\n sort: {sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true},\n filter: {},\n group: [{fieldId: 'string', order: 'asc'}],\n isLocked: true,\n shareId: 'string',\n enableShare: true,\n shareMeta: {\n allowCopy: true,\n includeHiddenField: true,\n password: 'string',\n includeRecords: true,\n submit: {allow: true, requireLogin: true}\n },\n columnMeta: {\n property1: {order: 0, width: 0, hidden: true, statisticFunc: 'count'},\n property2: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"type\\\":\\\"grid\\\",\\\"description\\\":\\\"string\\\",\\\"order\\\":0,\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"},\\\"sort\\\":{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true},\\\"filter\\\":{},\\\"group\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"isLocked\\\":true,\\\"shareId\\\":\\\"string\\\",\\\"enableShare\\\":true,\\\"shareMeta\\\":{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}},\\\"columnMeta\\\":{\\\"property1\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"},\\\"property2\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation":{"get":{"summary":"Get aggregated statistics","description":"Returns statistical aggregations of table data based on specified functions and grouping criteria","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns aggregations list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"aggregations":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"total":{"type":"object","nullable":true,"properties":{"value":{"anyOf":[{"type":"string"},{"type":"number"},{"nullable":true}]},"aggFunc":{"type":"string","enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"]}},"required":["value","aggFunc"],"description":"Aggregations by all data in field"},"group":{"type":"object","nullable":true,"additionalProperties":{"type":"object","properties":{"value":{"anyOf":[{"type":"string"},{"type":"number"},{"nullable":true}]},"aggFunc":{"type":"string","enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"]}},"required":["value","aggFunc"]},"description":"Aggregations by grouped data in field"}},"required":["fieldId","total"]}}}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/aggregation \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/row-count":{"get":{"summary":"Get total row count","description":"Returns the total number of rows in a view based on applied filters and criteria","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"Row count for the view","content":{"application/json":{"schema":{"type":"object","properties":{"rowCount":{"type":"number"}},"required":["rowCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/group-points":{"get":{"summary":"Get group points","description":"Returns the distribution and count of records across different group points in the view","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Group points for the view","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/calendar-daily-collection":{"get":{"summary":"Get daily calendar data","description":"Returns records and count distribution across dates based on specified date range and fields","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDateFieldId","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDateFieldId","in":"query"}],"responses":{"200":{"description":"Calendar daily collection for the view","content":{"application/json":{"schema":{"type":"object","properties":{"countMap":{"type":"object","additionalProperties":{"type":"number"}},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}},"required":["countMap","records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/search-count":{"get":{"summary":"Get total count of search","description":"Returns the total count of records matching the specified search criteria and filters","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Search count with query","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/search-index":{"get":{"summary":"Get record indices for search","description":"Returns the indices and record IDs of records matching the search criteria","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"record index with search query","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"type":"object","properties":{"index":{"type":"number"},"fieldId":{"type":"string"},"recordId":{"type":"string"}},"required":["index","fieldId","recordId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/task-status-collection":{"get":{"summary":"Get task status collection","description":"Returns records and count distribution across task status based on specified date range and fields","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Task status collection for the view","content":{"application/json":{"schema":{"type":"object","properties":{"cells":{"type":"array","items":{"type":"object","properties":{"recordId":{"type":"string"},"fieldId":{"type":"string"}},"required":["recordId","fieldId"]}},"fieldMap":{"type":"object","additionalProperties":{"type":"object","properties":{"taskId":{"type":"string"},"completedCount":{"type":"number"},"totalCount":{"type":"number"}},"required":["taskId","completedCount","totalCount"]}}},"required":["cells","fieldMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/aggregation/task-status-collection \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/task-status-collection';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/task-status-collection',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/task-status-collection\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/record-index":{"get":{"summary":"Get record index","description":"Returns the 0-based row index of a specific record in the current query context (respecting view filters, sort order, link filters)","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"query"}],"responses":{"200":{"description":"Record index in the current query context","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"index":{"type":"number"}},"required":["index"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/":{"post":{"summary":"Create table","description":"Create a new table in the specified project with customizable fields, views, and initial records. Default configurations will be applied if not specified.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the project."},"description":{"type":"string","nullable":true,"description":"The description of the table."},"icon":{"type":"string","nullable":true,"format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"The id of the field that start with \"fld\", followed by exactly 16 alphanumeric characters `/^fld[\\da-zA-Z]{16}$/`. It is sometimes useful to specify an id at creation time","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]},"description":"The fields of the table. If it is empty, 3 fields include SingleLineText, Number, SingleSelect will and 3 empty records be generated by default."},"views":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]},"description":"The views of the table. If it is empty, a grid view will be generated by default."},"records":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]},"example":[{"fields":{"single line text":"text value"}}],"description":"The record data of the table. If it is empty, 3 empty records will be generated by default."},"order":{"type":"number"},"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"}},"description":"params for create a table"}}}},"responses":{"201":{"description":"Returns data about a table.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the project."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]},"description":"The fields of the table."},"views":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]},"description":"The views of the table."},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"description":"The records of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName","fields","views","records"],"description":"Complete table structure data and initial record data."}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/ \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"dbTableName\":\"string\",\"description\":\"string\",\"icon\":\"string\",\"fields\":[{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}],\"views\":[{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}],\"records\":[{\"fields\":{\"single line text\":\"text value\"}}],\"order\":0,\"fieldKeyType\":\"id\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"dbTableName\":\"string\",\"description\":\"string\",\"icon\":\"string\",\"fields\":[{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}],\"views\":[{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}],\"records\":[{\"fields\":{\"single line text\":\"text value\"}}],\"order\":0,\"fieldKeyType\":\"id\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n dbTableName: 'string',\n description: 'string',\n icon: 'string',\n fields: [\n {\n type: 'singleSelect',\n name: 'string',\n unique: true,\n notNull: true,\n dbFieldName: 'string',\n isLookup: true,\n isConditionalLookup: true,\n description: 'this is a summary',\n lookupOptions: {\n foreignTableId: 'string',\n lookupFieldId: 'string',\n linkFieldId: 'string',\n filter: {}\n },\n options: {\n expression: 'countall({values})',\n timeZone: 'string',\n formatting: null,\n showAs: {type: 'url'}\n },\n aiConfig: {\n modelKey: 'string',\n isAutoFill: true,\n attachPrompt: 'string',\n type: 'extraction',\n sourceFieldId: 'string'\n },\n id: 'fldxxxxxxxxxxxxxxxx',\n order: {viewId: 'string', orderIndex: 0}\n }\n ],\n views: [\n {\n name: 'string',\n type: 'grid',\n description: 'string',\n order: 0,\n options: {\n rowHeight: 'short',\n fieldNameDisplayLines: 1,\n frozenColumnCount: 0,\n frozenFieldId: 'string'\n },\n sort: {sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true},\n filter: {},\n group: [{fieldId: 'string', order: 'asc'}],\n isLocked: true,\n shareId: 'string',\n enableShare: true,\n shareMeta: {\n allowCopy: true,\n includeHiddenField: true,\n password: 'string',\n includeRecords: true,\n submit: {allow: true, requireLogin: true}\n },\n columnMeta: {\n property1: {order: 0, width: 0, hidden: true, statisticFunc: 'count'},\n property2: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n }\n }\n ],\n records: [{fields: {'single line text': 'text value'}}],\n order: 0,\n fieldKeyType: 'id'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"dbTableName\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\",\\\"fields\\\":[{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"},\\\"id\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"orderIndex\\\":0}}],\\\"views\\\":[{\\\"name\\\":\\\"string\\\",\\\"type\\\":\\\"grid\\\",\\\"description\\\":\\\"string\\\",\\\"order\\\":0,\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"},\\\"sort\\\":{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true},\\\"filter\\\":{},\\\"group\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"isLocked\\\":true,\\\"shareId\\\":\\\"string\\\",\\\"enableShare\\\":true,\\\"shareMeta\\\":{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}},\\\"columnMeta\\\":{\\\"property1\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"},\\\"property2\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}}],\\\"records\\\":[{\\\"fields\\\":{\\\"single line text\\\":\\\"text value\\\"}}],\\\"order\\\":0,\\\"fieldKeyType\\\":\\\"id\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}":{"delete":{"summary":"Delete table","description":"Move a table to trash. The table can be restored within the retention period.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Table successfully moved to trash."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"Get table details","description":"Retrieve detailed information about a specific table, including its schema, name, and configuration.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns data about a table.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the project."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table":{"get":{"summary":"List tables","description":"Retrieve a list of all tables in the specified project, including their basic information and configurations.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successfully retrieved the list of tables.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the project."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]},"description":"The list of tables."}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/permanent":{"delete":{"summary":"Permanently delete table","description":"Permanently delete a table and all its data. This action cannot be undone.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Table and all associated data permanently deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/name":{"put":{"summary":"Update table name","description":"Update the display name of a table. This will not affect the underlying database table name.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Table name successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/name';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/icon":{"put":{"summary":"Update table tcon","description":"Update the emoji icon of a table. The icon must be a valid emoji character.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"icon":{"type":"string","format":"emoji"}},"required":["icon"]}}}},"responses":{"200":{"description":"Table icon successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"icon\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/order":{"put":{"summary":"Update table order","description":"Update the display order of a table in the project. This affects the order in which tables are shown in the UI.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Table order successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/description":{"put":{"summary":"Update table description","description":"Update or remove the description of a table. Set to null to remove the description.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","nullable":true}},"required":["description"]}}}},"responses":{"200":{"description":"Table description successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/description \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/description';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"description\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/description',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({description: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/description\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/db-table-name":{"put":{"summary":"Update db table name","description":"Update the physical database table name. Must be 1-63 characters, start with letter or underscore, contain only letters, numbers and underscore, and be unique within the project.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dbTableName":{"type":"string","minLength":1,"pattern":"^[a-z_]\\w{0,62}$/i","description":"table name in backend database. Limitation: 1-63 characters, start with letter or underscore, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing table name in the project."}},"required":["dbTableName"]}}}},"responses":{"200":{"description":"Database table name successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"dbTableName\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"dbTableName\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({dbTableName: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"dbTableName\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/default-view-id":{"get":{"summary":"Get default view id","description":"Get default view id","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns default view id","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/permission":{"get":{"summary":"Get table permissions","description":"Retrieve the current user's permissions for a table, including access rights for table operations, views, records, and fields.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Successfully retrieved table permissions for the current user.","content":{"application/json":{"schema":{"type":"object","properties":{"table":{"type":"object","additionalProperties":{"type":"boolean"}},"view":{"type":"object","additionalProperties":{"type":"boolean"}},"record":{"type":"object","additionalProperties":{"type":"boolean"}},"field":{"type":"object","additionalProperties":{"type":"boolean"}}},"required":["table","view","record","field"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/index":{"post":{"summary":"Toggle table index","description":"Toggle table index","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["search"]}},"required":["type"]}}}},"responses":{"201":{"description":"No return"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"search\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"search\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/index',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({type: 'search'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"search\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/index\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/activated-index":{"post":{"summary":"Get activated index","description":"Get the activated index of a table","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"201":{"description":"Returns table full text search index status","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","enum":["search"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/abnormal-index":{"get":{"summary":"Get abnormal indexes","description":"Retrieve a list of abnormal database indexes for a specific table by index type. This helps identify potential performance or maintenance issues.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","enum":["search"]},"required":true,"name":"type","in":"path"}],"responses":{"201":{"description":"Successfully retrieved list of abnormal indexes.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"indexName":{"type":"string"}},"required":["indexName"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/index/repair":{"patch":{"summary":"Repair table index","description":"Repair table index","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","enum":["search"]},"required":true,"name":"type","in":"path"}],"responses":{"201":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/duplicate":{"post":{"description":"Duplicate a table","summary":"Duplicate a table","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"includeRecords":{"type":"boolean"}},"required":["name","includeRecords"]}}}},"responses":{"200":{"description":"Duplicate successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"includeRecords\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"includeRecords\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', includeRecords: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"includeRecords\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/range-to-id":{"get":{"summary":"Get ids from range","description":"Retrieve record and field identifiers based on the selected range coordinates in a table","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"},{"schema":{"type":"string","enum":["recordId","fieldId","all"],"description":"Define which Id to return."},"required":true,"description":"Define which Id to return.","name":"returnType","in":"query"}],"responses":{"200":{"description":"Copy content","content":{"application/json":{"schema":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"}},"fieldIds":{"type":"array","items":{"type":"string"}}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/clear":{"patch":{"summary":"Clear selected range content","description":"Remove all content from the selected table range","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"filterByTql":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"search":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"filterLinkCellCandidate":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"filterLinkCellSelected":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"selectedRecordIds":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"orderBy":{"type":"array","description":"An array of sort objects that specifies how the records should be ordered."},"groupBy":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"collapsedGroupIds":{"type":"array","items":{"type":"string"}},"queryId":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"projection":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":1,"description":"The parameter \"ranges\" is used to represent the coordinates of a selected range in a table. ","example":[[0,0],[1,1]]},"type":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"}},"required":["ranges"]}}}},"responses":{"200":{"description":"Successful clean up"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/clear \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = '\\''Completed'\\'' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/clear';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = \\'Completed\\' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/clear',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n viewId: 'viwXXXXXXX',\n ignoreViewQuery: 'string',\n filterByTql: '{field} = \\'Completed\\' AND {field} > 5',\n filter: {},\n search: ['searchValue', 'fieldIdOrName', false],\n filterLinkCellCandidate: ['fldXXXXXXX', 'recXXXXXXX'],\n filterLinkCellSelected: ['fldXXXXXXX', 'recXXXXXXX'],\n selectedRecordIds: ['string'],\n orderBy: [],\n groupBy: [{fieldId: 'string', order: 'asc'}],\n collapsedGroupIds: ['string'],\n queryId: 'qry_xxxxxxxx',\n projection: ['string'],\n ranges: [[0, 0], [1, 1]],\n type: 'columns'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"filterByTql\\\":\\\"{field} = 'Completed' AND {field} > 5\\\",\\\"filter\\\":{},\\\"search\\\":[\\\"searchValue\\\",\\\"fieldIdOrName\\\",false],\\\"filterLinkCellCandidate\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"filterLinkCellSelected\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"selectedRecordIds\\\":[\\\"string\\\"],\\\"orderBy\\\":[],\\\"groupBy\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"collapsedGroupIds\\\":[\\\"string\\\"],\\\"queryId\\\":\\\"qry_xxxxxxxx\\\",\\\"projection\\\":[\\\"string\\\"],\\\"ranges\\\":[[0,0],[1,1]],\\\"type\\\":\\\"columns\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/clear\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/copy":{"get":{"summary":"Copy selected table content","description":"Copy content from selected table ranges including headers if specified","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"}],"responses":{"200":{"description":"Copy content","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}},"required":["content","header"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/paste":{"patch":{"summary":"Paste content into selected range","description":"Apply paste operation to insert content into the selected table range","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"filterByTql":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"search":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"filterLinkCellCandidate":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"filterLinkCellSelected":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"selectedRecordIds":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"orderBy":{"type":"array","description":"An array of sort objects that specifies how the records should be ordered."},"groupBy":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"collapsedGroupIds":{"type":"array","items":{"type":"string"}},"queryId":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"projection":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":1,"description":"The parameter \"ranges\" is used to represent the coordinates of a selected range in a table. ","example":[[0,0],[1,1]]},"type":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"content":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"array","items":{"nullable":true}}}],"description":"Content to paste","example":"John\tDoe\tjohn.doe@example.com"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]},"description":"Table header for paste operation","example":[]}},"required":["ranges","content"]}}}},"responses":{"200":{"description":"Paste successfully","content":{"application/json":{"schema":{"type":"object","properties":{"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":2,"maxItems":2}},"required":["ranges"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/paste \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = '\\''Completed'\\'' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/paste';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = \\'Completed\\' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/paste',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n viewId: 'viwXXXXXXX',\n ignoreViewQuery: 'string',\n filterByTql: '{field} = \\'Completed\\' AND {field} > 5',\n filter: {},\n search: ['searchValue', 'fieldIdOrName', false],\n filterLinkCellCandidate: ['fldXXXXXXX', 'recXXXXXXX'],\n filterLinkCellSelected: ['fldXXXXXXX', 'recXXXXXXX'],\n selectedRecordIds: ['string'],\n orderBy: [],\n groupBy: [{fieldId: 'string', order: 'asc'}],\n collapsedGroupIds: ['string'],\n queryId: 'qry_xxxxxxxx',\n projection: ['string'],\n ranges: [[0, 0], [1, 1]],\n type: 'columns',\n content: 'John\tDoe\tjohn.doe@example.com',\n header: []\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"filterByTql\\\":\\\"{field} = 'Completed' AND {field} > 5\\\",\\\"filter\\\":{},\\\"search\\\":[\\\"searchValue\\\",\\\"fieldIdOrName\\\",false],\\\"filterLinkCellCandidate\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"filterLinkCellSelected\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"selectedRecordIds\\\":[\\\"string\\\"],\\\"orderBy\\\":[],\\\"groupBy\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"collapsedGroupIds\\\":[\\\"string\\\"],\\\"queryId\\\":\\\"qry_xxxxxxxx\\\",\\\"projection\\\":[\\\"string\\\"],\\\"ranges\\\":[[0,0],[1,1]],\\\"type\\\":\\\"columns\\\",\\\"content\\\":\\\"John\\\\tDoe\\\\tjohn.doe@example.com\\\",\\\"header\\\":[]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/paste\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/delete":{"delete":{"summary":"Delete selected range data","description":"Delete records or fields within the selected table range","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"}],"responses":{"200":{"description":"Successful deletion","content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}}},"required":["ids"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/temporaryPaste":{"patch":{"summary":"Preview paste operation results","description":"Preview the results of a paste operation without applying changes to the table","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":1,"description":"The parameter \"ranges\" is used to represent the coordinates of a selected range in a table. ","example":[[0,0],[1,1]]},"projection":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"content":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"array","items":{"nullable":true}}}],"description":"Content to paste","example":"John\tDoe\tjohn.doe@example.com"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]},"description":"Table header for paste operation","example":[]}},"required":["ranges","content"]}}}},"responses":{"200":{"description":"Paste successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/temporaryPaste \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"viewId\":\"viwXXXXXXX\",\"ranges\":[[0,0],[1,1]],\"projection\":[\"string\"],\"ignoreViewQuery\":\"string\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/temporaryPaste';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"viewId\":\"viwXXXXXXX\",\"ranges\":[[0,0],[1,1]],\"projection\":[\"string\"],\"ignoreViewQuery\":\"string\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/temporaryPaste',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n viewId: 'viwXXXXXXX',\n ranges: [[0, 0], [1, 1]],\n projection: ['string'],\n ignoreViewQuery: 'string',\n content: 'John\tDoe\tjohn.doe@example.com',\n header: []\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"ranges\\\":[[0,0],[1,1]],\\\"projection\\\":[\\\"string\\\"],\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"content\\\":\\\"John\\\\tDoe\\\\tjohn.doe@example.com\\\",\\\"header\\\":[]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/temporaryPaste\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/plan":{"get":{"description":"Generate calculation plan for the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the calculation plan for the field","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"}},"required":["estimateTime","updateCellCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Generate calculation plan for converting the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false},{"nullable":true}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."}},"required":["type"]}}}},"responses":{"201":{"description":"Returns the calculation plan","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"},"skip":{"type":"boolean"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'singleSelect',\n name: 'string',\n unique: true,\n notNull: true,\n dbFieldName: 'string',\n isLookup: true,\n isConditionalLookup: true,\n description: 'this is a summary',\n lookupOptions: {\n foreignTableId: 'string',\n lookupFieldId: 'string',\n linkFieldId: 'string',\n filter: {}\n },\n options: {\n expression: 'countall({values})',\n timeZone: 'string',\n formatting: null,\n showAs: {type: 'url'}\n },\n aiConfig: {\n modelKey: 'string',\n isAutoFill: true,\n attachPrompt: 'string',\n type: 'extraction',\n sourceFieldId: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Generate calculation plan for deleting the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the calculation plan for deleting the field","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/plan":{"post":{"description":"Generate calculation plan for creating the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"The id of the field that start with \"fld\", followed by exactly 16 alphanumeric characters `/^fld[\\da-zA-Z]{16}$/`. It is sometimes useful to specify an id at creation time","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]}}}},"responses":{"201":{"description":"Returns the calculation plan for creating the field","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"}},"required":["estimateTime","updateCellCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/plan \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/plan';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/plan',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'singleSelect',\n name: 'string',\n unique: true,\n notNull: true,\n dbFieldName: 'string',\n isLookup: true,\n isConditionalLookup: true,\n description: 'this is a summary',\n lookupOptions: {\n foreignTableId: 'string',\n lookupFieldId: 'string',\n linkFieldId: 'string',\n filter: {}\n },\n options: {\n expression: 'countall({values})',\n timeZone: 'string',\n formatting: null,\n showAs: {type: 'url'}\n },\n aiConfig: {\n modelKey: 'string',\n isAutoFill: true,\n attachPrompt: 'string',\n type: 'extraction',\n sourceFieldId: 'string'\n },\n id: 'fldxxxxxxxxxxxxxxxx',\n order: {viewId: 'string', orderIndex: 0}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"},\\\"id\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"orderIndex\\\":0}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/plan\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/name":{"patch":{"description":"Update user name","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/name';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/user/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/avatar":{"patch":{"description":"Update user avatar","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/avatar \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: multipart/form-data' \\\n --form file=string"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/avatar';\nconst form = new FormData();\nform.append('file', 'string');\n\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/avatar',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/user/avatar\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/notify-meta":{"patch":{"description":"Update user notification meta","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/notify-meta \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/notify-meta';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/notify-meta',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/user/notify-meta\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/lang":{"patch":{"description":"Update user language","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"lang":{"type":"string"}},"required":["lang"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/lang \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"lang\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/lang';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"lang\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/lang',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({lang: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"lang\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/user/lang\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit":{"get":{"description":"Get user last visited resource","tags":["user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Update or create user last visit record","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"parentResourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId","parentResourceId"]}}}},"responses":{"201":{"description":"Successfully updated user last visit record."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user/last-visit \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"resourceType\":\"space\",\"resourceId\":\"string\",\"parentResourceId\":\"string\",\"childResourceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"resourceType\":\"space\",\"resourceId\":\"string\",\"parentResourceId\":\"string\",\"childResourceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/last-visit',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n resourceType: 'space',\n resourceId: 'string',\n parentResourceId: 'string',\n childResourceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"resourceType\\\":\\\"space\\\",\\\"resourceId\\\":\\\"string\\\",\\\"parentResourceId\\\":\\\"string\\\",\\\"childResourceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/user/last-visit\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit/map":{"get":{"description":"Get user last visited resource map","tags":["user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit map.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit/list-base":{"get":{"tags":["user"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns data about user last visit project.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number"},"list":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"resource":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]},"lastVisitTime":{"type":"string"}},"required":["resourceType","resourceId","resource"]}}},"required":["total","list"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/user/last-visit/list-base \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit/list-base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/last-visit/list-base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit/list-base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get userlast visitlist project","sidebarTitle":"Get userlast visitlist project"}}}},"/user/last-visit/base-node":{"get":{"description":"Get user last visited project node","tags":["user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit project node.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get userlast visitproject node","sidebarTitle":"Get userlast visitproject node"}}}},"/auth/user/me":{"get":{"description":"Get user information","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully retrieved user information","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"},"phone":{"type":"string","nullable":true},"notifyMeta":{"type":"object","properties":{"email":{"type":"boolean"}}},"hasPassword":{"type":"boolean"},"isAdmin":{"type":"boolean","nullable":true},"lang":{"type":"string","nullable":true},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"isAdmin":{"type":"boolean"}},"required":["id","name","departments"]}},"required":["id","name","email","notifyMeta","hasPassword"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/auth/user/me \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user/me';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/user/me',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/user/me\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signin":{"post":{"description":"Sign in","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":8,"description":"Minimum 8 chars"},"turnstileToken":{"type":"string"}},"required":["email","password"]}}}},"responses":{"201":{"description":"Sign in successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"},"phone":{"type":"string","nullable":true},"notifyMeta":{"type":"object","properties":{"email":{"type":"boolean"}}},"hasPassword":{"type":"boolean"},"isAdmin":{"type":"boolean","nullable":true},"lang":{"type":"string","nullable":true},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"isAdmin":{"type":"boolean"}},"required":["id","name","departments"]}},"required":["id","name","email","notifyMeta","hasPassword"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/signin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/signin';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/signin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', password: 'stringst', turnstileToken: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"password\\\":\\\"stringst\\\",\\\"turnstileToken\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/signin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signout":{"post":{"description":"Sign out","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Sign out successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/signout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/signout';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/signout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/auth/signout\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signup":{"post":{"description":"Sign up","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"},"turnstileToken":{"type":"string"},"defaultSpaceName":{"type":"string"},"refMeta":{"type":"object","properties":{"query":{"type":"string"},"referer":{"type":"string"}}},"verification":{"type":"object","properties":{"code":{"type":"string"},"token":{"type":"string"}},"required":["code","token"]},"inviteCode":{"type":"string"}},"required":["email","password"]}}}},"responses":{"201":{"description":"Sign up and sing in successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"},"phone":{"type":"string","nullable":true},"notifyMeta":{"type":"object","properties":{"email":{"type":"boolean"}}},"hasPassword":{"type":"boolean"},"isAdmin":{"type":"boolean","nullable":true},"lang":{"type":"string","nullable":true},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"isAdmin":{"type":"boolean"}},"required":["id","name","departments"]}},"required":["id","name","email","notifyMeta","hasPassword"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/signup \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\",\"defaultSpaceName\":\"string\",\"refMeta\":{\"query\":\"string\",\"referer\":\"string\"},\"verification\":{\"code\":\"string\",\"token\":\"string\"},\"inviteCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/signup';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\",\"defaultSpaceName\":\"string\",\"refMeta\":{\"query\":\"string\",\"referer\":\"string\"},\"verification\":{\"code\":\"string\",\"token\":\"string\"},\"inviteCode\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/signup',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n email: 'user@example.com',\n password: 'stringst',\n turnstileToken: 'string',\n defaultSpaceName: 'string',\n refMeta: {query: 'string', referer: 'string'},\n verification: {code: 'string', token: 'string'},\n inviteCode: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"password\\\":\\\"stringst\\\",\\\"turnstileToken\\\":\\\"string\\\",\\\"defaultSpaceName\\\":\\\"string\\\",\\\"refMeta\\\":{\\\"query\\\":\\\"string\\\",\\\"referer\\\":\\\"string\\\"},\\\"verification\\\":{\\\"code\\\":\\\"string\\\",\\\"token\\\":\\\"string\\\"},\\\"inviteCode\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/signup\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/change-password":{"patch":{"description":"Change password","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":8,"description":"Minimum 8 chars"},"newPassword":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"}},"required":["password","newPassword"]}}}},"responses":{"201":{"description":"Change password successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/auth/change-password \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"stringst\",\"newPassword\":\"stringst\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/change-password';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"password\":\"stringst\",\"newPassword\":\"stringst\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/change-password',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({password: 'stringst', newPassword: 'stringst'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"stringst\\\",\\\"newPassword\\\":\\\"stringst\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/auth/change-password\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/send-reset-password-email":{"post":{"description":"Send reset password email","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}},"responses":{"201":{"description":"Successfully sent reset password email"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/send-reset-password-email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/send-reset-password-email';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/send-reset-password-email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/send-reset-password-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/reset-password":{"post":{"description":"Reset password","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"},"code":{"type":"string"}},"required":["password","code"]}}}},"responses":{"201":{"description":"Successfully reset password"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/reset-password \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"stringst\",\"code\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/reset-password';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"password\":\"stringst\",\"code\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/reset-password',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({password: 'stringst', code: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"stringst\\\",\\\"code\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/reset-password\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/add-password":{"post":{"description":"Add password","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"}},"required":["password"]}}}},"responses":{"201":{"description":"Successfully added password"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/add-password \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"stringst\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/add-password';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"password\":\"stringst\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/add-password',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({password: 'stringst'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"stringst\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/add-password\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/user":{"get":{"description":"Get user information via access token","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully retrieved user information","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/auth/user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/user\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete user","tags":["auth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"confirm","in":"path"}],"responses":{"200":{"description":"Successfully deleted user"},"400":{"description":"User has deleted projects or spaces","content":{"application/json":{"schema":{"type":"object","properties":{"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"deletedTime":{"type":"string","nullable":true}},"required":["id","name","deletedTime"]}}},"required":["spaces"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/auth/user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/auth/user\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/send-signup-verification-code":{"post":{"description":"Send signup verification code","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"turnstileToken":{"type":"string"}},"required":["email"]}}}},"responses":{"200":{"description":"Resend signup verification code successfully","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"expiresTime":{"type":"string"}},"required":["token","expiresTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/send-signup-verification-code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\",\"turnstileToken\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/send-signup-verification-code';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\",\"turnstileToken\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/send-signup-verification-code',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', turnstileToken: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"turnstileToken\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/send-signup-verification-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/change-email":{"patch":{"description":"Change email","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"token":{"type":"string"},"code":{"type":"string"}},"required":["email","token","code"]}}}},"responses":{"200":{"description":"Change email successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/auth/change-email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\",\"token\":\"string\",\"code\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/change-email';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\",\"token\":\"string\",\"code\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/change-email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', token: 'string', code: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"token\\\":\\\"string\\\",\\\"code\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/auth/change-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/send-change-email-code":{"post":{"description":"Send change email code","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"}},"required":["email","password"]}}}},"responses":{"200":{"description":"Send change email code successfully","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/send-change-email-code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\",\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/send-change-email-code';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\",\"password\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/send-change-email-code',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/send-change-email-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/temp-token":{"get":{"description":"Get temp token","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get temp token successfully","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"expiresTime":{"type":"string"}},"required":["accessToken","expiresTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/auth/temp-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/temp-token';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/temp-token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/temp-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/invite-waitlist":{"post":{"description":"Invite waitlist","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"list":{"type":"array","items":{"type":"string","format":"email"}}},"required":["list"]}}}},"responses":{"201":{"description":"Invite waitlist successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string","format":"email"},"code":{"type":"string"},"times":{"type":"number"}},"required":["email","code","times"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/invite-waitlist \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"list\":[\"user@example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/invite-waitlist';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"list\":[\"user@example.com\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/invite-waitlist',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({list: ['user@example.com']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"list\\\":[\\\"user@example.com\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/invite-waitlist\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/waitlist-invite-code":{"post":{"description":"Gen waitlist invite code","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer","description":"The number of invite codes to generate","example":10},"times":{"type":"integer","description":"The number of invite codes to use","example":10}},"required":["count","times"]}}}},"responses":{"201":{"description":"Gen waitlist invite code successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"times":{"type":"integer"}},"required":["code","times"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/waitlist-invite-code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"count\":10,\"times\":10}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/waitlist-invite-code';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"count\":10,\"times\":10}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/waitlist-invite-code',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({count: 10, times: 10}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"count\\\":10,\\\"times\\\":10}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/waitlist-invite-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/join-waitlist":{"post":{"description":"Join waitlist","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}},"responses":{"200":{"description":"Join waitlist successfully","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/join-waitlist \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/join-waitlist';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/join-waitlist',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/join-waitlist\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/waitlist":{"get":{"description":"Get waitlist","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get waitlist successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string","format":"email"},"invite":{"type":"boolean","nullable":true},"inviteTime":{"type":"string","nullable":true,"format":"date"},"createdTime":{"type":"string","format":"date"}},"required":["email","invite","inviteTime","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/auth/waitlist \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/waitlist';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/waitlist',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/waitlist\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/connection":{"post":{"description":"Create a db connection url","tags":["db-connection"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"}},"required":["baseId"]}}}},"responses":{"201":{"description":"Connection created successfully","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"dsn":{"type":"object","properties":{"driver":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"db":{"type":"string"},"user":{"type":"string"},"pass":{"type":"string"},"params":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"required":["driver","host"]},"connection":{"type":"object","properties":{"max":{"type":"number"},"current":{"type":"number"}},"required":["max","current"]},"url":{"type":"string","description":"The URL that can be used to connect to the database"}},"required":["dsn","connection","url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/connection \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/connection';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"baseId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/connection',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/connection\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project connection","sidebarTitle":"Post project connection"}}},"delete":{"description":"Delete a db connection","tags":["db-connection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/connection \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/connection';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/connection',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/connection\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project connection","sidebarTitle":"Delete project connection"}}},"get":{"description":"Get db connection info","tags":["db-connection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns information about a db connection.","content":{"application/json":{"schema":{"type":"object","properties":{"dsn":{"type":"object","properties":{"driver":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"db":{"type":"string"},"user":{"type":"string"},"pass":{"type":"string"},"params":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"required":["driver","host"]},"connection":{"type":"object","properties":{"max":{"type":"number"},"current":{"type":"number"}},"required":["max","current"]},"url":{"type":"string","description":"The URL that can be used to connect to the database"}},"required":["dsn","connection","url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/connection \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/connection';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/connection',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/connection\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project connection","sidebarTitle":"Get project connection"}}}},"/invitation/link/accept":{"post":{"description":"Accept invitation link","tags":["invitation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"invitationCode":{"type":"string"},"invitationId":{"type":"string"}},"required":["invitationCode","invitationId"]}}}},"responses":{"201":{"description":"Successful response, return the spaceId or baseId of the invitation link.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","nullable":true},"baseId":{"type":"string","nullable":true}},"required":["spaceId","baseId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/invitation/link/accept \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"invitationCode\":\"string\",\"invitationId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/invitation/link/accept';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"invitationCode\":\"string\",\"invitationId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/invitation/link/accept',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({invitationCode: 'string', invitationId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"invitationCode\\\":\\\"string\\\",\\\"invitationId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/invitation/link/accept\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/auth":{"post":{"description":"share view auth password","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":3}},"required":["password"]}}}},"responses":{"201":{"description":"Successfully authenticated","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/view/auth \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/auth';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"password\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/auth',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/view/auth\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view":{"get":{"description":"get share view info","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"share view info","content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string"},"tableId":{"type":"string"},"shareId":{"type":"string"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"view":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]},"fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"description":"first 50 records"},"extra":{"type":"object","properties":{"groupPoints":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]},"description":"Group points for the view"},"plugin":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["pluginId","pluginInstallId","name"]}}}},"required":["tableId","shareId","fields","records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/view \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/aggregations":{"get":{"description":"Get share view aggregations","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"object","properties":{"count":{"type":"array","items":{"type":"string"}},"empty":{"type":"array","items":{"type":"string"}},"filled":{"type":"array","items":{"type":"string"}},"unique":{"type":"array","items":{"type":"string"}},"max":{"type":"array","items":{"type":"string"}},"min":{"type":"array","items":{"type":"string"}},"sum":{"type":"array","items":{"type":"string"}},"average":{"type":"array","items":{"type":"string"}},"checked":{"type":"array","items":{"type":"string"}},"unChecked":{"type":"array","items":{"type":"string"}},"percentEmpty":{"type":"array","items":{"type":"string"}},"percentFilled":{"type":"array","items":{"type":"string"}},"percentUnique":{"type":"array","items":{"type":"string"}},"percentChecked":{"type":"array","items":{"type":"string"}},"percentUnChecked":{"type":"array","items":{"type":"string"}},"earliestDate":{"type":"array","items":{"type":"string"}},"latestDate":{"type":"array","items":{"type":"string"}},"dateRangeOfDays":{"type":"array","items":{"type":"string"}},"dateRangeOfMonths":{"type":"array","items":{"type":"string"}},"totalAttachmentSize":{"type":"array","items":{"type":"string"}}}},"required":false,"name":"field","in":"query"}],"responses":{"200":{"description":"Returns aggregations list of share view.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/row-count":{"get":{"description":"Get row count for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"Row count for the share view","content":{"application/json":{"schema":{"type":"object","properties":{"rowCount":{"type":"number"}},"required":["rowCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/records":{"get":{"description":"Get records for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"},"required":false,"description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details","name":"fieldKeyType","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"}],"responses":{"200":{"description":"Records for the share view","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"example":[{"id":"recXXXXXXX","fields":{"single line text":"text value"}}],"description":"Array of record objects "},"extra":{"type":"object","properties":{"groupPoints":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]},"description":"Group points for the view"},"allGroupHeaderRefs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"depth":{"type":"number","maximum":2,"minimum":0}},"required":["id","depth"]},"description":"All group header refs for the view, including collapsed group headers"},"searchHitIndex":{"type":"array","nullable":true,"items":{"type":"object","properties":{"recordId":{"type":"string"},"fieldId":{"type":"string"}},"required":["recordId","fieldId"]},"description":"The index of the records that match the search, highlight the records"}}}},"required":["records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/form-submit":{"post":{"description":"share form view submit new record","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"typecast":{"type":"boolean"}},"required":["fields"]}}}},"responses":{"201":{"description":"Successfully submit","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/view/form-submit \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/form-submit';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/form-submit',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({fields: {property1: null, property2: null}, typecast: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fields\\\":{\\\"property1\\\":null,\\\"property2\\\":null},\\\"typecast\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/view/form-submit\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/copy":{"get":{"description":"Copy operations in Share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"}],"responses":{"200":{"description":"Copy content","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}},"required":["content","header"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/group-points":{"get":{"description":"Get group points for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Group points for the share view","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/link-records":{"get":{"description":"In a view with a field selector, link the records list of the associated field selector to get the. Linking the desired ones inside the share view should fetch the ones that have already been selected.","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["candidate","selected"],"description":"Only used for plugin views"},"required":false,"description":"Only used for plugin views","name":"type","in":"query"}],"responses":{"200":{"description":"Link records list","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/collaborators":{"get":{"description":"View collaborators in a view with a user field selector.","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"fieldId","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":false,"name":"type","in":"query"}],"responses":{"200":{"description":" view collaborators","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["userId","userName","email"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/search-count":{"get":{"description":"Get share view search result count with query","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Share view Search count with query","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/search-index":{"get":{"description":"Get share view record index with search query","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"share view record index with search query","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"type":"object","properties":{"index":{"type":"number"},"fieldId":{"type":"string"},"recordId":{"type":"string"}},"required":["index","fieldId","recordId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/calendar-daily-collection":{"get":{"description":"Get calendar daily collection for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDateFieldId","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDateFieldId","in":"query"}],"responses":{"200":{"description":"Calendar daily collection for the share view","content":{"application/json":{"schema":{"type":"object","properties":{"countMap":{"type":"object","additionalProperties":{"type":"number"}},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}},"required":["countMap","records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/record/{recordId}/{fieldId}/button-click":{"post":{"summary":"Button click","description":"Button click","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the clicked cell","content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string"},"tableId":{"type":"string"},"fieldId":{"type":"string"},"record":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}},"required":["runId","tableId","fieldId","record"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications":{"get":{"description":"List a user notification","tags":["notification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["unread","read"]},"required":true,"name":"notifyStates","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Successful response, return user notification list.","content":{"application/json":{"schema":{"type":"object","properties":{"notifications":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"notifyIcon":{"anyOf":[{"type":"object","properties":{"iconUrl":{"type":"string"}},"required":["iconUrl"]},{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"userAvatarUrl":{"type":"string","nullable":true}},"required":["userId","userName"]}]},"notifyType":{"type":"string","enum":["system","collaboratorCellTag","collaboratorMultiRowTag","comment","exportBase"]},"url":{"type":"string"},"message":{"type":"string"},"messageI18n":{"type":"string","nullable":true},"isRead":{"type":"boolean"},"createdTime":{"type":"string"}},"required":["id","notifyIcon","notifyType","url","message","isRead","createdTime"]}},"nextCursor":{"type":"string","nullable":true}},"required":["notifications"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications/{notificationId}/status":{"patch":{"description":"Patch notification status","tags":["notification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"notificationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isRead":{"type":"boolean"}},"required":["isRead"]}}}},"responses":{"200":{"description":"Returns successfully patch notification status"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/notifications/%7BnotificationId%7D/status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"isRead\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications/%7BnotificationId%7D/status';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"isRead\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/notifications/%7BnotificationId%7D/status',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({isRead: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isRead\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/notifications/%7BnotificationId%7D/status\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications/read-all":{"patch":{"description":"mark all notifications as read","tags":["notification"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/notifications/read-all \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications/read-all';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/notifications/read-all',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/notifications/read-all\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications/unread-count":{"get":{"description":"User notification unread count","tags":["notification"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response, return user notification unread count.","content":{"application/json":{"schema":{"type":"object","properties":{"unreadCount":{"type":"integer","minimum":0}},"required":["unreadCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/notifications/unread-count \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications/unread-count';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/notifications/unread-count',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/notifications/unread-count\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/access-token":{"post":{"description":"Create access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"},"minItems":1},"spaceIds":{"type":"array","nullable":true,"items":{"type":"string"},"minItems":1},"baseIds":{"type":"array","nullable":true,"items":{"type":"string"},"minItems":1},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string","example":"2024-03-25"}},"required":["name","scopes","expiredTime"]}}}},"responses":{"201":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","nullable":true,"items":{"type":"string"}},"baseIds":{"type":"array","nullable":true,"items":{"type":"string"}},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string"},"token":{"type":"string"},"createdTime":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","name","scopes","expiredTime","token","createdTime","lastUsedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/access-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true,\"expiredTime\":\"2024-03-25\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true,\"expiredTime\":\"2024-03-25\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n scopes: ['string'],\n spaceIds: ['string'],\n baseIds: ['string'],\n hasFullAccess: true,\n expiredTime: '2024-03-25'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"scopes\\\":[\\\"string\\\"],\\\"spaceIds\\\":[\\\"string\\\"],\\\"baseIds\\\":[\\\"string\\\"],\\\"hasFullAccess\\\":true,\\\"expiredTime\\\":\\\"2024-03-25\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/access-token\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"List access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","items":{"type":"string"}},"baseIds":{"type":"array","items":{"type":"string"}},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string"},"createdTime":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","name","scopes","expiredTime","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/access-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/access-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/access-token/{id}/refresh":{"post":{"description":"Refresh access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"expiredTime":{"type":"string"}},"required":["expiredTime"]}}}},"responses":{"201":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"expiredTime":{"type":"string"},"token":{"type":"string"}},"required":["id","expiredTime","token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D/refresh \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"expiredTime\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D/refresh';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"expiredTime\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token/%7Bid%7D/refresh',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({expiredTime: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"expiredTime\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/access-token/%7Bid%7D/refresh\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/access-token/{id}":{"delete":{"description":"Delete access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Access token deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/access-token/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","nullable":true,"items":{"type":"string"}},"baseIds":{"type":"array","nullable":true,"items":{"type":"string"}},"hasFullAccess":{"type":"boolean"}},"required":["name","scopes"]}}}},"responses":{"200":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","items":{"type":"string"}},"baseIds":{"type":"array","items":{"type":"string"}},"hasFullAccess":{"type":"boolean"}},"required":["id","name","scopes"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n scopes: ['string'],\n spaceIds: ['string'],\n baseIds: ['string'],\n hasFullAccess: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"scopes\\\":[\\\"string\\\"],\\\"spaceIds\\\":[\\\"string\\\"],\\\"baseIds\\\":[\\\"string\\\"],\\\"hasFullAccess\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/access-token/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","items":{"type":"string"}},"baseIds":{"type":"array","items":{"type":"string"}},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string"},"createdTime":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","name","scopes","expiredTime","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/access-token/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/import/analyze":{"get":{"description":"Get a column info from analyze sheet","tags":["import"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"attachmentUrl","in":"query"},{"schema":{"type":"string","enum":["csv","excel"]},"required":true,"name":"fileType","in":"query"}],"responses":{"200":{"description":"Returns columnHeader analyze from file","content":{"application/json":{"schema":{"type":"object","properties":{"worksheets":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"name":{"type":"string"}},"required":["type","name"]}}},"required":["name","columns"]}}},"required":["worksheets"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/import/{baseId}":{"post":{"description":"create table from file","tags":["import"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"worksheets":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"name":{"type":"string"},"sourceColumnIndex":{"type":"number"}},"required":["type","name","sourceColumnIndex"]}},"useFirstRowAsHeader":{"type":"boolean"},"importData":{"type":"boolean"}},"required":["name","columns","useFirstRowAsHeader","importData"]}},"attachmentUrl":{"type":"string"},"fileType":{"type":"string","enum":["csv","excel"]},"notification":{"type":"boolean"},"tz":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["worksheets","attachmentUrl","fileType","tz"]}}}},"responses":{"201":{"description":"Returns data about a table without records","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the project."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/import/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"worksheets\":{\"property1\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true},\"property2\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true}},\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"notification\":true,\"tz\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/import/%7BbaseId%7D';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"worksheets\":{\"property1\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true},\"property2\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true}},\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"notification\":true,\"tz\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/import/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n worksheets: {\n property1: {\n name: 'string',\n columns: [{type: 'singleLineText', name: 'string', sourceColumnIndex: 0}],\n useFirstRowAsHeader: true,\n importData: true\n },\n property2: {\n name: 'string',\n columns: [{type: 'singleLineText', name: 'string', sourceColumnIndex: 0}],\n useFirstRowAsHeader: true,\n importData: true\n }\n },\n attachmentUrl: 'string',\n fileType: 'csv',\n notification: true,\n tz: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"worksheets\\\":{\\\"property1\\\":{\\\"name\\\":\\\"string\\\",\\\"columns\\\":[{\\\"type\\\":\\\"singleLineText\\\",\\\"name\\\":\\\"string\\\",\\\"sourceColumnIndex\\\":0}],\\\"useFirstRowAsHeader\\\":true,\\\"importData\\\":true},\\\"property2\\\":{\\\"name\\\":\\\"string\\\",\\\"columns\\\":[{\\\"type\\\":\\\"singleLineText\\\",\\\"name\\\":\\\"string\\\",\\\"sourceColumnIndex\\\":0}],\\\"useFirstRowAsHeader\\\":true,\\\"importData\\\":true}},\\\"attachmentUrl\\\":\\\"string\\\",\\\"fileType\\\":\\\"csv\\\",\\\"notification\\\":true,\\\"tz\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/import/%7BbaseId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/import/{baseId}/{tableId}":{"patch":{"description":"import table inplace","tags":["import"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"attachmentUrl":{"type":"string"},"fileType":{"type":"string","enum":["csv","excel"]},"insertConfig":{"type":"object","properties":{"sourceWorkSheetKey":{"type":"string"},"excludeFirstRow":{"type":"boolean"},"sourceColumnMap":{"type":"object","additionalProperties":{"type":"number","nullable":true}}},"required":["sourceWorkSheetKey","excludeFirstRow","sourceColumnMap"]},"notification":{"type":"boolean"}},"required":["attachmentUrl","fileType","insertConfig"]}}}},"responses":{"200":{"description":"Successfully import table inplace"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/import/%7BbaseId%7D/%7BtableId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"insertConfig\":{\"sourceWorkSheetKey\":\"string\",\"excludeFirstRow\":true,\"sourceColumnMap\":{\"property1\":0,\"property2\":0}},\"notification\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/import/%7BbaseId%7D/%7BtableId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"insertConfig\":{\"sourceWorkSheetKey\":\"string\",\"excludeFirstRow\":true,\"sourceColumnMap\":{\"property1\":0,\"property2\":0}},\"notification\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/import/%7BbaseId%7D/%7BtableId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n attachmentUrl: 'string',\n fileType: 'csv',\n insertConfig: {\n sourceWorkSheetKey: 'string',\n excludeFirstRow: true,\n sourceColumnMap: {property1: 0, property2: 0}\n },\n notification: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachmentUrl\\\":\\\"string\\\",\\\"fileType\\\":\\\"csv\\\",\\\"insertConfig\\\":{\\\"sourceWorkSheetKey\\\":\\\"string\\\",\\\"excludeFirstRow\\\":true,\\\"sourceColumnMap\\\":{\\\"property1\\\":0,\\\"property2\\\":0}},\\\"notification\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/import/%7BbaseId%7D/%7BtableId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/export/{tableId}":{"get":{"description":"export csv from table","tags":["export"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","description":"When ignoreViewQuery is true, use this columnMeta to sort fields by order. Format: { fieldId: { order: number } }"},"required":false,"description":"When ignoreViewQuery is true, use this columnMeta to sort fields by order. Format: { fieldId: { order: number } }","name":"columnMeta","in":"query"}],"responses":{"200":{"description":"Download successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin":{"delete":{"description":"Delete pin","tags":["pin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"required":true,"name":"type","in":"query"},{"schema":{"type":"string"},"required":true,"name":"id","in":"query"}],"responses":{"200":{"description":"Delete pin successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin/":{"post":{"description":"Add pin","tags":["pin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"id":{"type":"string"}},"required":["type","id"]}}}},"responses":{"201":{"description":"Add pin successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/pin/ \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"space\",\"id\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"space\",\"id\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/pin/',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({type: 'space', id: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"space\\\",\\\"id\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/pin/\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin/list":{"get":{"description":"Get pin list","tags":["pin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get pin list, include project pin","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"order":{"type":"number"},"name":{"type":"string"},"icon":{"type":"string"},"parentBaseId":{"type":"string"},"viewMeta":{"type":"object","properties":{"tableId":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"pluginLogo":{"type":"string"}},"required":["tableId","type"]}},"required":["id","type","order","name"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/pin/list \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/pin/list',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/pin/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin/order":{"put":{"description":"Update pin order","tags":["pin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"anchorId":{"type":"string"},"anchorType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"position":{"type":"string","enum":["before","after"]}},"required":["id","type","anchorId","anchorType","position"]}}}},"responses":{"200":{"description":"Update pin order successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/pin/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"id\":\"string\",\"type\":\"space\",\"anchorId\":\"string\",\"anchorType\":\"space\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"id\":\"string\",\"type\":\"space\",\"anchorId\":\"string\",\"anchorType\":\"space\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/pin/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n id: 'string',\n type: 'space',\n anchorId: 'string',\n anchorType: 'space',\n position: 'before'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"id\\\":\\\"string\\\",\\\"type\\\":\\\"space\\\",\\\"anchorId\\\":\\\"string\\\",\\\"anchorType\\\":\\\"space\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/pin/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription/summary":{"get":{"description":"Retrieves a summary of subscription information for a space","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns a summary of subscription information about a space.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["spaceId","status","level"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/summary \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/subscription/summary',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/subscription/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/summary":{"get":{"description":"Retrieves a summary of subscription information across all spaces","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns a summary of subscription information for each space.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["spaceId","status","level"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/summary \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/summary',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/usage":{"get":{"description":"Get usage information for the space","tags":["usage"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns usage information for the space.","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","limit"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/usage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/usage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/usage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/usage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/instance/usage":{"get":{"description":"Get usage information for the instance","tags":["usage"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns usage information for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","limit"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/instance/usage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/instance/usage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/instance/usage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/instance/usage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/usage":{"get":{"description":"Get usage information for the project","tags":["usage"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns usage information for the project.","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","limit"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/usage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/usage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/usage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/usage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project usage","sidebarTitle":"Get project usage"}}}},"/oauth/client/{clientId}":{"get":{"description":"Get the OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"200":{"description":"Returns the OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/client/%7BclientId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete an OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"200":{"description":"OAuth application deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/oauth/client/%7BclientId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update an OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}},"responses":{"200":{"description":"Returns the updated OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"clientId\":\"string\",\"name\":\"string\",\"secrets\":[{\"id\":\"string\",\"secret\":\"string\",\"lastUsedTime\":\"string\"}],\"scopes\":[\"string\"],\"logo\":\"http://example.com\",\"homepage\":\"http://example.com\",\"redirectUris\":[\"http://example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"clientId\":\"string\",\"name\":\"string\",\"secrets\":[{\"id\":\"string\",\"secret\":\"string\",\"lastUsedTime\":\"string\"}],\"scopes\":[\"string\"],\"logo\":\"http://example.com\",\"homepage\":\"http://example.com\",\"redirectUris\":[\"http://example.com\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n clientId: 'string',\n name: 'string',\n secrets: [{id: 'string', secret: 'string', lastUsedTime: 'string'}],\n scopes: ['string'],\n logo: 'http://example.com',\n homepage: 'http://example.com',\n redirectUris: ['http://example.com']\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"clientId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"secrets\\\":[{\\\"id\\\":\\\"string\\\",\\\"secret\\\":\\\"string\\\",\\\"lastUsedTime\\\":\\\"string\\\"}],\\\"scopes\\\":[\\\"string\\\"],\\\"logo\\\":\\\"http://example.com\\\",\\\"homepage\\\":\\\"http://example.com\\\",\\\"redirectUris\\\":[\\\"http://example.com\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/oauth/client/%7BclientId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client":{"post":{"description":"Create a new OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"homepage":{"type":"string","format":"uri"},"logo":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["table|create","table|delete","table|export","table|import","table|read","table|update","table|trash_read","table|trash_update","table|trash_reset","view|create","view|delete","view|read","view|update","field|create","field|delete","field|read","field|update","record|comment","record|create","record|delete","record|read","record|update","automation|create","automation|delete","automation|read","automation|update","user|email_read","user|integrations"]}},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"minItems":1}},"required":["name","homepage","redirectUris"]}}}},"responses":{"201":{"description":"Returns the created OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"homepage\":\"http://example.com\",\"logo\":\"string\",\"scopes\":[\"table|create\"],\"redirectUris\":[\"http://example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"homepage\":\"http://example.com\",\"logo\":\"string\",\"scopes\":[\"table|create\"],\"redirectUris\":[\"http://example.com\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n homepage: 'http://example.com',\n logo: 'string',\n scopes: ['table|create'],\n redirectUris: ['http://example.com']\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"homepage\\\":\\\"http://example.com\\\",\\\"logo\\\":\\\"string\\\",\\\"scopes\\\":[\\\"table|create\\\"],\\\"redirectUris\\\":[\\\"http://example.com\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/oauth/client\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get the list of OAuth applications","tags":["oauth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of OAuth applications","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"}},"required":["clientId","name","homepage"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/client \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/client\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/revoke-token":{"post":{"tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"200":{"description":"Revoke token successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-token';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D/revoke-token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/revoke-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/secret/{secretId}":{"delete":{"description":"Delete the OAuth secret","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"secretId","in":"path"}],"responses":{"200":{"description":"OAuth secret deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/secret":{"post":{"description":"Generate a new OAuth secret","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"201":{"description":"Returns the generated OAuth secret","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"maskedSecret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret","maskedSecret"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D/secret',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/secret\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/decision/{transactionId}":{"get":{"description":"Get the OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"transactionId","in":"path"}],"responses":{"200":{"description":"Returns the OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"homepage":{"type":"string","format":"uri"},"logo":{"type":"string","format":"uri"},"scopes":{"type":"array","items":{"type":"string"}}},"required":["name","homepage"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/decision/%7BtransactionId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/decision/%7BtransactionId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/decision/%7BtransactionId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/decision/%7BtransactionId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/revoke-access":{"post":{"tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"201":{"description":"Revoke access permission successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-access \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-access';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D/revoke-access',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/revoke-access\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/authorized/list":{"get":{"description":"Get the list of authorized applications","tags":["oauth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of authorized applications","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"homepage":{"type":"string","format":"uri"},"logo":{"type":"string","format":"uri"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"lastUsedTime":{"type":"string"},"createdUser":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"}},"required":["name","email"]}},"required":["clientId","name","homepage","createdUser"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/client/authorized/list \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/authorized/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/authorized/list',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/client/authorized/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/undo-redo/undo":{"post":{"description":"Undo the last operation","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"201":{"description":"Returns data about the undo operation.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["fulfilled","failed","empty"]},"errorMessage":{"type":"string"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/undo \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/undo';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/undo-redo/undo',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/undo-redo/undo\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/undo-redo/redo":{"post":{"description":"Redo the last operation","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"201":{"description":"Returns data about the redo operation.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["fulfilled","failed","empty"]},"errorMessage":{"type":"string"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/redo \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/redo';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/undo-redo/redo',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/undo-redo/redo\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/{commentId}/reaction":{"post":{"description":"create record comment reaction","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"reaction":{"type":"string"}},"required":["reaction"]}}}},"responses":{"201":{"description":"Successfully create comment reaction."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"reaction\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"reaction\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({reaction: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"reaction\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete record comment reaction","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"reaction":{"type":"string"}},"required":["reaction"]}}}},"responses":{"200":{"description":"Successfully delete comment reaction."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"reaction\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction';\nconst options = {\n method: 'DELETE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"reaction\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({reaction: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"reaction\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"DELETE\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/{commentId}":{"get":{"description":"Get record comment detail","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Returns the record's comment detail","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]},"reaction":{"type":"array","nullable":true,"items":{"type":"object","properties":{"reaction":{"type":"string"},"user":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]}}},"required":["reaction","user"]}},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"quoteId":{"type":"string"},"deletedTime":{"type":"string"}},"required":["id","content","createdBy","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"update record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}}},"required":["content"]}}}},"responses":{"200":{"description":"Successfully update comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n content: [{type: 'p', value: null, children: [{type: 'span', value: 'string'}]}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"content\\\":[{\\\"type\\\":\\\"p\\\",\\\"value\\\":null,\\\"children\\\":[{\\\"type\\\":\\\"span\\\",\\\"value\\\":\\\"string\\\"}]}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"responses":{"200":{"description":"Successfully delete comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/list":{"get":{"description":"Get record comment list","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":20,"example":20,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string"}]},"required":false,"name":"includeCursor","in":"query"},{"schema":{"anyOf":[{"type":"string","enum":["forward"]},{"type":"string","enum":["backward"]}]},"required":false,"name":"direction","in":"query"}],"responses":{"200":{"description":"Returns the list of record's comment","content":{"application/json":{"schema":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]},"reaction":{"type":"array","nullable":true,"items":{"type":"object","properties":{"reaction":{"type":"string"},"user":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]}}},"required":["reaction","user"]}},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"quoteId":{"type":"string"},"deletedTime":{"type":"string"}},"required":["id","content","createdBy","createdTime"]}},"nextCursor":{"type":"string","nullable":true}},"required":["comments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/create":{"post":{"description":"create record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"quoteId":{"type":"string","nullable":true},"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}}},"required":["content"]}}}},"responses":{"201":{"description":"Successfully create comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/create \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"quoteId\":\"string\",\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/create';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"quoteId\":\"string\",\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/create',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n quoteId: 'string',\n content: [{type: 'p', value: null, children: [{type: 'span', value: 'string'}]}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"quoteId\\\":\\\"string\\\",\\\"content\\\":[{\\\"type\\\":\\\"p\\\",\\\"value\\\":null,\\\"children\\\":[{\\\"type\\\":\\\"span\\\",\\\"value\\\":\\\"string\\\"}]}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/subscribe":{"post":{"description":"subscribe record comment's active","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"201":{"description":"Successfully subscribe record comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"unsubscribe record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Successfully subscribe record comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"get record comment subscribe detail","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Successfully get record comment subscribe detail.","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"tableId":{"type":"string"},"recordId":{"type":"string"},"createdBy":{"type":"string"}},"required":["tableId","recordId","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/attachment/{path}":{"get":{"description":"Get record comment attachment url","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Returns the record's comment attachment url","content":{"application/json":{"schema":{"type":"string"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/count":{"get":{"description":"Get record comment counts by query","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"},"required":false,"description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details","name":"fieldKeyType","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"}],"responses":{"200":{"description":"Returns the comment counts by query","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"recordId":{"type":"string"},"count":{"type":"number"}},"required":["recordId","count"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/count":{"get":{"description":"Get record comment count","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns the comment count by query","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/count \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/count';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/count',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/count\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/me":{"get":{"description":"Get my organization","tags":["organization"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get my organization successfully","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"isAdmin":{"type":"boolean"}},"required":["id","name","isAdmin"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/me \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/me';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/me',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/me\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/department":{"get":{"tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"parentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"}],"responses":{"200":{"description":"Get department list successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}},"hasChildren":{"type":"boolean"}},"required":["id","name","hasChildren"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/department-user":{"get":{"tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"departmentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":0},"required":false,"name":"skip","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":50},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Get department users successfully","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}}},"required":["id","name"]}}},"required":["id","name","email"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/api/{baseId}/ai/generate-stream":{"post":{"description":"Generate ai stream","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string"},"task":{"type":"string","enum":["coding","embedding","translation"],"description":"Quick model selection via predefined task type","example":"coding"},"modelKey":{"type":"string","description":"Specify an exact model configuration to use","example":"openai@gpt-4o@custom-name"}},"required":["prompt"]}}}},"responses":{"201":{"description":"Returns ai generate stream.","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"string"}},"required":["result"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/api/%7BbaseId%7D/ai/generate-stream',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({prompt: 'string', task: 'coding', modelKey: 'openai@gpt-4o@custom-name'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"prompt\\\":\\\"string\\\",\\\"task\\\":\\\"coding\\\",\\\"modelKey\\\":\\\"openai@gpt-4o@custom-name\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/api/%7BbaseId%7D/ai/generate-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/{baseId}/ai/config":{"get":{"description":"Get the configuration of ai, including instance and space configuration","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the configuration of ai.","content":{"application/json":{"schema":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"modelDefinationMap":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"inputRate":{"type":"number","example":0.001,"description":"The number of credits spent using a prompt token"},"outputRate":{"type":"number","example":0.0025,"description":"The number of credits spent using a completion token"},"visionEnable":{"type":"boolean","description":"Whether to enable vision"},"audioEnable":{"type":"boolean","description":"Whether to enable audio"},"videoEnable":{"type":"boolean","description":"Whether to enable video"},"deepThinkEnable":{"type":"boolean","description":"Whether to enable deep think"}},"required":["inputRate","outputRate"]},{"type":"object","properties":{"usagePerUnit":{"type":"number","example":100,"description":"The number of credits spent for generating one image"},"outputType":{"type":"string","enum":["image","audio","video"]}},"required":["usagePerUnit","outputType"]}]}},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}}}}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/%7BbaseId%7D/ai/config \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/%7BbaseId%7D/ai/config';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/%7BbaseId%7D/ai/config',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/%7BbaseId%7D/ai/config\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/{baseId}/ai/disable-ai-actions":{"get":{"description":"Get the disable ai actions","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the configuration of ai.","content":{"application/json":{"schema":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}},"required":["disableActions"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/%7BbaseId%7D/ai/disable-ai-actions \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/%7BbaseId%7D/ai/disable-ai-actions';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/%7BbaseId%7D/ai/disable-ai-actions',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/%7BbaseId%7D/ai/disable-ai-actions\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/integrity/base/{baseId}/link-check":{"get":{"description":"Check integrity of link fields in a project","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"query"}],"responses":{"200":{"description":"Returns integrity check results for the project","content":{"application/json":{"schema":{"type":"object","properties":{"hasIssues":{"type":"boolean"},"linkFieldIssues":{"type":"array","items":{"type":"object","properties":{"baseId":{"type":"string","description":"The project id of the link field with is cross-project"},"baseName":{"type":"string"},"tableId":{"type":"string"},"tableName":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ForeignTableNotFound","ForeignKeyNotFound","SelfKeyNotFound","SymmetricFieldNotFound","MissingRecordReference","InvalidLinkReference","ForeignKeyHostTableNotFound","ReferenceFieldNotFound","UniqueIndexNotFound","EmptyString"]},"message":{"type":"string"},"fieldId":{"type":"string"},"tableId":{"type":"string"}},"required":["type","message","fieldId"]}}},"required":["issues"]}}},"required":["hasIssues","linkFieldIssues"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get integrityproject link check","sidebarTitle":"Get integrityproject link check"}}}},"/integrity/base/{baseId}/link-fix?tableId={tableId}":{"post":{"description":"Fix integrity of link fields in a project","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"query"}],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ForeignTableNotFound","ForeignKeyNotFound","SelfKeyNotFound","SymmetricFieldNotFound","MissingRecordReference","InvalidLinkReference","ForeignKeyHostTableNotFound","ReferenceFieldNotFound","UniqueIndexNotFound","EmptyString"]},"message":{"type":"string"},"fieldId":{"type":"string"},"tableId":{"type":"string"}},"required":["type","message","fieldId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post integrityproject link fix","sidebarTitle":"Post integrityproject link fix"}}}},"/table/{tableId}/plugin-panel/{pluginPanelId}":{"get":{"description":"Get a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"responses":{"200":{"description":"Plugin panel retrieved successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"responses":{"200":{"description":"Plugin panel deleted successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel":{"post":{"description":"Create a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Plugin panel created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get all plugin panels","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Plugin panels retrieved successfully.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-panel\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/rename":{"patch":{"description":"Rename a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Plugin panel updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/layout":{"patch":{"description":"Update the layout of a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["layout"]}}}},"responses":{"200":{"description":"The layout of the plugin panel was updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["id","layout"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({layout: [{pluginInstallId: 'string', x: 0, y: 0, w: 0, h: 0}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"layout\\\":[{\\\"pluginInstallId\\\":\\\"string\\\",\\\"x\\\":0,\\\"y\\\":0,\\\"w\\\":0,\\\"h\\\":0}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/install":{"post":{"description":"Install a plugin to a table plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["pluginId"]}}}},"responses":{"201":{"description":"Plugin installed successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"}},"required":["name","pluginId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{pluginInstallId}":{"delete":{"description":"Remove a plugin from a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin removed from plugin panel successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a plugin in plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"name":{"type":"string"},"tableId":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["baseId","name","tableId","pluginId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{pluginInstallId}/rename":{"patch":{"description":"Rename a plugin in a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Plugin renamed successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{pluginInstallId}/update-storage":{"patch":{"description":"Update storage of a plugin in a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Storage updated successfully.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"nullable":true}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/duplicate":{"post":{"description":"Duplicate a plugin panel","summary":"Duplicate a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated plugin panel info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{installedId}/duplicate":{"post":{"description":"Duplicate a dashboard installed plugin","summary":"Duplicate a dashboard installed plugin","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated dashboard info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}":{"get":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Returns data about the plugin context menu.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"tableId":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"positionId":{"type":"string"},"url":{"type":"string"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}}},"required":["name","tableId","pluginId","pluginInstallId","positionId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Remove a plugin context menu","tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin context menu removed successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/install":{"post":{"description":"Install a plugin context menu","tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["pluginId"]}}}},"responses":{"201":{"description":"Plugin context menu installed successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"name":{"type":"string"},"order":{"type":"number"}},"required":["pluginInstallId","name","order"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/install \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/install';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/install',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-context-menu/install\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/move":{"put":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Plugin context menu moved successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/rename":{"patch":{"description":"Rename a plugin context menu","tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Plugin context menu renamed successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/update-storage":{"put":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Plugin context menu updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"tableId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["tableId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu":{"get":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns a list of plugins","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"name":{"type":"string"},"pluginId":{"type":"string"},"logo":{"type":"string"},"order":{"type":"number"}},"required":["pluginInstallId","name","pluginId","logo","order"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-context-menu\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/storage":{"get":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin context menu storage retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"tableId":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["name","tableId","pluginId","pluginInstallId","storage"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/{token}":{"get":{"description":"Get unsubscribe information","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["automation","notify","system","verifyCode","resetPassword","invite","common","exportBase","collaboratorCellTag","collaboratorMultiRowTag","notifyMerge","waitlistInvite","automationSendEmailAction"]},"baseId":{"type":"string"},"email":{"type":"string"},"subscriptionStatus":{"type":"boolean"}},"required":["type","baseId","email"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/unsubscribe/%7Btoken%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/%7Btoken%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/unsubscribe/%7Btoken%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/unsubscribe/%7Btoken%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Update subscription status","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"subscriptionStatus":{"type":"boolean"}},"required":["subscriptionStatus"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"boolean"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/unsubscribe/%7Btoken%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"subscriptionStatus\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/%7Btoken%7D';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"subscriptionStatus\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/unsubscribe/%7Btoken%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({subscriptionStatus: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"subscriptionStatus\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/unsubscribe/%7Btoken%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/list/{baseId}":{"get":{"description":"Get paginated unsubscribe list by baseId","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated unsubscribe list.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["empty"]},"sourceMetaData":{"nullable":true}},"required":["email","createdTime","sourceType","sourceMetaData"]},{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["legacy"]},"sourceMetaData":{"nullable":true}},"required":["email","createdTime","sourceType","sourceMetaData"]},{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["import"]},"sourceMetaData":{"nullable":true}},"required":["email","createdTime","sourceType","sourceMetaData"]},{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["emailLink"]},"sourceMetaData":{"type":"object","properties":{"type":{"type":"string","enum":["automationSendEmailAction"]},"workflow":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"action":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"category":{"type":"string"}},"required":["id","type","category"]}},"required":["type","action"]}},"required":["email","createdTime","sourceType","sourceMetaData"]}]}},"hasMore":{"type":"boolean"},"pageSize":{"type":"number"}},"required":["data","hasMore","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/export-list/{baseId}":{"get":{"description":"Export unsubscribe list","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Export unsubscribe list successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/unsubscribe/export-list/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/export-list/%7BbaseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/unsubscribe/export-list/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/unsubscribe/export-list/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/import-list/{baseId}":{"post":{"description":"Import unsubscribe list","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notify":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]}},"required":["notify"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"boolean"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/unsubscribe/import-list/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/import-list/%7BbaseId%7D';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/unsubscribe/import-list/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n notify: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n presignedUrl: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"notify\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"presignedUrl\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/unsubscribe/import-list/%7BbaseId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/{nodeId}":{"get":{"description":"Retrieve a node in a project by its ID.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Nodes","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project node","sidebarTitle":"Get project node","description":"Retrieve a node in a project by its ID."}}},"put":{"description":"Update a node in a project by its ID.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"icon":{"type":"string"}}}}}},"responses":{"200":{"description":"Updated node","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"icon\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Update project node","sidebarTitle":"Update project node","description":"Update a node in a project by its ID."}}},"delete":{"description":"Delete a node from a project by its ID.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Deleted node Successfully","content":{"application/json":{"schema":{"type":"object","properties":{"resourceId":{"type":"string"},"resourceType":{"type":"string"},"permanent":{"type":"boolean"}},"required":["resourceId","resourceType"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project node","sidebarTitle":"Delete project node","description":"Delete a node from a project by its ID."}}}},"/base/{baseId}/node/tree":{"get":{"description":"Retrieve the node hierarchy and maximum folder depth for a project.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Nodes","content":{"application/json":{"schema":{"type":"object","properties":{"nodes":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}},"maxFolderDepth":{"type":"number"}},"required":["nodes","maxFolderDepth"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/tree \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/tree';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/tree',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/node/tree\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project node tree","sidebarTitle":"Get project node tree","description":"Retrieve the node hierarchy and maximum folder depth for a project."}}}},"/base/{baseId}/node/list":{"get":{"description":"Retrieve a flat list of nodes in a project.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"List nodes","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/list \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/list',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/node/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"List project nodes","sidebarTitle":"List project nodes","description":"Retrieve a flat list of nodes in a project."}}}},"/base/{baseId}/node/{nodeId}/move":{"put":{"description":"Move or reorder a node within a project hierarchy.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"parentId":{"type":"string","nullable":true},"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}}}}}},"responses":{"200":{"description":"Updated node info","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"parentId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"parentId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({parentId: 'string', anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"parentId\\\":\\\"string\\\",\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Move project node","sidebarTitle":"Move project node","description":"Move or reorder a node within a project hierarchy."}}}},"/base/{baseId}/node/folder":{"post":{"description":"Create a folder in a project hierarchy.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Created folder node","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/folder',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/node/folder\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Create project folder","sidebarTitle":"Create project folder","description":"Create a folder in a project hierarchy."}}}},"/base/{baseId}/node":{"post":{"description":"Create a node in a project hierarchy.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"resourceType":{"type":"string","enum":["folder"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1}},"required":["resourceType","name"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["table"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the project."},"description":{"type":"string","nullable":true,"description":"The description of the table."},"icon":{"type":"string","nullable":true,"format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"The id of the field that start with \"fld\", followed by exactly 16 alphanumeric characters `/^fld[\\da-zA-Z]{16}$/`. It is sometimes useful to specify an id at creation time","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]},"description":"The fields of the table. If it is empty, 3 fields include SingleLineText, Number, SingleSelect will and 3 empty records be generated by default."},"views":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]},"description":"The views of the table. If it is empty, a grid view will be generated by default."},"records":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]},"example":[{"fields":{"single line text":"text value"}}],"description":"The record data of the table. If it is empty, 3 empty records will be generated by default."},"order":{"type":"number"},"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"}},"required":["resourceType","fields","views"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["dashboard"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string"}},"required":["resourceType","name"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["workflow"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1}},"required":["resourceType","name"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["app"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1}},"required":["resourceType","name"]}]}}}},"responses":{"200":{"description":"Created node","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"resourceType\":\"folder\",\"parentId\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"resourceType\":\"folder\",\"parentId\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({resourceType: 'folder', parentId: 'string', name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"resourceType\\\":\\\"folder\\\",\\\"parentId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/node\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Create project node","sidebarTitle":"Create project node","description":"Create a node in a project hierarchy."}}}},"/base/{baseId}/node/{nodeId}/duplicate":{"post":{"description":"Create a copy of a node in a project.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"includeRecords":{"type":"boolean"}},"required":["name","includeRecords"]},{"type":"object","properties":{"name":{"type":"string"}}},{"type":"object","properties":{"name":{"type":"string"}}}]}}}},"responses":{"200":{"description":"Duplicated node","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"includeRecords\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"includeRecords\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', includeRecords: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"includeRecords\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Duplicate project node","sidebarTitle":"Duplicate project node","description":"Create a copy of a node in a project."}}}},"/base/{baseId}/node/{nodeId}/permanent":{"delete":{"description":"Permanently delete a node from a project by its ID.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Permanent deleted node Successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Permanently delete project node","sidebarTitle":"Permanently delete project node","description":"Permanently delete a node from a project by its ID."}}}},"/base/{baseId}/node/folder/{folderId}":{"patch":{"description":"Rename a folder in a project.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"folderId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Updated node folder","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Rename project folder","sidebarTitle":"Rename project folder","description":"Rename a folder in a project."}}},"delete":{"description":"Delete a folder from a project and move its children to the parent.","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"folderId","in":"path"}],"responses":{"200":{"description":"Deleted folder node (for client side cleanup)"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project folder","sidebarTitle":"Delete project folder","description":"Delete a folder from a project and move its children to the parent."}}}},"/base/{baseId}/share":{"post":{"description":"Create a project share link.","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"password":{"type":"string","nullable":true,"minLength":3}},"required":["nodeId"]}}}},"responses":{"201":{"description":"Returns the created project share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"nodeId\":\"string\",\"allowSave\":true,\"allowCopy\":true,\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"nodeId\":\"string\",\"allowSave\":true,\"allowCopy\":true,\"password\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({nodeId: 'string', allowSave: true, allowCopy: true, password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"nodeId\\\":\\\"string\\\",\\\"allowSave\\\":true,\\\"allowCopy\\\":true,\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/share\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Create project share link","sidebarTitle":"Create project share link","description":"Create a project share link."}}},"get":{"description":"List the IDs of shared nodes in a project.","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns list of shared node IDs","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"nodeId":{"type":"string"}},"required":["nodeId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/share\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"List shared project node IDs","sidebarTitle":"List shared project node IDs","description":"List the IDs of shared nodes in a project."}}}},"/base/{baseId}/share/{shareId}":{"patch":{"description":"Update the settings of a project share link.","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"},"password":{"type":"string","nullable":true,"minLength":3}}}}}},"responses":{"200":{"description":"Returns the updated project share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"allowSave\":true,\"allowCopy\":true,\"enabled\":true,\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"allowSave\":true,\"allowCopy\":true,\"enabled\":true,\"password\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share/%7BshareId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({allowSave: true, allowCopy: true, enabled: true, password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"allowSave\\\":true,\\\"allowCopy\\\":true,\\\"enabled\\\":true,\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/share/%7BshareId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Update project share link","sidebarTitle":"Update project share link","description":"Update the settings of a project share link."}}},"delete":{"description":"Delete a project share link by its ID.","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Successfully deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share/%7BshareId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/share/%7BshareId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project share link","sidebarTitle":"Delete project share link","description":"Delete a project share link by its ID."}}}},"/base/{baseId}/share/{shareId}/refresh":{"post":{"description":"Generate a new ID for a project share link.","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Returns the refreshed project share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Refresh project share link","sidebarTitle":"Refresh project share link","description":"Generate a new ID for a project share link."}}}},"/share/{shareId}/base":{"get":{"description":"Retrieve shared project information using a share link ID.","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Returns the shared project information","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareMeta":{"type":"object","properties":{"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true}},"required":["password","nodeId","allowSave","allowCopy"]},"defaultUrl":{"type":"string"}},"required":["baseId","shareMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/base \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get shared project","sidebarTitle":"Get shared project","description":"Retrieve shared project information using a share link ID."}}}},"/base/{baseId}/share/node/{nodeId}":{"get":{"description":"Retrieve the share link settings for a node in a project.","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Returns the project share for the specified node","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project share by node","sidebarTitle":"Get project share by node","description":"Retrieve the share link settings for a node in a project."}}}},"/share/{shareId}/base/auth":{"post":{"description":"Authenticate with a password to access a shared project.","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":3}},"required":["password"]}}}},"responses":{"201":{"description":"Successfully authenticated","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/base/auth \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base/auth';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"password\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/base/auth',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/base/auth\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Authenticate shared project","sidebarTitle":"Authenticate shared project","description":"Authenticate with a password to access a shared project."}}}},"/share/{shareId}/base/copy":{"post":{"description":"Copy a shared project to the target space.","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"The target space ID to copy the project to"},"name":{"type":"string","description":"The name of the copied project"},"withRecords":{"type":"boolean","default":true,"description":"Whether to copy records"},"baseId":{"type":"string","description":"The target project ID to copy into. If provided, tables will be added to the existing project instead of creating a new one."}},"required":["spaceId"]}}}},"responses":{"200":{"description":"Returns the copied project","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/base/copy \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"name\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base/copy';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"name\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/base/copy',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({spaceId: 'string', name: 'string', withRecords: true, baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"withRecords\\\":true,\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/base/copy\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Copy shared project","sidebarTitle":"Copy shared project","description":"Copy a shared project to the target space."}}}},"/user-integrations":{"get":{"description":"Get user integration list","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["slack"],"description":"Filter by provider"},"required":false,"description":"Filter by provider","name":"provider","in":"query"}],"responses":{"200":{"description":"Returns the list of user integration.","content":{"application/json":{"schema":{"type":"object","properties":{"integrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"provider":{"type":"string","enum":["slack"]},"name":{"type":"string"},"lastUsedTime":{"type":"string"},"createdTime":{"type":"string"},"connectedTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"hasSecret":{"type":"boolean"},"metadata":{"anyOf":[{"type":"object","properties":{"userInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"}},"required":["id","name","email"]},"teamInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["userInfo","teamInfo"]}]}},"required":["id","userId","provider","name","createdTime","hasSecret","metadata"]}}},"required":["integrations"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/user-integrations?provider=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations?provider=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user-integrations?provider=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user-integrations?provider=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/{integrationId}":{"delete":{"description":"Delete user integration","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/user-integrations/%7BintegrationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/%7BintegrationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user-integrations/%7BintegrationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/user-integrations/%7BintegrationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/{integrationId}/name":{"put":{"description":"Update user integration name","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Updated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/user-integrations/%7BintegrationId%7D/name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/%7BintegrationId%7D/name';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user-integrations/%7BintegrationId%7D/name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/user-integrations/%7BintegrationId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/action/{actionId}":{"get":{"description":"get a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets,
for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project workflow action","sidebarTitle":"Get project workflow action"}}},"put":{"description":"update a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"}}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets,
for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Put project workflow action","sidebarTitle":"Put project workflow action"}}},"delete":{"description":"delete a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project workflow action","sidebarTitle":"Delete project workflow action"}}}},"/base/{baseId}/workflow/{workflowId}/action":{"post":{"description":"Create a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"parentNodeId":{"type":"string","description":"witch node this the parent, if not provided, it is a root node"},"type":{"type":"string","enum":["sendEmail","createRecord","updateRecord","httpRequest","getRecords","aiGenerate","script"],"description":"type of action"}},"required":["parentNodeId","type"]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets,
for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"sendEmail\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"sendEmail\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n config: null,\n parentNodeId: 'string',\n type: 'sendEmail'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"parentNodeId\\\":\\\"string\\\",\\\"type\\\":\\\"sendEmail\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project workflow action","sidebarTitle":"Post project workflow action"}}}},"/base/{baseId}/workflow/{workflowId}/action/{actionId}/duplicate":{"post":{"description":"duplicate a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"responses":{"200":{"description":"Successful duplicate","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets,
for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project workflow action duplicate","sidebarTitle":"Post project workflow action duplicate"}}}},"/base/{baseId}/workflow/{workflowId}/action/{actionId}/script-input":{"get":{"description":"Get script integrations for a workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"responses":{"200":{"description":"Script integrations data","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"integrations":{"type":"object","additionalProperties":{"nullable":true}},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project workflow action script input","sidebarTitle":"Get project workflow action script input"}}}},"/base/{baseId}/workflow/{workflowId}/logic/{logicId}":{"get":{"description":"get a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"logicId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"conditions":{"type":"object"}},"required":["conditions"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["condition"],"description":"Condition logic"}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"fact":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["fact"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["Repeat"],"description":"Actions in this group will repeat for each item in the input list."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project workflow logic","sidebarTitle":"Get project workflow logic"}}},"put":{"description":"update a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"}}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"conditions":{"type":"object"}},"required":["conditions"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["condition"],"description":"Condition logic"}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"fact":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["fact"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["Repeat"],"description":"Actions in this group will repeat for each item in the input list."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Put project workflow logic","sidebarTitle":"Put project workflow logic"}}},"delete":{"description":"delete a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project workflow logic","sidebarTitle":"Delete project workflow logic"}}}},"/base/{baseId}/workflow/{workflowId}/logic":{"post":{"description":"Create a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"parentNodeId":{"type":"string","description":"witch node this the parent, if not provided, it is a root node"},"type":{"type":"string","enum":["condition","Repeat"],"description":"type of logic"}},"required":["parentNodeId","type"]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"type":"object","properties":{"logic":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"conditions":{"type":"object"}},"required":["conditions"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["condition"],"description":"Condition logic"}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"fact":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["fact"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["Repeat"],"description":"Actions in this group will repeat for each item in the input list."}},"required":["config","id","category","type"]}]},"controls":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"config":{"type":"object","properties":{"sourceNodeId":{"type":"string"}},"required":["sourceNodeId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["control"]},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["conditionEnd","triggerEnd","repeatEnd"]}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"config":{"type":"object","properties":{"truthy":{"type":"boolean"},"sourceNodeId":{"type":"string"}},"required":["truthy","sourceNodeId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["control"]},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["conditionBranch"],"description":"all logic category is actually a group, so they need a node for end mark"}},"required":["config","id","category","type"]}]},"description":"workflow control nodes, contains the logic branch and the end node"}},"required":["logic","controls"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"condition\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"condition\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n config: null,\n parentNodeId: 'string',\n type: 'condition'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"parentNodeId\\\":\\\"string\\\",\\\"type\\\":\\\"condition\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project workflow logic","sidebarTitle":"Post project workflow logic"}}}},"/base/{baseId}/workflow/{workflowId}/trigger/{triggerId}":{"get":{"description":"get a automation workflow trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"triggerId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project workflow trigger","sidebarTitle":"Get project workflow trigger"}}},"put":{"description":"update a automation workflow trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"triggerId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"}}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"type":"object"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Put project workflow trigger","sidebarTitle":"Put project workflow trigger"}}}},"/base/{baseId}/workflow/{workflowId}/trigger":{"post":{"description":"Create a automation workflow trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"type":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"],"description":"type of trigger"}},"required":["type"]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"type":"object"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null, type: 'recordCreated'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"type\\\":\\\"recordCreated\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project workflow trigger","sidebarTitle":"Post project workflow trigger"}}}},"/base/{baseId}/workflow/{workflowId}/trigger/{triggerId}/generate-webhook-token":{"post":{"description":"Generate a new webhook token for the trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"triggerId","in":"path"}],"responses":{"200":{"description":"Successfully generated webhook token","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"secret":{"type":"string"}},"required":["token","secret"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project workflow trigger generate webhook token","sidebarTitle":"Post project workflow trigger generate webhook token"}}}},"/base/{baseId}/workflow/{workflowId}":{"get":{"description":"get a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"baseId":{"type":"string","description":"the project id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"}},"required":["source","target"]},"description":"edges of the nodes"},"nodes":{"type":"array","items":{"type":"object"},"description":"nodes list include trigger and actions"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"activeUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"],"description":"active user of the workflow"}},"required":["id","baseId","edges","nodes","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project workflow","sidebarTitle":"Get project workflow"}}},"put":{"description":"update a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"trigger":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"type":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"],"description":"type of trigger"}},"required":["type"]}}}}}},"responses":{"200":{"description":"Successful updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n trigger: {name: 'string', description: 'string', config: null, type: 'recordCreated'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"trigger\\\":{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"type\\\":\\\"recordCreated\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Put project workflow","sidebarTitle":"Put project workflow"}}},"delete":{"description":"delete a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project workflow","sidebarTitle":"Delete project workflow"}}}},"/base/{baseId}/workflow/{workflowId}/active-snapshot":{"get":{"description":"Get the currently active (published) snapshot of a workflow. Returns the version that is actually running, as opposed to the draft version returned by getWorkflow.","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"The active snapshot of the workflow","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"baseId":{"type":"string","description":"the project id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"}},"required":["source","target"]},"description":"edges of the nodes"},"nodes":{"type":"array","items":{"type":"object"},"description":"nodes list include trigger and actions"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"activeUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"],"description":"active user of the workflow"}},"required":["id","baseId","edges","nodes","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project workflow active snapshot","sidebarTitle":"Get project workflow active snapshot"}}}},"/base/{baseId}/workflow":{"get":{"description":"get automation workflow list in project","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"onlyFirst","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"category":{"type":"string","enum":["logic","trigger","action","control"]}},"required":["id","type","category"]}}},"required":["id","createdBy","createdTime","nodes"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project workflow 1","sidebarTitle":"Get project workflow 1"}}},"post":{"description":"Create a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"trigger":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"type":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"],"description":"type of trigger"}},"required":["type"]}}}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"baseId":{"type":"string","description":"the project id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"}},"required":["source","target"]},"description":"edges of the nodes"},"nodes":{"type":"array","items":{"type":"object"},"description":"nodes list include trigger and actions"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"activeUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"],"description":"active user of the workflow"}},"required":["id","baseId","edges","nodes","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n trigger: {name: 'string', description: 'string', config: null, type: 'recordCreated'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"trigger\\\":{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"type\\\":\\\"recordCreated\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project workflow","sidebarTitle":"Post project workflow"}}}},"/base/{baseId}/workflow/{workflowId}/active":{"put":{"description":"active or inactive a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["activate","deactivate","discard"],"description":"Method to update the workflow, activate: activate the workflow and apply any draft if exist, deactivate: deactivate the workflow, abort: abort the draft back to the last active workflow."}},"required":["method"]}}}},"responses":{"200":{"description":"Successful updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"method\":\"activate\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"method\":\"activate\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({method: 'activate'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"method\\\":\\\"activate\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Put project workflow active","sidebarTitle":"Put project workflow active"}}}},"/base/{baseId}/workflow/{workflowId}/run/{runId}":{"get":{"description":"get automation workflow run list","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"runId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"id of the step"},"status":{"type":"string","enum":["success","failed","running","canceled","pending"]},"nodeId":{"type":"string","description":"id of the node"},"nodeType":{"type":"string","description":"type of the node"},"nodeName":{"type":"string","description":"node name"},"nodeCategory":{"type":"string","description":"node category"},"createdTime":{"type":"string","description":"time when the step was created"},"testedTime":{"type":"string","description":"time when the node was tested"},"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"}},"required":["id","status","nodeId","nodeType","nodeCategory","createdTime"]},"description":"workflow run history"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project workflow run","sidebarTitle":"Get project workflow run"}}}},"/base/{baseId}/workflow/{workflowId}/run":{"get":{"description":"get automation workflow run history list","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"number","nullable":true,"description":"skip number"},"required":false,"description":"skip number","name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"description":"take number"},"required":false,"description":"take number","name":"take","in":"query"},{"schema":{"type":"string","enum":["success","failed","running","canceled","pending"],"description":"filter by status"},"required":false,"description":"filter by status","name":"status","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"rowCount":{"type":"number","description":"total number of the runs"},"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"id of the action run"},"status":{"type":"string","enum":["success","failed","running","canceled","pending"]},"errorMsg":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"],"description":"error message of the workflow run"},"spent":{"type":"number","description":"spent of the workflow run"},"createdTime":{"type":"string","description":"started time of the workflow run"}},"required":["id","status","createdTime"]},"description":"workflow run history"}},"required":["rowCount","runs"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project workflow run 1","sidebarTitle":"Get project workflow run 1"}}}},"/base/{baseId}/workflow/{workflowId}/run/summary":{"get":{"description":"get automation workflow run summary statistics","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"totalCount":{"type":"number","description":"total number of runs"},"statusStats":{"type":"object","properties":{"success":{"type":"number"},"failed":{"type":"number"},"running":{"type":"number"},"pending":{"type":"number"},"canceled":{"type":"number"}},"required":["success","failed","running","pending","canceled"],"description":"count of runs by status"},"avgSpent":{"type":"number","description":"average runtime in milliseconds"}},"required":["totalCount","statusStats","avgSpent"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project workflow runsummary","sidebarTitle":"Get project workflow runsummary"}}}},"/base/{baseId}/workflow/{workflowId}/test/{nodeId}":{"post":{"description":"test a automation workflow node","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recordId":{"type":"string","description":"the record id to test"},"sideEffect":{"type":"boolean","description":"whether to test with side effect"},"withDependency":{"type":"boolean","description":"whether to test with dependency"}},"additionalProperties":{"nullable":true}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n recordId: 'string',\n sideEffect: true,\n withDependency: true,\n property1: null,\n property2: null\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordId\\\":\\\"string\\\",\\\"sideEffect\\\":true,\\\"withDependency\\\":true,\\\"property1\\\":null,\\\"property2\\\":null}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project workflow test","sidebarTitle":"Post project workflow test"}}}},"/base/{baseId}/workflow/{workflowId}/test-all":{"post":{"description":"test a automation workflow all","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recordId":{"type":"string","description":"the record id to test"},"sideEffect":{"type":"boolean","description":"whether to test with side effect"},"withDependency":{"type":"boolean","description":"whether to test with dependency"}},"additionalProperties":{"nullable":true}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"type":"boolean"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n recordId: 'string',\n sideEffect: true,\n withDependency: true,\n property1: null,\n property2: null\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordId\\\":\\\"string\\\",\\\"sideEffect\\\":true,\\\"withDependency\\\":true,\\\"property1\\\":null,\\\"property2\\\":null}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project workflow test all","sidebarTitle":"Post project workflow test all"}}}},"/base/{baseId}/workflow/{workflowId}/order":{"put":{"description":"Update workflow order","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Put project workflow order","sidebarTitle":"Put project workflow order"}}}},"/base/{baseId}/workflow/{tableId}/filter-link-records":{"post":{"description":"get automation workflow list in project","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"nullable":true}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data null"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: 'null'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"null\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project workflow filter link records","sidebarTitle":"Post project workflow filter link records"}}}},"/base/{baseId}/workflow/{workflowId}/duplicate":{"post":{"description":"duplicate a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful duplicate"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project workflow duplicate","sidebarTitle":"Post project workflow duplicate"}}}},"/base/{baseId}/workflow/{workflowId}/permanent":{"delete":{"summary":"Permanently delete workflow","description":"Permanently delete a workflow and all its data. This action cannot be undone.","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Workflow permanently deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix/status":{"patch":{"description":"Enable authority","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"enabledTime":{"type":"string"}},"required":["id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"enabled\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/status';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"enabled\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix/status',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({enabled: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"enabled\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix/status\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrixstatus","sidebarTitle":"Patch project authority matrixstatus"}}}},"/base/{baseId}/authority-matrix":{"get":{"description":"Get authority matrix","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"defaultRole":{"type":"string"},"enabledTime":{"type":"string"},"adminUsers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}}},"required":["id","baseId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project authority matrix","sidebarTitle":"Get project authority matrix"}}},"put":{"description":"Update authority matrix","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"defaultRole":{"type":"string","nullable":true}},"required":["defaultRole"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"defaultRole":{"type":"string"},"enabledTime":{"type":"string"}},"required":["id","baseId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"defaultRole\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"defaultRole\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({defaultRole: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"defaultRole\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/authority-matrix\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Put project authority matrix","sidebarTitle":"Put project authority matrix"}}}},"/base/{baseId}/authority-matrix/admin-user":{"patch":{"description":"Update admin user","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["userIds"]}}}},"responses":{"200":{"description":"Successful response"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/admin-user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/admin-user';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"userIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix/admin-user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix/admin-user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrixadmin user","sidebarTitle":"Patch project authority matrixadmin user"}}}},"/base/{baseId}/authority-matrix-role":{"post":{"description":"Add authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"tables":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"enabledViewIds":{"type":"array","items":{"type":"string"}},"enabled":{"type":"boolean"}},"required":["tableId"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabled":{"type":"boolean"}},"required":["nodeType","nodeId"]}}},"required":["name"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"createdTime":{"type":"string"},"enabledTime":{"type":"string"}},"required":["authorityMatrixRoleId","tableId","createdTime"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixRoleId":{"type":"string"},"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabledTime":{"type":"string"},"createdTime":{"type":"string"}},"required":["authorityMatrixRoleId","nodeType","nodeId"]}}},"required":["id","name","baseId","createdTime","tables"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"enabled\":true,\"tables\":[{\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabledViewIds\":[\"string\"],\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"enabled\":true,\"tables\":[{\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabledViewIds\":[\"string\"],\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n enabled: true,\n tables: [\n {\n tableId: 'string',\n disabledActions: ['string'],\n fieldRecordPermission: [{fieldId: 'string', disabledActions: ['string']}],\n recordFilter: {},\n enabledViewIds: ['string'],\n enabled: true\n }\n ],\n nodes: [{nodeType: 'workflow', nodeId: 'string', enabled: true}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"tables\\\":[{\\\"tableId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"],\\\"fieldRecordPermission\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"]}],\\\"recordFilter\\\":{},\\\"enabledViewIds\\\":[\\\"string\\\"],\\\"enabled\\\":true}],\\\"nodes\\\":[{\\\"nodeType\\\":\\\"workflow\\\",\\\"nodeId\\\":\\\"string\\\",\\\"enabled\\\":true}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/authority-matrix-role\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project authority matrix role","sidebarTitle":"Post project authority matrix role"}}},"get":{"description":"Get authority matrix role list","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","name","baseId","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix-role\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project authority matrix role","sidebarTitle":"Get project authority matrix role"}}}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}":{"delete":{"description":"Delete authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"responses":{"200":{"description":"Successful response"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project authority matrix role","sidebarTitle":"Delete project authority matrix role"}}},"put":{"description":"Update authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"enabled":{"type":"boolean"}},"required":["authorityMatrixRoleId","tableId"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabled":{"type":"boolean"}},"required":["nodeType","nodeId"]}}},"required":["name"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"createdTime":{"type":"string"},"enabledTime":{"type":"string"}},"required":["authorityMatrixRoleId","tableId","createdTime"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixRoleId":{"type":"string"},"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabledTime":{"type":"string"},"createdTime":{"type":"string"}},"required":["authorityMatrixRoleId","nodeType","nodeId"]}}},"required":["id","name","baseId","createdTime","tables"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"tables\":[{\"authorityMatrixRoleId\":\"string\",\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"enabledViewIds\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"tables\":[{\"authorityMatrixRoleId\":\"string\",\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"enabledViewIds\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n tables: [\n {\n authorityMatrixRoleId: 'string',\n tableId: 'string',\n disabledActions: ['string'],\n enabledViewIds: ['string'],\n fieldRecordPermission: [{fieldId: 'string', disabledActions: ['string']}],\n recordFilter: {},\n enabled: true\n }\n ],\n nodes: [{nodeType: 'workflow', nodeId: 'string', enabled: true}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"tables\\\":[{\\\"authorityMatrixRoleId\\\":\\\"string\\\",\\\"tableId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"],\\\"enabledViewIds\\\":[\\\"string\\\"],\\\"fieldRecordPermission\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"]}],\\\"recordFilter\\\":{},\\\"enabled\\\":true}],\\\"nodes\\\":[{\\\"nodeType\\\":\\\"workflow\\\",\\\"nodeId\\\":\\\"string\\\",\\\"enabled\\\":true}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Put project authority matrix role","sidebarTitle":"Put project authority matrix role"}}},"get":{"description":"Get authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"createdTime":{"type":"string"},"enabledTime":{"type":"string"}},"required":["authorityMatrixRoleId","tableId","createdTime"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixRoleId":{"type":"string"},"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabledTime":{"type":"string"},"createdTime":{"type":"string"}},"required":["authorityMatrixRoleId","nodeType","nodeId"]}},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","name","baseId","createdTime","tables"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project authority matrix role 1","sidebarTitle":"Get project authority matrix role 1"}}}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/status":{"patch":{"description":"Update authority matrix role status","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRole","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixId":{"type":"string"},"enabledTime":{"type":"string"}},"required":["id","authorityMatrixId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"enabled\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"enabled\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({enabled: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"enabled\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrix role status","sidebarTitle":"Patch project authority matrix role status"}}}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/name":{"patch":{"description":"Update authority matrix role name","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRole","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrix role name","sidebarTitle":"Patch project authority matrix role name"}}}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/description":{"patch":{"description":"Update authority matrix role description","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRole","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"description":{"type":"string"}},"required":["id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"description\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({description: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrix role description","sidebarTitle":"Patch project authority matrix role description"}}}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/user":{"patch":{"description":"Update authority matrix role user","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string"}},"departmentIds":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixId":{"type":"string"},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","authorityMatrixId","users","departments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"userIds\":[\"string\"],\"departmentIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"userIds\":[\"string\"],\"departmentIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({userIds: ['string'], departmentIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userIds\\\":[\\\"string\\\"],\\\"departmentIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrix role user","sidebarTitle":"Patch project authority matrix role user"}}}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/duplicate":{"post":{"description":"Duplicate authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"includeUsers":{"type":"boolean"},"includeDepartments":{"type":"boolean"}}}}}},"responses":{"201":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"authorityMatrixRoleId":{"type":"string"}},"required":["baseId","authorityMatrixRoleId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"includeUsers\":true,\"includeDepartments\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"includeUsers\":true,\"includeDepartments\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({includeUsers: true, includeDepartments: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"includeUsers\\\":true,\\\"includeDepartments\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project authority matrix role duplicate","sidebarTitle":"Post project authority matrix role duplicate"}}}},"/base/{baseId}/authority-matrix-role-table/{tableId}/filter-link-records":{"get":{"description":"Get authority matrix table link records","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project authority matrix role table filter link records","sidebarTitle":"Get project authority matrix role table filter link records"}}}},"/billing/base-products":{"get":{"description":"Get base products list","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns base products list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"trialPeriodInDays":{"type":"number"},"giftCredit":{"type":"number"},"creditSubscribeEnable":{"type":"boolean"},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}}},"required":["id","type","catalog","level","limit","prices"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/base-products \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/base-products';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/base-products',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/base-products\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/add-on-products":{"get":{"description":"Get add-on products list","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns add-on products list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}},"trialPeriodInDays":{"type":"number"}},"required":["id","type","catalog","unitAmount","prices"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/add-on-products \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/add-on-products';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/add-on-products',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/add-on-products\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription":{"get":{"description":"Get subscription detail by spaceId","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns subscription detail.","content":{"application/json":{"schema":{"type":"object","properties":{"base":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"creditSubscribeEnable":{"type":"boolean"},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"quantity":{"type":"number"},"priceId":{"type":"string","nullable":true},"unitAmount":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAt":{"type":"string","nullable":true},"isTrialUsed":{"type":"boolean"},"period":{"type":"string","enum":["month","year","lifetime"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["id","type","catalog","level","limit","status","quantity","priceId","unitAmount","interval","currentPeriodStart","currentPeriodEnd","cancelAt"]},"credit":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]},"rowCount":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]},"attachmentSize":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]},"automationRun":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]}},"required":["base"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/subscription',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/subscription\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Cancel subscription for a space","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"required":true,"name":"type","in":"query"},{"schema":{"type":"string"},"required":false,"name":"successUrl","in":"query"}],"responses":{"200":{"description":"Cancel successfully","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","nullable":true}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing":{"get":{"description":"Get space billing details","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns space billing details.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"plan":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"interval":{"type":"string","enum":["month","year"]},"quantity":{"type":"number"},"unitAmount":{"type":"number"},"usage":{"type":"object","properties":{"numRows":{"type":"number"},"attachmentSize":{"type":"number"},"numDatabaseConnections":{"type":"number"},"numCollaborators":{"type":"number"},"numAutomationSendEmail":{"type":"number"},"numAutomationRuns":{"type":"number"}},"required":["numRows","attachmentSize","numDatabaseConnections","numCollaborators","numAutomationSendEmail","numAutomationRuns"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAt":{"type":"string","nullable":true},"cycleStart":{"type":"string","nullable":true},"cycleEnd":{"type":"string","nullable":true},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"period":{"type":"string","enum":["month","year","lifetime"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","interval","quantity","unitAmount","usage","limit","currentPeriodStart","currentPeriodEnd","cancelAt","status"]},"credit":{"type":"object","properties":{"amount":{"type":"number"},"usedAmount":{"type":"number"},"rewardAmount":{"type":"number","nullable":true}},"required":["amount","usedAmount"]},"detail":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"}},"required":["name","email"]}},"required":["spaceId","plan","credit","detail"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/invoice/base-list":{"get":{"description":"Get paginated invoice list by spaceId","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Returns paginated invoice list.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","nullable":true},"number":{"type":"string","nullable":true},"amount":{"type":"number"},"currency":{"type":"string"},"createdTime":{"type":"string"},"status":{"type":"string","nullable":true},"pdfUrl":{"type":"string","nullable":true}},"required":["id","number","amount","currency","createdTime","status"]}},"hasMore":{"type":"boolean"},"pageSize":{"type":"number"}},"required":["data","hasMore","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/{licenseId}":{"get":{"description":"Get license details for the self-hosted related subscription","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"licenseId","in":"path"}],"responses":{"200":{"description":"Returns license details for the self-hosted related subscription","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"instanceId":{"type":"string"},"currentPeriodStart":{"type":"string"},"currentPeriodEnd":{"type":"string"},"quantity":{"type":"number"},"unitAmount":{"type":"number"},"licenseKey":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]}},"required":["id","instanceId","currentPeriodStart","currentPeriodEnd","quantity","unitAmount","licenseKey","interval","level"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/license/%7BlicenseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/%7BlicenseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/license/%7BlicenseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/license/%7BlicenseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license":{"get":{"description":"Get license list","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns license list","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"instanceId":{"type":"string"},"currentPeriodStart":{"type":"string"},"currentPeriodEnd":{"type":"string"},"quantity":{"type":"number"},"unitAmount":{"type":"number"},"licenseKey":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]}},"required":["id","instanceId","currentPeriodStart","currentPeriodEnd","quantity","unitAmount","licenseKey","interval","level"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/license \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/license',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/license\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/manage-billing":{"post":{"description":"Manage billing","tags":["billing","license"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"returnUrl":{"type":"string"}},"required":["returnUrl"]}}}},"responses":{"200":{"description":"Returns manage billing url","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/billing/subscription/license/manage-billing \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"returnUrl\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/manage-billing';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"returnUrl\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/license/manage-billing',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({returnUrl: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"returnUrl\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/billing/subscription/license/manage-billing\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/manage-billing/availability":{"get":{"description":"Get manage billing portal availability","tags":["billing","license"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns whether user can access manage billing portal","content":{"application/json":{"schema":{"type":"object","properties":{"canAccessPortal":{"type":"boolean"}},"required":["canAccessPortal"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/license/manage-billing/availability \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/manage-billing/availability';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/license/manage-billing/availability',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/license/manage-billing/availability\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription/checkout":{"post":{"description":"Get checkout session url for a space","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"priceId":{"type":"string"},"quantity":{"type":"number"},"successUrl":{"type":"string"},"cancelUrl":{"type":"string"},"isTrial":{"type":"boolean"},"clientReferenceId":{"type":"string"}},"required":["priceId","quantity"]}}}},"responses":{"200":{"description":"Returns checkout session url about a space.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","nullable":true}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/checkout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"isTrial\":true,\"clientReferenceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/checkout';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"isTrial\":true,\"clientReferenceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/subscription/checkout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n priceId: 'string',\n quantity: 0,\n successUrl: 'string',\n cancelUrl: 'string',\n isTrial: true,\n clientReferenceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"priceId\\\":\\\"string\\\",\\\"quantity\\\":0,\\\"successUrl\\\":\\\"string\\\",\\\"cancelUrl\\\":\\\"string\\\",\\\"isTrial\\\":true,\\\"clientReferenceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/billing/subscription/checkout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/checkout":{"post":{"description":"Get checkout session url for a self-hosted license","tags":["billing"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string","minLength":36,"maxLength":36},"priceId":{"type":"string"},"quantity":{"type":"number"},"successUrl":{"type":"string"},"cancelUrl":{"type":"string"},"clientReferenceId":{"type":"string"}},"required":["instanceId","priceId","quantity"]}}}},"responses":{"200":{"description":"Returns checkout session url about a self-hosted license.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","nullable":true}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/billing/subscription/license/checkout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"instanceId\":\"stringstringstringstringstringstring\",\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"clientReferenceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/checkout';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"instanceId\":\"stringstringstringstringstringstring\",\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"clientReferenceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/license/checkout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n instanceId: 'stringstringstringstringstringstring',\n priceId: 'string',\n quantity: 0,\n successUrl: 'string',\n cancelUrl: 'string',\n clientReferenceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"instanceId\\\":\\\"stringstringstringstringstringstring\\\",\\\"priceId\\\":\\\"string\\\",\\\"quantity\\\":0,\\\"successUrl\\\":\\\"string\\\",\\\"cancelUrl\\\":\\\"string\\\",\\\"clientReferenceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/billing/subscription/license/checkout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription/plan":{"get":{"description":"Retrieves the plan subscription","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the plan subscription.","content":{"application/json":{"schema":{"type":"object","properties":{"quantity":{"type":"number"}},"required":["quantity"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/plan \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/plan';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/subscription/plan',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/subscription/plan\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/all-products":{"get":{"description":"Get all products collection","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns all products collection.","content":{"application/json":{"schema":{"type":"object","properties":{"baseProducts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"trialPeriodInDays":{"type":"number"},"giftCredit":{"type":"number"},"creditSubscribeEnable":{"type":"boolean"},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}}},"required":["id","type","catalog","level","limit","prices"]}},"addOnProducts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}},"trialPeriodInDays":{"type":"number"}},"required":["id","type","catalog","unitAmount","prices"]}}},"required":["baseProducts","addOnProducts"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/all-products \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/all-products';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/all-products',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/all-products\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/credit-summary":{"get":{"description":"Get space credit summary","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns space credit summary.","content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"number"},"usedAmount":{"type":"number"},"leftAmount":{"type":"number"}},"required":["amount","usedAmount","leftAmount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-summary \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/credit-summary',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/credit-summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/credit-detail":{"get":{"description":"Get space credit usage detail by month","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"required":true,"name":"month","in":"query"}],"responses":{"200":{"description":"Returns space credit usage detail.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"automation_ai_action":{"type":"number"},"ai_generation":{"type":"number"},"field_ai_generation":{"type":"number"},"ai_chat":{"type":"number"},"app_generation":{"type":"number"}},"required":["date","automation_ai_action","ai_generation","field_ai_generation","ai_chat","app_generation"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/credit-history":{"get":{"description":"Get space credit history list with cursor pagination","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"required":true,"name":"month","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"required":false,"name":"take","in":"query"},{"schema":{"type":"string","enum":["automation_ai_action","ai_generation","field_ai_generation","ai_chat","app_generation"]},"required":false,"name":"sourceType","in":"query"},{"schema":{"type":"string","enum":["createdTime","amount"]},"required":false,"name":"orderBy","in":"query"},{"schema":{"type":"string","enum":["asc","desc"]},"required":false,"name":"order","in":"query"}],"responses":{"200":{"description":"Returns credit history records with cursor pagination.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"sourceType":{"type":"string","enum":["automation_ai_action","ai_generation","field_ai_generation","ai_chat","app_generation"]},"amount":{"type":"number"},"createdTime":{"type":"string"},"displayName":{"type":"string","nullable":true},"user":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","avatar"]}},"required":["id","sourceType","amount","createdTime","displayName","user"]}},"nextCursor":{"type":"string","nullable":true}},"required":["data","nextCursor"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/manage-portal":{"get":{"description":"Get Stripe customer portal URL for managing billing details","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns Stripe customer portal URL.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/manage-portal \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/manage-portal';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/manage-portal',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/manage-portal\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}":{"patch":{"description":"Update a user info","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"isActivated":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Update a user info successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/user/%7BuserId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"isActivated\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"isActivated\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user/%7BuserId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', isActivated: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"isActivated\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/user/%7BuserId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a user by user ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/admin/user/%7BuserId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user/%7BuserId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/user/%7BuserId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user":{"get":{"description":"Get paginated users for the instance","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeDeleted","in":"query"},{"schema":{"type":"number","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated users for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"deletedTime":{"type":"string","nullable":true},"lastSignTime":{"type":"string","nullable":true},"deactivatedTime":{"type":"string","nullable":true},"isAdmin":{"type":"boolean","nullable":true},"billable":{"type":"boolean","nullable":true}},"required":["id","name","email","avatar","createdTime","deletedTime","lastSignTime","deactivatedTime","isAdmin"]}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["data","total","page","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}/permanent-delete":{"delete":{"description":"Permanent delete a user by user ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Permanent delete a user by user ID for admin"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/admin/user/%7BuserId%7D/permanent-delete \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D/permanent-delete';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user/%7BuserId%7D/permanent-delete',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/user/%7BuserId%7D/permanent-delete\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}/restore-delete":{"post":{"description":"Restore a deleted user","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Restore a deleted user successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/user/%7BuserId%7D/restore-delete \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D/restore-delete';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user/%7BuserId%7D/restore-delete',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/admin/user/%7BuserId%7D/restore-delete\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}/admin":{"patch":{"description":"Set or unset admin privilege for a user","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isAdmin":{"type":"boolean"}},"required":["isAdmin"]}}}},"responses":{"200":{"description":"User admin privilege updated successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/user/%7BuserId%7D/admin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"isAdmin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D/admin';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"isAdmin\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user/%7BuserId%7D/admin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({isAdmin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isAdmin\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/user/%7BuserId%7D/admin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}":{"patch":{"description":"update enterprise space information","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"autoJoin":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Update enterprise space successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"autoJoin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"autoJoin\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/space/%7BspaceId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', autoJoin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"autoJoin\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/space/%7BspaceId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a space by space ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/space/%7BspaceId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/space/%7BspaceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space":{"get":{"description":"Get paginated spaces for the instance","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"number","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated spaces for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"createdTime":{"type":"string"},"autoJoin":{"type":"boolean","nullable":true},"baseCount":{"type":"number"},"collaboratorCount":{"type":"number"}},"required":["id","name","createdTime","autoJoin","baseCount","collaboratorCount"]}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["data","total","page","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/organization":{"get":{"description":"Get paginated organizations for the instance","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"number","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated organizations for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"},"userCount":{"type":"number"},"spaceCount":{"type":"number"},"adminCount":{"type":"number"},"admins":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email","avatar"]}}},"required":["id","name","createdTime","createdBy","userCount","spaceCount","adminCount","admins"]}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["data","total","page","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a new organization","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"201":{"description":"Organization created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"}},"required":["id","name","createdTime","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/organization \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/organization',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/organization\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/organization/{organizationId}":{"delete":{"description":"Delete an organization by organization ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/admin/organization/%7BorganizationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization/%7BorganizationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/organization/%7BorganizationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/organization/%7BorganizationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/organization/{organizationId}/admin":{"get":{"description":"Get organization admin users","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Returns organization admin users.","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email","avatar"]}}},"required":["users"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/organization/%7BorganizationId%7D/admin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/organization/%7BorganizationId%7D/admin\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update organization admin status for a user","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string"},"isAdmin":{"type":"boolean"}},"required":["userId","isAdmin"]}}}},"responses":{"200":{"description":"Organization admin status updated successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"userId\":\"string\",\"isAdmin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"userId\":\"string\",\"isAdmin\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/organization/%7BorganizationId%7D/admin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({userId: 'string', isAdmin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userId\\\":\\\"string\\\",\\\"isAdmin\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/admin/organization/%7BorganizationId%7D/admin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/enterprise-license":{"get":{"description":"Get enterprise license information","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns enterprise license information.","content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string"},"organizationId":{"type":"string"},"license":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"plan":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"quantity":{"type":"number"},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true}},"required":["level","quantity","currentPeriodStart","currentPeriodEnd","expiredTime"]}},"required":["id","plan"]}},"required":["instanceId","license"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/enterprise-license \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/enterprise-license',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/enterprise-license\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a enterprise license","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Enterprise license registered successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/enterprise-license \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/enterprise-license',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/admin/enterprise-license\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/enterprise-license/{licenseId}":{"patch":{"description":"Update a enterprise license by license ID","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Enterprise license updated successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/enterprise-license/%7BlicenseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license/%7BlicenseId%7D';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/enterprise-license/%7BlicenseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/enterprise-license/%7BlicenseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/audit-logs":{"get":{"description":"Get audit logs with filtering and pagination","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"userId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"action","in":"query"},{"schema":{"type":"string"},"required":false,"name":"resourceId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"startTime","in":"query"},{"schema":{"type":"string"},"required":false,"name":"endTime","in":"query"},{"schema":{"type":"integer","minimum":0,"default":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":20},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Returns paginated audit logs.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"action":{"type":"string"},"resourceId":{"type":"string"},"origin":{"type":"object","properties":{"ip":{"type":"string"},"byApi":{"type":"boolean"},"userAgent":{"type":"string"},"referer":{"type":"string"}},"required":["ip"]},"payloadVersion":{"type":"string"},"payload":{"nullable":true},"createdTime":{"type":"string"}},"required":["id","userId","action","origin","payloadVersion","createdTime"]}}},"required":["items"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/summary":{"get":{"description":"Retrieves a summary of workflow observability","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"workflowIds","in":"path"},{"schema":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"required":false,"name":"timeRange","in":"path"},{"schema":{"type":"string","enum":["30m","1h","6h","1d","3d","7d","30d"]},"required":false,"name":"relativeTime","in":"path"},{"schema":{"type":"boolean"},"required":false,"name":"isActive","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"baseIds","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"spaceIds","in":"path"},{"schema":{"type":"array","items":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"]}},"required":false,"name":"triggerType","in":"path"}],"responses":{"200":{"description":"Returns a summary of workflow observability","content":{"application/json":{"schema":{"type":"object","properties":{"workflow":{"type":"object","properties":{"activeCount":{"type":"number"},"totalCount":{"type":"number"}},"required":["activeCount","totalCount"]},"workflowRuns":{"type":"object","properties":{"totalCount":{"type":"number"},"statusStats":{"type":"object","properties":{"pending":{"type":"number"},"running":{"type":"number"},"success":{"type":"number"},"failed":{"type":"number"},"canceled":{"type":"number"}},"required":["pending","running","success","failed","canceled"]},"levelStats":{"type":"object","properties":{"critical":{"type":"number"},"warning":{"type":"number"},"healthy":{"type":"number"}},"required":["critical","warning","healthy"]}},"required":["totalCount","statusStats","levelStats"]}},"required":["workflow","workflowRuns"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/observability/workflow/summary \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/observability/workflow/summary',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/observability/workflow/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow":{"get":{"description":"get observability workflow list","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"workflowIds","in":"query"},{"schema":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"required":false,"name":"timeRange","in":"query"},{"schema":{"type":"string","enum":["30m","1h","6h","1d","3d","7d","30d"]},"required":false,"name":"relativeTime","in":"query"},{"schema":{"type":"boolean"},"required":false,"name":"isActive","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"baseIds","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"spaceIds","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"]}},"required":false,"name":"triggerType","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"}},"required":["id","name"]},"triggerType":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"]},"createdTime":{"type":"string"},"lastRunTime":{"type":"string"},"runStats":{"type":"object","properties":{"statusStats":{"type":"object","properties":{"pending":{"type":"number"},"running":{"type":"number"},"success":{"type":"number"},"failed":{"type":"number"},"canceled":{"type":"number"}},"required":["pending","running","success","failed","canceled"]},"avgSpent":{"type":"number"},"totalCount":{"type":"number"}},"required":["statusStats","avgSpent","totalCount"]},"level":{"type":"string","enum":["healthy","warning","critical"]},"isActive":{"type":"boolean"}},"required":["id","name","base","triggerType","createdTime","runStats","level"]}},"total":{"type":"number"}},"required":["data","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/{workflowId}/deactivate":{"post":{"description":"Deactivate a workflow observability","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Workflow observability deactivated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/deactivate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/deactivate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/observability/workflow/%7BworkflowId%7D/deactivate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/admin/observability/workflow/%7BworkflowId%7D/deactivate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/{workflowId}":{"delete":{"description":"Delete a workflow observability","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Workflow observability deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/observability/workflow/%7BworkflowId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/observability/workflow/%7BworkflowId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/{workflowId}/run-history":{"get":{"description":"get workflow run history","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string","enum":["success","failed","running","canceled","pending"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["success","failed","running","canceled","pending"]},"errorMsg":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]},"spent":{"type":"number"},"createdTime":{"type":"string"}},"required":["id","status","createdTime"]}},"total":{"type":"number"}},"required":["runs","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/files":{"patch":{"description":"Update app files","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"App files updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/files \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/files';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/files',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/files\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project app files","sidebarTitle":"Patch project app files"}}}},"/base/{baseId}/app/{appId}/props":{"patch":{"description":"Update app props","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"App props updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"}},"required":["id","baseId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/props \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/props';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/props',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/props\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project app props","sidebarTitle":"Patch project app props"}}}},"/base/{baseId}/app/{appId}/run":{"post":{"description":"Run the app code","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Project ID"},"required":true,"description":"Project ID","name":"baseId","in":"path"}],"responses":{"201":{"description":"The app running result","content":{"application/json":{"schema":{"type":"object","properties":{"previewUrl":{"type":"string","description":"Preview URL"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/run \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/run';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/run',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/run\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project app run","sidebarTitle":"Post project app run"}}}},"/base/{baseId}/app/{appId}/export-code":{"get":{"description":"Export app source code as a ZIP file","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"Source code exported successfully as ZIP file","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project app export code","sidebarTitle":"Get project app export code"}}}},"/base/{baseId}/app/{appId}/import-code":{"post":{"description":"Import app source code from a ZIP file","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"nullable":true,"description":"ZIP file containing source code"}}}}}},"responses":{"200":{"description":"Source code imported successfully","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"number"},"filesCount":{"type":"number"}},"required":["version","filesCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: multipart/form-data' \\\n --form file=null"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code';\nconst form = new FormData();\nform.append('file', 'null');\n\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nnull\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nnull\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project app import code","sidebarTitle":"Post project app import code"}}}},"/base/{baseId}/app/{appId}/deploy":{"post":{"description":"Deploy app to Vercel","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Project ID"},"required":true,"description":"Project ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"responses":{"201":{"description":"Deployment result","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["deploying","success","failed"],"description":"Deployment status"},"version":{"type":"number","description":"App version"},"publicUrl":{"type":"string","description":"Public URL"},"error":{"type":"string","description":"Error message if failed"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project app deploy","sidebarTitle":"Post project app deploy"}}}},"/base/{baseId}/app/{appId}/deploy/status":{"get":{"description":"Get app deployment status","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Project ID"},"required":true,"description":"Project ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"responses":{"200":{"description":"Deployment status","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["idle","deploying","success","failed"],"description":"Deployment status"},"version":{"type":"number","description":"App version"},"publicUrl":{"type":"string","description":"Public URL"},"error":{"type":"string","description":"Error message if failed"},"startTime":{"type":"number","description":"Deployment start timestamp"},"endTime":{"type":"number","description":"Deployment end timestamp"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project app deploystatus","sidebarTitle":"Get project app deploystatus"}}}},"/base/{baseId}/app/{appId}":{"delete":{"summary":"Delete app","description":"Delete app by its ID.","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/permanent":{"delete":{"summary":"Permanently delete app","description":"Permanently delete an app and all its data. This action cannot be undone.","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"App permanently deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/authentication/{id}":{"get":{"description":"Get a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'feishu',\n config: {appId: 'string', appSecret: 'string'},\n id: 'string',\n name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/authentication":{"get":{"description":"Get a authentication list","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/authentication\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'feishu',\n config: {appId: 'string', appSecret: 'string'},\n id: 'string',\n name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/authentication\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/authentication/providers":{"get":{"description":"Get providers","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["oidc","feishu"]}},"required":["id","name","type"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/providers \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/providers';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication/providers',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/authentication/providers\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/domain-verification":{"delete":{"description":"Delete a domain verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"domain","in":"query"}],"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a domain verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"createdTime":{"type":"string"}},"required":["id","domain","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/domain-verification',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/domain-verification\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a domain verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"verifyCode":{"type":"string"}},"required":["domain","verifyCode"]}}}},"responses":{"200":{"description":"Domain verification created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"domain\":\"string\",\"verifyCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"domain\":\"string\",\"verifyCode\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/domain-verification',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({domain: 'string', verifyCode: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\",\\\"verifyCode\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/domain-verification\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/domain-verification/send-verification-email":{"post":{"description":"Send email verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"domain\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"domain\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({domain: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}":{"get":{"description":"Get organization","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Get organization","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"domain":{"type":"array","items":{"type":"string"}}},"required":["name","id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/rename":{"put":{"description":"Rename organization","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Rename organization"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/rename';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/organization/%7BorganizationId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/update-auto-space":{"put":{"description":"Update auto space","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"autoSpaceType":{"type":"string","enum":["all","selected","none"]},"autoSpaceIds":{"type":"array","items":{"type":"string"}}},"required":["autoSpaceType"]}}}},"responses":{"200":{"description":"Update auto space","content":{"application/json":{"schema":{"type":"object","properties":{"autoSpaceType":{"type":"string","enum":["all","selected","none"]},"autoSpaceIds":{"type":"array","items":{"type":"string"}}},"required":["autoSpaceType"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/update-auto-space \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"autoSpaceType\":\"all\",\"autoSpaceIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/update-auto-space';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"autoSpaceType\":\"all\",\"autoSpaceIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/update-auto-space',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({autoSpaceType: 'all', autoSpaceIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"autoSpaceType\\\":\\\"all\\\",\\\"autoSpaceIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/organization/%7BorganizationId%7D/update-auto-space\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/space":{"get":{"description":"Get organization space","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get organization space","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"spaceName":{"type":"string"}},"required":["spaceId","spaceName"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/space \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/space';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/space',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/space\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/setting":{"get":{"description":"Get organization setting","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get organization setting"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/setting \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/setting';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/setting',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/setting\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/users":{"get":{"description":"Get organization users","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Get organization users","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"createdTime":{"type":"string"},"isAdmin":{"type":"boolean"},"isExternal":{"type":"boolean"},"deactivatedTime":{"type":"string"}},"required":["id","name","email","createdTime"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"tags":["organization","user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"departmentId":{"type":"string"},"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"}},"required":["email"]}}}}},"responses":{"201":{"description":"Create users successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"}},"required":["id","email","name"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/users \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '[{\"departmentId\":\"string\",\"id\":\"string\",\"email\":\"string\",\"name\":\"string\",\"phone\":\"string\"}]'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/users';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '[{\"departmentId\":\"string\",\"id\":\"string\",\"email\":\"string\",\"name\":\"string\",\"phone\":\"string\"}]'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/users',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify([\n {\n departmentId: 'string',\n id: 'string',\n email: 'string',\n name: 'string',\n phone: 'string'\n }\n]));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"[{\\\"departmentId\\\":\\\"string\\\",\\\"id\\\":\\\"string\\\",\\\"email\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"phone\\\":\\\"string\\\"}]\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/users\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user":{"post":{"description":"Add organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email"}}},"required":["emails"]}}}},"responses":{"200":{"description":"Add organization user","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"email":{"type":"string","format":"email"},"success":{"type":"boolean","enum":[true]}},"required":["email","success"]},{"type":"object","properties":{"email":{"type":"string","format":"email"},"success":{"type":"boolean","enum":[false]},"message":{"type":"string"}},"required":["email","success","message"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"emails\":[\"user@example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"emails\":[\"user@example.com\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({emails: ['user@example.com']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"emails\\\":[\\\"user@example.com\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["userIds"]}}}},"responses":{"200":{"description":"Delete organization user"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user';\nconst options = {\n method: 'DELETE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"userIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"DELETE\", \"/api/organization/%7BorganizationId%7D/user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user/{userId}/deactivate":{"post":{"description":"Deactivate organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"User deactivated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user/{userId}/activate":{"post":{"description":"Activate organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"User activated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user/{userId}":{"patch":{"description":"Update organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isAdmin":{"type":"boolean"}}}}}},"responses":{"200":{"description":"User updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"isAdmin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"isAdmin\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({isAdmin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isAdmin\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Get organization user","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","name","email","organization"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user-exists":{"get":{"tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"userIds","in":"query"}],"responses":{"200":{"description":"User exists","content":{"application/json":{"schema":{"type":"array","items":{"type":"boolean"}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-scope":{"put":{"description":"Update department scope","tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentScope":{"type":"string","enum":["all","related"]}},"required":["departmentScope"]}}}},"responses":{"200":{"description":"Update department scope","content":{"application/json":{"schema":{"type":"object","properties":{"departmentScope":{"type":"string","enum":["all","related"]}},"required":["departmentScope"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-scope \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"departmentScope\":\"all\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-scope';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"departmentScope\":\"all\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-scope',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({departmentScope: 'all'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentScope\\\":\\\"all\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/organization/%7BorganizationId%7D/department-scope\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/count":{"get":{"description":"Get space manage list total","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Get space manage list total successfully","content":{"application/json":{"schema":{"type":"number"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/count \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/count';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/space-manage/count',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage/count\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage":{"get":{"description":"Get space manage list","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"number","nullable":true,"default":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"maximum":100,"default":10},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Get space manage list successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"baseCount":{"type":"number"},"collaboratorCount":{"type":"number"},"isOrganization":{"type":"boolean"}},"required":["id","name","baseCount","collaboratorCount"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/{spaceId}/remove-organization":{"delete":{"description":"Remove space from organization","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Space removed from organization successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/{spaceId}/add-organization":{"post":{"description":"Add space to organization","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"201":{"description":"Space added to organization successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/{spaceId}":{"get":{"description":"Get space manage detail","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Get space manage detail successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isOrganization":{"type":"boolean"},"base":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"}},"required":["id","name"]}},"collaboratorCount":{"type":"number"},"externalUserCount":{"type":"number"}},"required":["id","name","isOrganization","base","collaboratorCount","externalUserCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department/{departmentId}":{"get":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"responses":{"200":{"description":"Get department successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}},"hasChildren":{"type":"boolean"}},"required":["id","name","hasChildren"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"responses":{"200":{"description":"Delete department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department/{departmentId}/rename":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Rename department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department/{departmentId}/move":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"parentId":{"type":"string","nullable":true}},"required":["parentId"]}}}},"responses":{"200":{"description":"Move department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"parentId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"parentId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({parentId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"parentId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department":{"post":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Create department successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"id\":\"string\",\"name\":\"string\",\"parentId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"id\":\"string\",\"name\":\"string\",\"parentId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({id: 'string', name: 'string', parentId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"parentId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/department\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"parentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"}],"responses":{"200":{"description":"Get department list successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}},"hasChildren":{"type":"boolean"}},"required":["id","name","hasChildren"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-user":{"post":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentIds":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"string"}}},"required":["departmentIds","userIds"]}}}},"responses":{"200":{"description":"Add department users successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"departmentIds\":[\"string\"],\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"departmentIds\":[\"string\"],\"userIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({departmentIds: ['string'], userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentIds\\\":[\\\"string\\\"],\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/department-user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"userIds","in":"query"}],"responses":{"200":{"description":"Remove department users successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"departmentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":0},"required":false,"name":"skip","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":50},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Get department users successfully","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}}},"required":["id","name"]}}},"required":["id","name","email"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-user/move":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentId":{"type":"string"},"toDepartmentId":{"type":"string"},"userIds":{"type":"array","items":{"type":"string"}}},"required":["departmentId","toDepartmentId","userIds"]}}}},"responses":{"200":{"description":"Move department users successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/move \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"departmentId\":\"string\",\"toDepartmentId\":\"string\",\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/move';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"departmentId\":\"string\",\"toDepartmentId\":\"string\",\"userIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-user/move',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({departmentId: 'string', toDepartmentId: 'string', userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentId\\\":\\\"string\\\",\\\"toDepartmentId\\\":\\\"string\\\",\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department-user/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-user/department":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentIds":{"type":"array","items":{"type":"string"}},"userId":{"type":"string"}},"required":["userId"]}}}},"responses":{"200":{"description":"Update user department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/department \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"departmentIds\":[\"string\"],\"userId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/department';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"departmentIds\":[\"string\"],\"userId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-user/department',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({departmentIds: ['string'], userId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentIds\\\":[\\\"string\\\"],\\\"userId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department-user/department\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/me":{"get":{"description":"Get organization me","tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Get organization me","content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string"},"organizationId":{"type":"string"},"isAdmin":{"type":"boolean"}},"required":["userId","organizationId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/me \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/me';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/me',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/me\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/instance/organization":{"get":{"description":"Get instance organization, only for enterprise edition","tags":["organization","instance"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get instance organization successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/instance/organization \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/instance/organization';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/instance/organization',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/instance/organization\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/sql-query":{"post":{"description":"Execute SQL query on a project","summary":"Execute SQL query","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"The project ID to execute query on"},"required":true,"description":"The project ID to execute query on","name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sql":{"type":"string","minLength":1,"description":"The SQL query to execute","example":"SELECT * FROM table_name LIMIT 10"}},"required":["sql"]}}}},"responses":{"200":{"description":"Query executed successfully","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}},"description":"The query result rows"}},"required":["rows"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/sql-query \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"sql\":\"SELECT * FROM table_name LIMIT 10\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/sql-query';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"sql\":\"SELECT * FROM table_name LIMIT 10\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/sql-query',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({sql: 'SELECT * FROM table_name LIMIT 10'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sql\\\":\\\"SELECT * FROM table_name LIMIT 10\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/sql-query\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Execute project SQL query","sidebarTitle":"Execute project SQL query","description":"Execute a SQL query on tables in a project."}}}},"/base/{baseId}/sign-attachment-urls":{"post":{"description":"Generate signed URLs for attachment files","summary":"Sign attachment URLs","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"The project ID"},"required":true,"description":"The project ID","name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"The file path of the attachment"},"token":{"type":"string","description":"The access token for the attachment"},"mimetype":{"type":"string","description":"The MIME type of the attachment","example":"image/png"}},"required":["path","token"]},"description":"List of attachments to sign"}},"required":["attachments"]}}}},"responses":{"200":{"description":"URLs signed successfully","content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string","description":"The original attachment token"},"url":{"type":"string","description":"The signed URL for the attachment"}},"required":["token","url"]},"description":"List of signed attachments with their tokens and URLs"}},"required":["attachments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/sign-attachment-urls \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"attachments\":[{\"path\":\"string\",\"token\":\"string\",\"mimetype\":\"image/png\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/sign-attachment-urls';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"attachments\":[{\"path\":\"string\",\"token\":\"string\",\"mimetype\":\"image/png\"}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/sign-attachment-urls',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({attachments: [{path: 'string', token: 'string', mimetype: 'image/png'}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachments\\\":[{\\\"path\\\":\\\"string\\\",\\\"token\\\":\\\"string\\\",\\\"mimetype\\\":\\\"image/png\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/sign-attachment-urls\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Sign project attachment URLs","sidebarTitle":"Sign project attachment URLs","description":"Generate signed URLs for attachment files in a project."}}}},"/base/{baseId}/chat/create":{"post":{"description":"Create chat","tags":["chat"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"type":{"type":"string"},"resourceId":{"type":"string"}},"required":["baseId"]}}}},"responses":{"201":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/create \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\",\"type\":\"string\",\"resourceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/create';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"baseId\":\"string\",\"type\":\"string\",\"resourceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/create',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({baseId: 'string', type: 'string', resourceId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\",\\\"type\\\":\\\"string\\\",\\\"resourceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project chatcreate","sidebarTitle":"Post project chatcreate"}}}},"/base/{baseId}/chat/{chatId}/messages":{"get":{"description":"Get chat messages","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"responses":{"200":{"description":"Chat messages"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project chat messages","sidebarTitle":"Get project chat messages"}}},"delete":{"description":"Clear all messages in a chat","tags":["chat"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project chat messages","sidebarTitle":"Delete project chat messages"}}}},"/base/{baseId}/chat/history":{"get":{"description":"Get chat history","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"type","in":"query"}],"responses":{"200":{"description":"Get chat history successfully","content":{"application/json":{"schema":{"type":"object","properties":{"history":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","createdTime","createdBy"]}},"total":{"type":"number"}},"required":["history","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Get project chathistory","sidebarTitle":"Get project chathistory"}}}},"/base/{baseId}/chat/{chatId}/delete":{"delete":{"tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"responses":{"200":{"description":"Chat deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Delete project chat delete","sidebarTitle":"Delete project chat delete"}}}},"/base/{baseId}/chat/{chatId}/rename":{"patch":{"tags":["chat"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Chat renamed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Patch project chat rename","sidebarTitle":"Patch project chat rename"}}}},"/base/{baseId}/chat/{chatId}/stop":{"post":{"description":"Stop an active chat stream and prevent resume","tags":["chat"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project chat stop","sidebarTitle":"Post project chat stop"}}}},"/base/{baseId}/chat/suggestions":{"post":{"tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["recommend","ask","analyze","build"]},"lang":{"type":"string"}},"required":["type"]}}}},"responses":{"200":{"description":"Chat suggestions"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/suggestions \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"recommend\",\"lang\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/suggestions';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"recommend\",\"lang\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/suggestions',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({type: 'recommend', lang: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"recommend\\\",\\\"lang\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/suggestions\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project chatsuggestions","sidebarTitle":"Post project chatsuggestions"}}}},"/chat/onboarding/scenarios":{"get":{"description":"Get onboarding scenarios with presigned URLs for attachments","tags":["chat"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get onboarding scenarios successfully","content":{"application/json":{"schema":{"type":"object","properties":{"scenarios":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"placeholder":{"type":"string"},"prompt":{"type":"string"},"files":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"fileName":{"type":"string"},"path":{"type":"string"},"presignedUrl":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"}},"required":["token","fileName","path","presignedUrl","mimetype","size"]}}},"required":["id","placeholder","prompt","files"]}}},"required":["scenarios"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/chat/onboarding/scenarios \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/onboarding/scenarios';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/chat/onboarding/scenarios',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/chat/onboarding/scenarios\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/chat/onboarding/attachments":{"post":{"description":"Get attachment info by tokens. Used for landing page onboarding flow.","tags":["chat"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tokens":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":20}},"required":["tokens"]}}}},"responses":{"200":{"description":"Get attachments successfully","content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"presignedUrl":{"type":"string"}},"required":["token","name","path","mimetype","size","presignedUrl"]}}},"required":["attachments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/chat/onboarding/attachments \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"tokens\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/onboarding/attachments';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"tokens\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/chat/onboarding/attachments',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({tokens: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"tokens\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/chat/onboarding/attachments\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/text-extract":{"post":{"description":"Extract text content from attachments","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"path":{"type":"string"},"presignedUrl":{"type":"string"}},"required":["token","mimetype"]},"minItems":1,"description":"Attachments to extract text from"}},"required":["attachments"]}}}},"responses":{"200":{"description":"Extracted text content","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"extractedFiles":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"},"content":{"type":"string"},"charCount":{"type":"number"},"truncated":{"type":"boolean"},"isPreview":{"type":"boolean"}},"required":["token","content","charCount","truncated"]}},"totalCharacters":{"type":"number"},"truncatedFiles":{"type":"number"},"message":{"type":"string"},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/text-extract \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"attachments\":[{\"token\":\"string\",\"name\":\"string\",\"mimetype\":\"string\",\"size\":0,\"path\":\"string\",\"presignedUrl\":\"string\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/text-extract';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"attachments\":[{\"token\":\"string\",\"name\":\"string\",\"mimetype\":\"string\",\"size\":0,\"path\":\"string\",\"presignedUrl\":\"string\"}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/text-extract',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n attachments: [\n {\n token: 'string',\n name: 'string',\n mimetype: 'string',\n size: 0,\n path: 'string',\n presignedUrl: 'string'\n }\n ]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachments\\\":[{\\\"token\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"mimetype\\\":\\\"string\\\",\\\"size\\\":0,\\\"path\\\":\\\"string\\\",\\\"presignedUrl\\\":\\\"string\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/text-extract\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project chattext extract","sidebarTitle":"Post project chattext extract"}}}},"/base/{baseId}/chat/execute-script":{"post":{"description":"Execute TypeScript code in sandbox for chat tools","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"TypeScript code to execute"},"input":{"type":"object","additionalProperties":{"nullable":true},"description":"Input parameters for the script"},"integrationIds":{"type":"array","items":{"type":"string"},"description":"Integration IDs to inject into script context"},"dependencies":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"NPM dependencies to install"}},"required":["code"]}}}},"responses":{"200":{"description":"Script execution result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"result":{"type":"object","additionalProperties":{"nullable":true}},"logs":{"type":"object","properties":{"stdout":{"type":"string"},"stderr":{"type":"string"}},"required":["stdout","stderr"]},"executionTime":{"type":"number"},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/execute-script \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"code\":\"string\",\"input\":{\"property1\":null,\"property2\":null},\"integrationIds\":[\"string\"],\"dependencies\":[{\"name\":\"string\",\"version\":\"string\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/execute-script';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"code\":\"string\",\"input\":{\"property1\":null,\"property2\":null},\"integrationIds\":[\"string\"],\"dependencies\":[{\"name\":\"string\",\"version\":\"string\"}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/execute-script',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n code: 'string',\n input: {property1: null, property2: null},\n integrationIds: ['string'],\n dependencies: [{name: 'string', version: 'string'}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"code\\\":\\\"string\\\",\\\"input\\\":{\\\"property1\\\":null,\\\"property2\\\":null},\\\"integrationIds\\\":[\\\"string\\\"],\\\"dependencies\\\":[{\\\"name\\\":\\\"string\\\",\\\"version\\\":\\\"string\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/execute-script\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project chatexecute script","sidebarTitle":"Post project chatexecute script"}}}},"/base/{baseId}/chat/resolve-attachments":{"post":{"description":"Resolve attachment tokens to presigned URLs","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tokens":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Array of attachment tokens to resolve"},"nameHints":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional map of token -> filename for name hints"}},"required":["tokens"]}}}},"responses":{"200":{"description":"Resolved attachments with URLs","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"url":{"type":"string"},"name":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"path":{"type":"string"}},"required":["token","url"]}},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/resolve-attachments \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"tokens\":[\"string\"],\"nameHints\":{\"property1\":\"string\",\"property2\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/resolve-attachments';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"tokens\":[\"string\"],\"nameHints\":{\"property1\":\"string\",\"property2\":\"string\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/resolve-attachments',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({tokens: ['string'], nameHints: {property1: 'string', property2: 'string'}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"tokens\\\":[\\\"string\\\"],\\\"nameHints\\\":{\\\"property1\\\":\\\"string\\\",\\\"property2\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/resolve-attachments\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-mint":{"metadata":{"title":"Post project chatresolve attachments","sidebarTitle":"Post project chatresolve attachments"}}}},"/space/{spaceId}/authentication/{id}":{"get":{"description":"Get a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'feishu',\n config: {appId: 'string', appSecret: 'string'},\n id: 'string',\n name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/space/%7BspaceId%7D/authentication/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/authentication":{"get":{"description":"Get a space authentication list","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/authentication',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/authentication\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/authentication',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'feishu',\n config: {appId: 'string', appSecret: 'string'},\n id: 'string',\n name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/authentication\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/authentication/providers":{"get":{"description":"Get space authentication providers","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["oidc","feishu"]}},"required":["id","name","type"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/authentication/providers \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/authentication/providers';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/authentication/providers',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/authentication/providers\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/domain-verification":{"delete":{"description":"Delete a space domain verification","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"domain","in":"query"}],"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a space domain verification list","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"createdTime":{"type":"string"}},"required":["id","domain","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/domain-verification',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/domain-verification\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a space domain verification","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"verifyCode":{"type":"string"}},"required":["domain","verifyCode"]}}}},"responses":{"200":{"description":"Domain verification created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"domain\":\"string\",\"verifyCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"domain\":\"string\",\"verifyCode\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/domain-verification',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({domain: 'string', verifyCode: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\",\\\"verifyCode\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/domain-verification\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/domain-verification/send-verification-email":{"post":{"description":"Send space email verification","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification/send-verification-email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"domain\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification/send-verification-email';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"domain\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/domain-verification/send-verification-email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({domain: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/domain-verification/send-verification-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/api/{baseId}/ai/generate":{"post":{"description":"Generate AI text (non-streaming)","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string"},"task":{"type":"string","enum":["coding","embedding","translation"],"description":"Quick model selection via predefined task type","example":"coding"},"modelKey":{"type":"string","description":"Specify an exact model configuration to use","example":"openai@gpt-4o@custom-name"}},"required":["prompt"]}}}},"responses":{"201":{"description":"Returns generated AI text.","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"string"}},"required":["result"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/api/%7BbaseId%7D/ai/generate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({prompt: 'string', task: 'coding', modelKey: 'openai@gpt-4o@custom-name'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"prompt\\\":\\\"string\\\",\\\"task\\\":\\\"coding\\\",\\\"modelKey\\\":\\\"openai@gpt-4o@custom-name\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/api/%7BbaseId%7D/ai/generate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/reward/claim":{"post":{"summary":"Claim a reward","description":"Submit a reward claim (e.g., social share)","tags":["reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"sourceType":{"type":"string","enum":["socialShare"]},"sourceMetaData":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin"]},"postUrl":{"type":"string"},"postId":{"type":"string"},"snapshotId":{"type":"string"},"content":{"type":"string"},"username":{"type":"string"},"followerCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"localization":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]}},"required":["message"]}}},"required":["isValid"]}},"required":["platform","postUrl"]}},"required":["sourceType","sourceMetaData"]},{"type":"object","properties":{"sourceType":{"type":"string","enum":["appSumoActivation"]},"sourceMetaData":{"nullable":true}},"required":["sourceType"]}]}}}},"responses":{"201":{"description":"Reward claim submitted successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"rewardStatus":{"type":"string","enum":["pending","approved","rejected"]}},"required":["id","rewardStatus"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/reward/claim \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"sourceType\":\"socialShare\",\"sourceMetaData\":{\"platform\":\"x\",\"postUrl\":\"string\",\"postId\":\"string\",\"snapshotId\":\"string\",\"content\":\"string\",\"username\":\"string\",\"followerCount\":0,\"verifyResult\":{\"isValid\":true,\"errors\":[{\"message\":\"string\",\"localization\":{\"i18nKey\":\"string\",\"context\":{\"property1\":null,\"property2\":null}}}]}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/reward/claim';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"sourceType\":\"socialShare\",\"sourceMetaData\":{\"platform\":\"x\",\"postUrl\":\"string\",\"postId\":\"string\",\"snapshotId\":\"string\",\"content\":\"string\",\"username\":\"string\",\"followerCount\":0,\"verifyResult\":{\"isValid\":true,\"errors\":[{\"message\":\"string\",\"localization\":{\"i18nKey\":\"string\",\"context\":{\"property1\":null,\"property2\":null}}}]}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/reward/claim',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n sourceType: 'socialShare',\n sourceMetaData: {\n platform: 'x',\n postUrl: 'string',\n postId: 'string',\n snapshotId: 'string',\n content: 'string',\n username: 'string',\n followerCount: 0,\n verifyResult: {\n isValid: true,\n errors: [\n {\n message: 'string',\n localization: {i18nKey: 'string', context: {property1: null, property2: null}}\n }\n ]\n }\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sourceType\\\":\\\"socialShare\\\",\\\"sourceMetaData\\\":{\\\"platform\\\":\\\"x\\\",\\\"postUrl\\\":\\\"string\\\",\\\"postId\\\":\\\"string\\\",\\\"snapshotId\\\":\\\"string\\\",\\\"content\\\":\\\"string\\\",\\\"username\\\":\\\"string\\\",\\\"followerCount\\\":0,\\\"verifyResult\\\":{\\\"isValid\\\":true,\\\"errors\\\":[{\\\"message\\\":\\\"string\\\",\\\"localization\\\":{\\\"i18nKey\\\":\\\"string\\\",\\\"context\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}}]}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/reward/claim\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/reward/credit-list":{"get":{"summary":"Get reward credit list","description":"Get reward credit list for a space","tags":["reward","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of reward credits","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"sourceType":{"type":"string","enum":["appSumoActivation","socialShare","system"]},"rewardStatus":{"type":"string","enum":["pending","approved","rejected"]},"rewardType":{"type":"string","enum":["credit"]},"rewardAmount":{"type":"number"},"consumedAmount":{"type":"number"},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","sourceType","rewardStatus","rewardType","rewardAmount","consumedAmount","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/reward/credit-list \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/reward/credit-list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/reward/credit-list',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/reward/credit-list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/reward/{rewardId}":{"get":{"summary":"Get reward details","description":"Get details of a specific reward including its verification status","tags":["reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"rewardId","in":"path"}],"responses":{"200":{"description":"Reward details retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"userId":{"type":"string"},"sourceType":{"type":"string","enum":["appSumoActivation","socialShare","system"]},"sourceMetaData":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin"]},"postUrl":{"type":"string"},"postId":{"type":"string"},"snapshotId":{"type":"string"},"content":{"type":"string"},"username":{"type":"string"},"followerCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"localization":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]}},"required":["message"]}}},"required":["isValid"]}},"required":["platform","postUrl"]},"rewardStatus":{"type":"string","enum":["pending","approved","rejected"]},"rewardAmount":{"type":"number"},"consumedAmount":{"type":"number","nullable":true},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","spaceId","userId","sourceType","sourceMetaData","rewardStatus","rewardAmount","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/reward/%7BrewardId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/reward/%7BrewardId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/reward/%7BrewardId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/reward/%7BrewardId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/overview":{"get":{"summary":"Get admin reward overview by spaces","description":"Get aggregated reward statistics grouped by space for admin management. Returns pending, approved, consumed, available and expiring amounts per space.","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Search by space name"},"required":false,"description":"Search by space name","name":"search","in":"query"},{"schema":{"type":"string","description":"Filter by created time from (ISO string)"},"required":false,"description":"Filter by created time from (ISO string)","name":"createdTimeFrom","in":"query"},{"schema":{"type":"string","description":"Filter by created time to (ISO string)"},"required":false,"description":"Filter by created time to (ISO string)","name":"createdTimeTo","in":"query"},{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Returns the reward overview grouped by spaces","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"space":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"}},"required":["id","name"]},"pendingCount":{"type":"integer"},"rejectedCount":{"type":"integer"},"approvedCount":{"type":"integer"},"approvedAmount":{"type":"integer"},"consumedAmount":{"type":"number"},"availableAmount":{"type":"number"},"expiringSoonAmount":{"type":"number"},"updatedTime":{"type":"string","nullable":true}},"required":["space","user","pendingCount","rejectedCount","approvedCount","approvedAmount","consumedAmount","availableAmount","expiringSoonAmount","updatedTime"]}},"total":{"type":"integer"}},"required":["items","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/list":{"get":{"summary":"Get admin reward list","description":"Get paginated and filtered list of reward for admin management. Supports filtering by space, status, platform, verification result, and search.","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Filter by space ID"},"required":false,"description":"Filter by space ID","name":"spaceId","in":"query"},{"schema":{"type":"string","enum":["appSumoActivation","socialShare","system"],"description":"Filter by reward source type"},"required":false,"description":"Filter by reward source type","name":"sourceType","in":"query"},{"schema":{"type":"string","enum":["pending","approved","rejected"],"description":"Filter by reward status"},"required":false,"description":"Filter by reward status","name":"status","in":"query"},{"schema":{"type":"string","enum":["x","linkedin"],"description":"Filter by social platform"},"required":false,"description":"Filter by social platform","name":"platform","in":"query"},{"schema":{"type":"string","enum":["true","false"],"description":"Filter by verification result"},"required":false,"description":"Filter by verification result","name":"isValid","in":"query"},{"schema":{"type":"string","description":"Search by postUrl, uniqueKey or userId"},"required":false,"description":"Search by postUrl, uniqueKey or userId","name":"search","in":"query"},{"schema":{"type":"string","description":"Filter by created time from (ISO string)"},"required":false,"description":"Filter by created time from (ISO string)","name":"createdTimeFrom","in":"query"},{"schema":{"type":"string","description":"Filter by created time to (ISO string)"},"required":false,"description":"Filter by created time to (ISO string)","name":"createdTimeTo","in":"query"},{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Returns the paginated list of reward","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"space":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"}},"required":["id","name"]},"status":{"type":"string","enum":["pending","approved","rejected"]},"sourceType":{"type":"string","enum":["appSumoActivation","socialShare","system"]},"sourceMetaData":{"nullable":true},"amount":{"type":"integer"},"consumedAmount":{"type":"number","nullable":true},"remainingAmount":{"type":"number","nullable":true},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","space","user","status","sourceType","amount","consumedAmount","remainingAmount","rewardTime","expiredTime","createdTime"]}},"total":{"type":"integer"}},"required":["items","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/spaces":{"get":{"summary":"Get all spaces with reward records","description":"Get a list of all spaces that have reward records for admin filtering","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of spaces with reward records","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["items"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/reward/spaces \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/spaces';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/reward/spaces',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/spaces\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/{rewardId}":{"get":{"summary":"Get admin reward detail","description":"Get detailed information of a specific reward including full metadata","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"rewardId","in":"path"}],"responses":{"200":{"description":"Returns the reward detail","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string"},"sourceType":{"type":"string"},"sourceMetaData":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin"]},"postUrl":{"type":"string"},"postId":{"type":"string"},"snapshotId":{"type":"string"},"content":{"type":"string"},"username":{"type":"string"},"followerCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"localization":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]}},"required":["message"]}}},"required":["isValid"]}},"required":["platform","postUrl"]},"uniqueKey":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected"]},"amount":{"type":"integer"},"consumedAmount":{"type":"number","nullable":true},"remainingAmount":{"type":"number","nullable":true},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["id","userId","spaceId","spaceName","sourceType","sourceMetaData","uniqueKey","status","amount","consumedAmount","remainingAmount","rewardTime","expiredTime","createdTime","lastModifiedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/reward/%7BrewardId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/%7BrewardId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/reward/%7BrewardId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/%7BrewardId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/export/{spaceId}":{"get":{"summary":"Export admin reward list as CSV","description":"Export all reward records for a specific space as CSV file. Supports filtering by date range.","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Space ID to export rewards for"},"required":true,"description":"Space ID to export rewards for","name":"spaceId","in":"path"},{"schema":{"type":"string","description":"Filter by created time from (ISO string)"},"required":false,"description":"Filter by created time from (ISO string)","name":"createdTimeFrom","in":"query"},{"schema":{"type":"string","description":"Filter by created time to (ISO string)"},"required":false,"description":"Filter by created time to (ISO string)","name":"createdTimeTo","in":"query"}],"responses":{"200":{"description":"Returns the CSV file with reward records","content":{"text/csv":{"schema":{"type":"string"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}}},"tags":[{"name":"base","x-group":"project"},{"name":"base node","x-group":"project node"},{"name":"base-share","x-group":"project-share"}]}
diff --git a/tr/api-doc/get-id.mdx b/tr/api-doc/get-id.mdx
index cdad5f98..28114112 100644
--- a/tr/api-doc/get-id.mdx
+++ b/tr/api-doc/get-id.mdx
@@ -14,11 +14,11 @@ Hedef Alana tıklayın ve URL'deki 'spc' ile başlayan dizeyi kopyalayın. Örne
## BaseId
-Hedef Veritabanına tıklayın ve URL'deki 'bse' ile başlayan dizeyi kopyalayın. Örnek: `bseXXXXXXXXXX`
+Hedef Projeye tıklayın ve URL'deki 'bse' ile başlayan dizeyi kopyalayın. Örnek: `bseXXXXXXXXXX`
diff --git a/tr/api-doc/oauth.mdx b/tr/api-doc/oauth.mdx
index 1768dd04..a80f8ef6 100644
--- a/tr/api-doc/oauth.mdx
+++ b/tr/api-doc/oauth.mdx
@@ -33,7 +33,7 @@ Kapsamlar, OAuth Uygulamanızın hangi işlemleri gerçekleştirebileceğini bel
| Kaynak | Kapsamlar |
|----------|--------|
| **Uygulama** | `app\|create`, `app\|read`, `app\|update`, `app\|delete` |
-| **Veritabanı** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
+| **Proje** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
| **Tablo** | `table\|create`, `table\|delete`, `table\|export`, `table\|import`, `table\|read`, `table\|update`, `table\|trash_read`, `table\|trash_update`, `table\|trash_reset` |
| **Görünüm** | `view\|create`, `view\|delete`, `view\|read`, `view\|update` |
| **Alan** | `field\|create`, `field\|delete`, `field\|read`, `field\|update` |
@@ -296,14 +296,14 @@ curl https://app.teable.ai/api/table/TABLE_ID/record \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Token alındıktan sonraki ilk adım genellikle mevcut kullanıcının erişebildiği tüm Veritabanlarını almaktır:
+Token alındıktan sonraki ilk adım genellikle mevcut kullanıcının erişebildiği tüm Projeleri almaktır:
```bash
curl https://app.teable.ai/api/base/access/all \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Bu uç nokta, mevcut kullanıcının erişim iznine sahip olduğu tüm Veritabanlarını döndürür. Sonraki API çağrılarında yanıttaki `baseId` değerini kullanabilirsiniz.
+Bu uç nokta, mevcut kullanıcının erişim iznine sahip olduğu tüm Projeleri döndürür. Sonraki API çağrılarında yanıttaki `baseId` değerini kullanabilirsiniz.
## Erişim Token'larını Yenileme
diff --git a/tr/api-doc/record/interface.mdx b/tr/api-doc/record/interface.mdx
index ba56e386..09a29ced 100644
--- a/tr/api-doc/record/interface.mdx
+++ b/tr/api-doc/record/interface.mdx
@@ -2,7 +2,7 @@
title: "Kayıt Alanı Arayüzü"
---
-Arama Alanı belirli bir Alan türü değildir. Bağlantılı bir Veritabanındaki her tür Alan için arama yapabiliriz. Arama Alanının türünü, bağlantılı Veritabanındaki özgün Alan belirler ve bu Alan isLookup özelliğine sahiptir. Arama Alanları düzenlenemez.
+Arama Alanı belirli bir Alan türü değildir. Bağlantılı bir Projedeki her tür Alan için arama yapabiliriz. Arama Alanının türünü, bağlantılı Projedeki özgün Alan belirler ve bu Alan isLookup özelliğine sahiptir. Arama Alanları düzenlenemez.
Tüm Alanların dönüş değerleri belirli durumlarda `isMultipleCellValue: true` değerine sahip olabilir:
diff --git a/tr/api-doc/sql-query.mdx b/tr/api-doc/sql-query.mdx
index 52a851ff..942f9155 100644
--- a/tr/api-doc/sql-query.mdx
+++ b/tr/api-doc/sql-query.mdx
@@ -11,12 +11,12 @@ Teable, salt okunur sorgular için harici araçlar aracılığıyla temelindeki
### Veritabanı Bağlantısı Oluşturma
-1. **Bir Tablo Açın**: Önce bağlanmak istediğiniz Veritabanındaki herhangi bir Tabloyu açın.
-2. **Tasarım Sayfasına Girin**: Veritabanı Tasarımı sayfasına girmek için sağ üst köşedeki ⚙️ simgesine tıklayın.
+1. **Bir Tablo Açın**: Önce bağlanmak istediğiniz Projedeki herhangi bir Tabloyu açın.
+2. **Tasarım Sayfasına Girin**: Proje Tasarımı sayfasına girmek için sağ üst köşedeki ⚙️ simgesine tıklayın.
@@ -50,7 +50,7 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
**Not:** Büyük/küçük harf duyarlılığını korumak için PostgreSQL'de şema ve Tablo adlarının çevresinde çift tırnak `"` kullanın.
Bu sorguyu yazmak için üç bilgiyi bilmeniz gerekir:
-- **Şema adı (BaseId)**: `bse` ile başlayan Veritabanı tanımlayıcısı
+- **Şema adı (BaseId)**: `bse` ile başlayan Proje tanımlayıcısı
- **Tablo adı**: PostgreSQL'deki fiziksel Tablo adı
- **Alan adları**: Veritabanındaki gerçek sütun adları
@@ -58,27 +58,27 @@ Aşağıdaki bölümlerde bunların her birini nasıl bulacağınız açıklanma
### BaseId'yi (Şema Adını) Bulma
-Teable'daki her Veritabanı, PostgreSQL'deki bir **şemaya** karşılık gelir. BaseId, SQL sorgularında kullanılan şema adıdır.
+Teable'daki her Proje, PostgreSQL'deki bir **şemaya** karşılık gelir. BaseId, SQL sorgularında kullanılan şema adıdır.
**Yöntem 1:** URL'ye bakın; `bse` ile başlayan dize BaseId'dir.
-**Yöntem 2:** Veritabanı Tasarımı arayüzünde gösterilen şema adı BaseId'dir.
+**Yöntem 2:** Proje Tasarımı arayüzünde gösterilen şema adı BaseId'dir.
### Tablo Adlarını Bulma
-Teable arayüzündeki Tablo adları, fiziksel veritabanı Tablo adlarıyla otomatik olarak eşitlenmez. Gerçek veritabanı Tablo adını Veritabanı Tasarımı arayüzünden kontrol edin.
+Teable arayüzündeki Tablo adları, fiziksel veritabanı Tablo adlarıyla otomatik olarak eşitlenmez. Gerçek veritabanı Tablo adını Proje Tasarımı arayüzünden kontrol edin.
diff --git a/tr/api-doc/token.mdx b/tr/api-doc/token.mdx
index a5f81729..d4a49217 100644
--- a/tr/api-doc/token.mdx
+++ b/tr/api-doc/token.mdx
@@ -15,7 +15,7 @@ Harici kullanıcılara yönelik çok kiracılı bir entegrasyon geliştiriyorsan
3. Token'ınıza uygun izin kapsamlarını ekleyin.
-4. Token'ın hangi veritabanlarına ve alanlara erişebileceğini belirtin.
+4. Token'ın hangi projelere ve alanlara erişebileceğini belirtin.
Token'ınız oluşturulduktan sonra yalnızca bir kez gösterilir. Token'ı kopyalayıp güvenli bir yerde saklamanızı öneririz.
diff --git a/tr/basic/admin-panel/announcements.mdx b/tr/basic/admin-panel/announcements.mdx
index 6b6d26ca..91cf4cd5 100644
--- a/tr/basic/admin-panel/announcements.mdx
+++ b/tr/basic/admin-panel/announcements.mdx
@@ -15,7 +15,7 @@ Yol: Yönetici Paneli → Duyurular
| Ayar | Denetlediği öğe |
| --- | --- |
-| **Biçim** | Duyurunun göründüğü yer: Uygulamanın üst kısmında **Başlık şeridi**, geçici bildirim olarak **Bildirim**, işlemi kesintiye uğratan iletişim kutusu olarak **Modal** veya Alan ve Veritabanı kenar çubuklarında **Kenar çubuğu kartı**. |
+| **Biçim** | Duyurunun göründüğü yer: Uygulamanın üst kısmında **Başlık şeridi**, geçici bildirim olarak **Bildirim**, işlemi kesintiye uğratan iletişim kutusu olarak **Modal** veya Alan ve Proje kenar çubuklarında **Kenar çubuğu kartı**. |
| **Düzey** | Kullanıcılara gösterilen ton: **Bilgi**, **Bakım**, **Kritik** veya **Çözüldü**. |
| Başlık ve **Gövde** | Duyuru metni. |
| **Başlangıç** / **Bitiş** | Duyurunun iletileceği zaman aralığı. Bitiş zamanı başlangıç zamanından sonra olmalıdır. |
diff --git a/tr/basic/admin-panel/audit-log.mdx b/tr/basic/admin-panel/audit-log.mdx
index 1e5f8498..711779d9 100644
--- a/tr/basic/admin-panel/audit-log.mdx
+++ b/tr/basic/admin-panel/audit-log.mdx
@@ -11,9 +11,9 @@ Yol: Yönetici Paneli → Denetim günlüğü
## İnceleyebileceğiniz Öğeler
-Denetim günlüğü; çalışma Alanları, Veritabanları, Tablolar, Görünümler, veri Alanları, Kayıtlar, paylaşım, davetler, erişim token'ları ve Yetki Matrisi dahil olmak üzere yaygın yönetim ve işbirliği etkinliklerini kapsar.
+Denetim günlüğü; çalışma Alanları, Projeleri, Tablolar, Görünümler, veri Alanları, Kayıtlar, paylaşım, davetler, erişim token'ları ve Yetki Matrisi dahil olmak üzere yaygın yönetim ve işbirliği etkinliklerini kapsar.
-Her günlük girdisi işlem zamanını, işlemi yapanı, eylem türünü, ilgili Veritabanını veya Alanı ve istek kaynağını gösterir. Ayrıntıları görüntülemek için bir günlük girdisini açın.
+Her günlük girdisi işlem zamanını, işlemi yapanı, eylem türünü, ilgili Projeyi veya Alanı ve istek kaynağını gösterir. Ayrıntıları görüntülemek için bir günlük girdisini açın.
## İşlemi Yapan Kişi Üzerinde Eylem Gerçekleştirme
@@ -30,10 +30,10 @@ Günlük listesini daraltmak için sayfanın üst kısmındaki filtreleri kullan
- **İşlemi Yapanı Seç**: Belirli bir kullanıcının gerçekleştirdiği eylemleri gösterir.
- **Alan Seç**: Belirli bir Alandaki etkinlikleri gösterir.
-- **Veritabanı Seç**: Belirli bir Veritabanındaki etkinlikleri gösterir.
-- **Eylem Seç**: Kayıtlar, veri Alanları, Görünümler, Tablolar, Veritabanları, paylaşım, Yetki Matrisi, Yetki Matrisi rolleri, çalışma Alanları, davetler, kullanıcılar ve erişim token'ları gibi işlem türlerine göre filtreler.
+- **Proje Seç**: Belirli bir Projedeki etkinlikleri gösterir.
+- **Eylem Seç**: Kayıtlar, veri Alanları, Görünümler, Tablolar, Projeleri, paylaşım, Yetki Matrisi, Yetki Matrisi rolleri, çalışma Alanları, davetler, kullanıcılar ve erişim token'ları gibi işlem türlerine göre filtreler.
-Bir kullanıcı, Veritabanı veya Alan silinmişse girdi günlükte kalır ve kaynak silinmiş olarak işaretlenir.
+Bir kullanıcı, Proje veya Alan silinmişse girdi günlükte kalır ve kaynak silinmiş olarak işaretlenir.
## Büyük Günlük Listelerinde Gezinme
diff --git a/tr/basic/admin-panel/computed-outbox.mdx b/tr/basic/admin-panel/computed-outbox.mdx
index e0e93c42..e85ff7cf 100644
--- a/tr/basic/admin-panel/computed-outbox.mdx
+++ b/tr/basic/admin-panel/computed-outbox.mdx
@@ -30,7 +30,7 @@ Varsayılan olarak her satır bir görevi temsil eder ve Teable görevi yeniden
Listeyi daraltmak için:
- Duruma göre filtrelemek için Tablonun üzerindeki durum kutucuklarına tıklayın: **Bekliyor**, **Etkin**, **Ertelendi**, **Başarısız**, **Tamamlandı (saklanıyor)** vb. Aynı anda birkaçını seçebilirsiniz; bir kutucuğun üzerine geldiğinizde o durumun anlamı açıklanır.
-- **Alan**, **Veritabanı**, **Neden** veya **Sonuç** ölçütüne göre filtreleyin; görev, Veritabanı, Alan ya da hata arayın veya yavaş görevleri ortaya çıkarmak için asgari işleme süresi belirleyin.
+- **Alan**, **Proje**, **Neden** veya **Sonuç** ölçütüne göre filtreleyin; görev, Proje, Alan ya da hata arayın veya yavaş görevleri ortaya çıkarmak için asgari işleme süresi belirleyin.
- **Hesaplama kökenini** açmak için bir satıra tıklayın: kuyruk zaman damgaları, teslimat gecikmesi, işleme süresi, başarısız bir teslimatın maskelenmiş SQL'iyle birlikte tam hata nedeni ve aşağıda açıklanan yayılma ayrıntıları.
**Tamamlandı**, görevin işlem yaptığı anlamına gelmez. Sonuç rozeti, teslimatın gerçekte ne yaptığını gösterir: **İşlendi** görevi çalıştırdı, **İşlem yok** yapılacak bir şey kalmadığını belirledi, **Ertelendi** görevi daha sonrası için yeniden zamanladı ve **Park edildi** görevin kapsamının duraklatıldığı anlamına gelir. **Sonuç** filtresi listeyi bu sonuca göre daraltıp her birinin kaç teslimatı kapsadığını gösterir; böylece **Tamamlandı (saklanıyor)** ile **İşlendi** eşleştirildiğinde yalnızca görevi gerçekten çalıştıran teslimatlar kalır.
@@ -58,7 +58,7 @@ Hesaplanan bir değer yanlış göründüğünde veya geç ulaştığında arkas
**Başarısız** sayısı ve **Anomali yönetimi** farklı sorun türlerini gösterdiğinden sayıları farklı olabilir.
-**Anomali yönetimi**, tek bir temel nedenin kolayca fark edilebilmesi için anomalileri her Veritabanı, kaynak Tablo ve hata için bir tane olacak şekilde sorun gruplarında toplar. Herhangi bir şeyi kurtarmadan önce hata nedenini inceleyip temel sorunu giderin. Hata ayrıntılarını ve kapsadığı görevleri okumak için bir grubu genişletin; bu satırlar inceleme amaçlıdır ve kurtarma her zaman grubun tamamında çalışır.
+**Anomali yönetimi**, tek bir temel nedenin kolayca fark edilebilmesi için anomalileri her Proje, kaynak Tablo ve hata için bir tane olacak şekilde sorun gruplarında toplar. Herhangi bir şeyi kurtarmadan önce hata nedenini inceleyip temel sorunu giderin. Hata ayrıntılarını ve kapsadığı görevleri okumak için bir grubu genişletin; bu satırlar inceleme amaçlıdır ve kurtarma her zaman grubun tamamında çalışır.
Bir grubun sunduğu eylemler türüne bağlıdır:
@@ -70,7 +70,7 @@ Bir grubun sunduğu eylemler türüne bağlıdır:
Bir grup kurtarıldıktan sonra Teable kaç görevin geri yüklendiğini, kaçının yeni veya daha önce kuyruğa alınmış olduğunu ve kaçının teslim edildiğini veya ertelendiğini bildirir. Worker'lar daha sonra grubu mevcut eş zamanlılık ve görev bölme sınırları altında işler.
-**Veritabanı silindi** olarak işaretlenen bir grup, artık mevcut olmayan bir Veritabanına aittir. Kurtarılması hemen yeniden başarısız olacağından sunulan tek eylem **Grubu at** olur.
+**Proje silindi** olarak işaretlenen bir grup, artık mevcut olmayan bir Projeye aittir. Kurtarılması hemen yeniden başarısız olacağından sunulan tek eylem **Grubu at** olur.
Bir Tabloyu çöp kutusuna taşımak artık burada anomali oluşturmaz. Çöp kutusundaki bir Tabloya hâlâ başvuran hesaplama görevi, o Tabloyu okuyan adımları atlar, etkin Tabloları hedefleyen adımları tamamlar ve sona erer.
@@ -101,8 +101,8 @@ Kuyruk bölümünde iki eş zamanlılık denetimi bulunur. Her biri, her işlemi
| Denetim | Sınırladığı öğe |
| --- | --- |
| **İşlem başına eş zamanlılık** | Her worker işleminin aynı anda yönettiği hesaplama görevi sayısı. |
-| **Veritabanı başına görev alma sınırları** | Bir Veritabanı için (**Veritabanı başına**) ve içindeki bir kaynak Tablo için (**Başlangıç Tablosu başına**) aynı anda çalışan hesaplama görevi sayısı. Her ikisinin varsayılan değeri 2'dir ve 1 ile 16 arasında değerleri kabul eder. |
+| **Proje başına görev alma sınırları** | Bir Proje için (**Proje başına**) ve içindeki bir kaynak Tablo için (**Başlangıç Tablosu başına**) aynı anda çalışan hesaplama görevi sayısı. Her ikisinin varsayılan değeri 2'dir ve 1 ile 16 arasında değerleri kabul eder. |
-Darboğazı tek bir yoğun Veritabanı oluşturuyorsa görev alma sınırlarını, aynı anda çok sayıda Veritabanı kuyruktaysa işlem başına eş zamanlılığı artırın.
+Darboğazı tek bir yoğun Proje oluşturuyorsa görev alma sınırlarını, aynı anda çok sayıda Proje kuyruktaysa işlem başına eş zamanlılığı artırın.
Daha yüksek eş zamanlılık, veritabanınıza daha fazla yük bindirir. Verilerini bir [veritabanı kiracısında](/tr/basic/admin-panel/database-tenant) saklayan Alanlar, bağlantı havuzları bu değerlere göre boyutlandırıldığından görev alma sınırları için ortam varsayılanlarını kullanmaya devam eder.
diff --git a/tr/basic/admin-panel/database-tenant.mdx b/tr/basic/admin-panel/database-tenant.mdx
index 29e460eb..497b91b8 100644
--- a/tr/basic/admin-panel/database-tenant.mdx
+++ b/tr/basic/admin-panel/database-tenant.mdx
@@ -26,6 +26,6 @@ Bir örnek yöneticisi, **Yönetici Paneli** → **BYODB** bölümünden şunlar
Hayır. Verileri söz konusu veritabanında saklanan Teable Alanını ifade eder.
- Hayır. Teable'ın kendi Alan verilerini nerede saklayıp yönettiğini değiştirir. Başka bir yerde barındırılan PostgreSQL veritabanını sağlarsınız; Teable da kendi verilerini burada oluşturup yönetir. Bu veritabanındaki mevcut Tablolar ve Kayıtlar Teable'a bağlanmaz veya otomatik olarak Veritabanlarına aktarılmaz.
+ Hayır. Teable'ın kendi Alan verilerini nerede saklayıp yönettiğini değiştirir. Başka bir yerde barındırılan PostgreSQL veritabanını sağlarsınız; Teable da kendi verilerini burada oluşturup yönetir. Bu veritabanındaki mevcut Tablolar ve Kayıtlar Teable'a bağlanmaz veya otomatik olarak Projelere aktarılmaz.
diff --git a/tr/basic/admin-panel/multitenancy.mdx b/tr/basic/admin-panel/multitenancy.mdx
index 80e46b45..b19facd0 100644
--- a/tr/basic/admin-panel/multitenancy.mdx
+++ b/tr/basic/admin-panel/multitenancy.mdx
@@ -16,10 +16,10 @@ Bir Teable örneği, her biri bir müşteri, iş birimi veya ekip için ayrı ü
Teable örneği
├── Kuruluş kiracısı A
│ ├── Kuruluş yöneticileri, üyeler ve departmanlar
-│ └── Alanlar, Veritabanları ve kuruluş düzeyindeki ayarlar
+│ └── Alanlar, Projeler ve kuruluş düzeyindeki ayarlar
├── Kuruluş kiracısı B
│ ├── Kuruluş yöneticileri, üyeler ve departmanlar
-│ └── Alanlar, Veritabanları ve kuruluş düzeyindeki ayarlar
+│ └── Alanlar, Projeler ve kuruluş düzeyindeki ayarlar
└── Kuruluş kiracısı C
```
@@ -107,7 +107,7 @@ Bir kuruluş yöneticisi, Alan seçiciden **Kuruluş Panelini** açarak şunlar
| --- | --- |
| **Kullanıcılar** | Mevcut kuruluştaki kullanıcıları görüntüleme ve yönetme |
| **Kuruluş** | Departmanları oluşturma, taşıma, yeniden adlandırma ve silme; departman üyelerini yönetme |
-| **Alan yönetimi** | Kuruluşa Alan ekleme veya kuruluştan Alan kaldırma; Alan ve Veritabanı sayılarını görüntüleme |
+| **Alan yönetimi** | Kuruluşa Alan ekleme veya kuruluştan Alan kaldırma; Alan ve Proje sayılarını görüntüleme |
| **Kimlik doğrulama ayarları** | Kuruluş için üçüncü taraf kimlik doğrulama sağlayıcılarını yapılandırma |
| **Güvenlik ayarları** | Bu alan adlarına sahip yeni kullanıcıların kuruluşa otomatik olarak katılması için e-posta alan adlarını doğrulama |
| **Örnek ayarları** | Kuruluş adını, otomatik Alan erişimini ve departman kapsamını değiştirme |
diff --git a/tr/basic/admin-panel/skills.mdx b/tr/basic/admin-panel/skills.mdx
index 66b04d51..f9881bd9 100644
--- a/tr/basic/admin-panel/skills.mdx
+++ b/tr/basic/admin-panel/skills.mdx
@@ -9,7 +9,7 @@ Yol: Yönetici Paneli → Skill'ler
Skill'leri tüm örnekte yayımlamak için **Skill'ler** bölümünü kullanın. Buraya eklenen bir Skill her AI Chat, App Builder ve bot sohbetinde kullanılabilir. Bu nedenle kuruluşunuzun varsayılan olarak paylaşması gereken kurum içi yazım tarzı, raporlama standardı veya ortak entegrasyon prosedürü gibi çalışma yöntemleri için kullanın.
-Kullanıcıların başka yerlerde eklediği Skill'ler kendi kapsamlarında kalır. Kişisel, Veritabanı ve Alan Skill'leri için [AI Chat](/tr/basic/ai/ai-chat) bölümüne bakın.
+Kullanıcıların başka yerlerde eklediği Skill'ler kendi kapsamlarında kalır. Kişisel, Proje ve Alan Skill'leri için [AI Chat](/tr/basic/ai/ai-chat) bölümüne bakın.
## Skill Ekleme
@@ -34,4 +34,4 @@ Liste, Skill'leri kapsama göre gruplandırır ve her birinin nereden geldiğini
## Aynı Ad İki Kez Kullanıldığında
-Burada yayımlanan Skill, örnek için varsayılandır. Bir Veritabanı, Alan, kişisel, uygulama veya bot Skill'i aynı adı kullanıyorsa ilgili sohbette kapsamı daha dar olan geçerli olur ve örnek Skill'i yok sayılır.
+Burada yayımlanan Skill, örnek için varsayılandır. Bir Proje, Alan, kişisel, uygulama veya bot Skill'i aynı adı kullanıyorsa ilgili sohbette kapsamı daha dar olan geçerli olur ve örnek Skill'i yok sayılır.
diff --git a/tr/basic/admin-panel/spaces.mdx b/tr/basic/admin-panel/spaces.mdx
index eb4941ca..49e343e9 100644
--- a/tr/basic/admin-panel/spaces.mdx
+++ b/tr/basic/admin-panel/spaces.mdx
@@ -8,7 +8,7 @@ description: "Alan bilgilerini görüntüleme, Alanları silme ve otomatik katı
### Alan Bilgileri
* **Alan Adı**: Alanın görünen adı
-* **Veritabanları**: Alanda bulunan toplam Veritabanı sayısı
+* **Projeleri**: Alanda bulunan toplam Proje sayısı
* **İşbirlikçiler**: Alana erişimi olan toplam kullanıcı sayısı
* **Oluşturulma Zamanı**: Alanın oluşturulduğu zaman
* **Otomatik katılma**: Alanın yeni kullanıcıların otomatik olarak katılmasına izin verip vermediği
@@ -26,7 +26,7 @@ description: "Alan bilgilerini görüntüleme, Alanları silme ve otomatik katı
Yönetici panelinden bir Alanı sildiğinizde:
* Alan hemen silinmiş olarak işaretlenir
-* Alandaki tüm Veritabanları ve veriler erişilemez hâle gelir
+* Alandaki tüm Projeleri ve veriler erişilemez hâle gelir
* İşbirlikçiler Alana erişimlerini kaybeder
* Bu işlem geri alınamaz
diff --git a/tr/basic/admin-panel/table-query-ops.mdx b/tr/basic/admin-panel/table-query-ops.mdx
index 80a995b7..09af6c62 100644
--- a/tr/basic/admin-panel/table-query-ops.mdx
+++ b/tr/basic/admin-panel/table-query-ops.mdx
@@ -26,7 +26,7 @@ Sayfa Tablo listesiyle açılır. Üstteki durum düğmeleri kendi sayılarını
| **Yapılandırılmamış** | Henüz arama kapsamı olmayan Tablolar. |
| **Kullanılamıyor** | Şu anda dizinli aramayı kullanamayan Tablolar. Satırda nedeni yazar. |
-Arama kutusu Tablo, Veritabanı ve Alan adlarını veya kimliklerini kabul eder. Sıralama **En çok yavaş sorgu** ya da **Tablo adı** şeklindedir. **Gözlem penceresi** son 1 saati veya 24 saati kapsar ve listedeki tüm gözlem değerleri bu pencereyi izler. Gözlem kayıtları 2 gün saklanır; daha eskisi listede görünmez.
+Arama kutusu Tablo, Proje ve Alan adlarını veya kimliklerini kabul eder. Sıralama **En çok yavaş sorgu** ya da **Tablo adı** şeklindedir. **Gözlem penceresi** son 1 saati veya 24 saati kapsar ve listedeki tüm gözlem değerleri bu pencereyi izler. Gözlem kayıtları 2 gün saklanır; daha eskisi listede görünmez.
Her satırda Tablonun tahmini satır sayısı ve boyutu, pencere içindeki istekler ve yavaş sorgular, geçerli arama yöntemi ve Alan kapsamı, filtre/sıralama dizinlerinin sayısı, bekleyen öneriler ile etkin görevlerin sayısı yer alır. Ayrıntı için Tablo adına tıklayın.
diff --git a/tr/basic/admin-panel/template-admin.mdx b/tr/basic/admin-panel/template-admin.mdx
index 00ed1d75..8728f488 100644
--- a/tr/basic/admin-panel/template-admin.mdx
+++ b/tr/basic/admin-panel/template-admin.mdx
@@ -1,6 +1,6 @@
---
title: "Şablon Yönetimi"
-description: "Kuruluşunuzun iş akışı şablonlarını yönetin ve kullanıcıların önceden yapılandırılmış Veritabanlarıyla hızla başlamasını sağlayın."
+description: "Kuruluşunuzun iş akışı şablonlarını yönetin ve kullanıcıların önceden yapılandırılmış Projelerle hızla başlamasını sağlayın."
---
Kendi sunucunuzda barındırılan Business ve üzeri planlarda kullanılabilir
@@ -16,12 +16,12 @@ description: "Kuruluşunuzun iş akışı şablonlarını yönetin ve kullanıc
* **Markdown Açıklaması**: Zengin metin biçimlendirmesini destekleyen ayrıntılı açıklama
* **Kategori**: Şablonları iş senaryolarına göre gruplandırır (ör. İK, Satış, Mühendislik)
* **Sistem**: Şablonun resmî bir sistem şablonu olup olmadığını belirtir
-* **Kaynak**: Bu şablonu oluşturmak için kullanılan özgün Veritabanı
+* **Kaynak**: Bu şablonu oluşturmak için kullanılan özgün Proje
#### Şablon İşlemleri
* **Yeni Şablon**: Yeni bir şablon yapılandırması oluşturur
-* **Anlık Görüntü Yayımla**: Kaynak Veritabanının mevcut durumunu kaydeder. Şablonu listeleyebilmek için önce bir anlık görüntü yayımlamanız gerekir.
+* **Anlık Görüntü Yayımla**: Kaynak Projenin mevcut durumunu kaydeder. Şablonu listeleyebilmek için önce bir anlık görüntü yayımlamanız gerekir.
* **Durum (Yayımla)**: Şablonu şablon merkezinde listelemek veya listeden kaldırmak için bu seçeneği değiştirin. Ad, açıklama ve anlık görüntü gerektirir.
* **Sabitle**: Önemli şablonları listenin en üstüne sabitler
* **Sil**: Şablon yapılandırmasını kaldırır
@@ -31,7 +31,7 @@ description: "Kuruluşunuzun iş akışı şablonlarını yönetin ve kullanıc
Kendi sunucusunda barındıran kullanıcılar, resmî Teable Cloud'dan şablonları içe aktarabilir:
1. **İndir**: `.tea` dosyasını [Resmî Şablon Merkezi](https://teable.ai/templates) üzerinden alın
-2. **İçe Aktar**: `.tea` dosyasını Alanınıza yeni bir Veritabanı olarak içe aktarın
+2. **İçe Aktar**: `.tea` dosyasını Alanınıza yeni bir Proje olarak içe aktarın
3. **Şablon Oluştur**: Şablon Yönetimi > Yeni Şablon bölümüne gidin
-4. **Kaynak Seç**: İçe aktarılan Veritabanını kaynak olarak seçin
+4. **Kaynak Seç**: İçe aktarılan Projeyi kaynak olarak seçin
5. **Yayımla**: Ayrıntıları yapılandırın, anlık görüntüyü yayımlayın ve durumu etkinleştirin ---
diff --git a/tr/basic/ai/ai-chat.mdx b/tr/basic/ai/ai-chat.mdx
index 05d2ff49..71aa1dce 100644
--- a/tr/basic/ai/ai-chat.mdx
+++ b/tr/basic/ai/ai-chat.mdx
@@ -35,7 +35,7 @@ Uzun bir düz metin bloğu yapıştırdığınızda Teable, mesaj girişinin kol
- **Gizli anahtarlarım**: **+** → **Daha Fazla** → **Gizli anahtarlarım** yolunu açıp API anahtarlarını veya diğer kimlik bilgilerini **Ayarlar** → **Entegrasyonlar** bölümüne kaydedin. Bu değerler size aittir, AI Chat bunları çalışma sırasında ortam değişkeni olarak okuyabilir ve tek tek uygulama ve otomasyonlara verebilirsiniz. Bkz. [Kimlik Bilgileri ve Entegrasyonlar](/tr/basic/credential).
- **Kimlik bilgisi istekleri**: AI'ın üçüncü taraf bir hesaba veya bir gizli anahtara ihtiyacı olduğunda sohbete bir kimlik bilgisi isteği kartı sabitlenir. OAuth akışı için **Hesabımı bağla**'yı seçin ya da hâlihazırda sahip olduğunuz bir kimlik bilgisine erişim verin. **Atla**'ya tıklarsanız kimlik bilgisini vermezsiniz; AI, onsuz tamamlayabildiği bölümlerle devam eder.
- **Kazıyıcı**: **+** menüsünü açıp **Kazıyıcı**'yı seçin, ardından bir platform ve veri türü belirleyin. Girişler iki türlüdür: bir kısmı yapıştırdığınız bağlantıdan veri çeker, örneğin LinkedIn'de **kişisel profil** veya Amazon'da **ürün yorumları**; diğerleri anahtar kelime, etiket ya da adla arar, örneğin TikTok'ta **video arama** veya Reddit'te **subreddit'in gönderileri**. Teable ilgili talimatı sohbet girişine önceden doldurur ve tamamlamanız gereken kısmı sonda bırakır. **Herhangi bir web sayfası** seçeneği yapıştırdığınız bağlantıyı doğrudan alır.
-- **Skill'ler**: Mevcut sohbette Skill'leri içe aktarmak, etkinleştirmek, devre dışı bırakmak veya denemek için **+** menüsünü açıp **Skill'ler**'i seçin. Bir Skill'i içe aktarırken kimlerin kullanabileceğini seçin: **Kişisel** yalnızca sizin kullanımınıza sunar, **Veritabanı** bu Veritabanındaki işbirlikçilerin, **Alan** ise bu Alandaki herkesin kullanımına sunar. Etkin bir Skill'i seçmek için giriş kutusuna `/` yazın. Harici bir sistemi bağlamak veya taşımak için [Her Şeyi Bağlama ve Taşıma](/tr/basic/ai/connect-everything) bölümüne bakın.
+- **Skill'ler**: Mevcut sohbette Skill'leri içe aktarmak, etkinleştirmek, devre dışı bırakmak veya denemek için **+** menüsünü açıp **Skill'ler**'i seçin. Bir Skill'i içe aktarırken kimlerin kullanabileceğini seçin: **Kişisel** yalnızca sizin kullanımınıza sunar, **Proje** bu Projedeki işbirlikçilerin, **Alan** ise bu Alandaki herkesin kullanımına sunar. Etkin bir Skill'i seçmek için giriş kutusuna `/` yazın. Harici bir sistemi bağlamak veya taşımak için [Her Şeyi Bağlama ve Taşıma](/tr/basic/ai/connect-everything) bölümüne bakın.
- **Bağlam kullanımı**: Giriş kutusunun yanındaki halka, sohbetin model bağlam penceresinin ne kadarını kullandığını gösterir. Yüzdeyi ve token sayılarını görmek için halkaya tıklayın. Bağlam dolduğunda Teable sohbeti sıkıştırır; temiz bir bağlam istiyorsanız yeni bir sohbet başlatın.
- **Dosyaları yönetme**: Mevcut sohbet korumalı alanındaki dosyaları görüntülemek için **+** → **Diğer** → **Dosyaları yönet** yolunu açın. Desteklenen dosyaları önizleyebilir, dosyaları indirebilir veya artık gerek duymadığınız dosya ve klasörleri silebilirsiniz. Dosyaların yönetilebilmesi için bir sohbetin mevcut olması gerekir.
- **Mesaj kuyruğu**: AI çalışırken başka bir mesaj göndermek işlemi kesintiye uğratmaz. Mesaj, giriş kutusunun üzerindeki kuyrukta bekler ve mevcut çalışma sona erdiğinde gönderilir. Kuyruktaki öğeler sohbet girişiyle aynı Tablo, Görünüm, ek ve seçim etiketlerini korur; **Kaldır** bir öğeyi siler, **...** → **Mesajı düzenle** öğeyi yeniden giriş kutusuna taşır, yalnızca metin içeren öğelerde bulunan **Yönlendir** ise metni bekletmek yerine çalışan işleme aktarır.
@@ -129,9 +129,9 @@ Bir yanıt aynı anda birkaç dosya sunduğunda bunları tek bir zip dosyası ol
### Bellek
-Bellek, Cuppy'den açıkça hatırlamasını istediğiniz bilgileri saklar. Belleğin kapsamı kullanıcıya ve Veritabanına göredir: Her kullanıcının her Veritabanında bağımsız bir bellek bağlamı vardır ve başka bir Veritabanına kaydedilen bellek mevcut Veritabanında otomatik olarak görünmez.
+Bellek, Cuppy'den açıkça hatırlamasını istediğiniz bilgileri saklar. Belleğin kapsamı kullanıcıya ve Projeye göredir: Her kullanıcının her Projede bağımsız bir bellek bağlamı vardır ve başka bir Projeye kaydedilen bellek mevcut Projede otomatik olarak görünmez.
-- Belleği mevcut Veritabanına kaydetme
+- Belleği mevcut Projeye kaydetme
Cuppy'ye sohbette neyi hatırlaması gerektiğini söyleyin:
@@ -139,12 +139,12 @@ Cuppy'ye sohbette neyi hatırlaması gerektiğini söyleyin:
Lütfen xxx'i hatırla.
```
-- Başka bir Veritabanındaki belleği yeniden kullanma
+- Başka bir Projedeki belleği yeniden kullanma
-Cuppy'den başka bir Veritabanını okumasını ve ilgili bölümleri mevcut Veritabanına kaydetmesini isteyin:
+Cuppy'den başka bir Projeyi okumasını ve ilgili bölümleri mevcut Projeye kaydetmesini isteyin:
```text
-Cuppy, lütfen Base ID bsexxxxxxxxxxxx için belleği oku ve ilgili belleği bu mevcut Base'e kaydet.
+Cuppy, lütfen bsexxxxxxxxxxxx kimlikli Projenin belleğini oku ve ilgili belleği geçerli Projeye kaydet.
```
### Uzun Görevleri Yönetme
@@ -228,8 +228,8 @@ Sohbetlerinizde oluşturduğunuz tüm yapıtları görüntülemek için **+**
Giriş kutusuna `@` yazın ve AI Chat'in referans almasını istediğiniz düğümü seçin. Izgara Görünümü seçimlerinde satırları, sütunları, tek bir hücreyi veya hücre aralığını seçip bağlam menüsünden **Sohbete Ekle** seçeneğini de kullanabilirsiniz.
-
- Evet. AI, sohbetin ait olduğu Veritabanıyla sınırlı değildir; erişebildiğiniz diğer Veritabanlarını bulup bunlarda çalışabilir. İsteğinizde Veritabanının adını belirtin; örneğin "bu Tabloyu Satış Veritabanındaki siparişler Tablosuyla karşılaştır" yazın. `@` yalnızca mevcut Veritabanındaki düğümleri listeler ve başka bir yer belirtmediğiniz tüm işlemler sohbetin kendi Veritabanında gerçekleşir.
+
+ Evet. AI, sohbetin ait olduğu Projeyle sınırlı değildir; erişebildiğiniz diğer Projeleri bulup bunlarda çalışabilir. İsteğinizde Projenin adını belirtin; örneğin "bu Tabloyu Satış Projedeki siparişler Tablosuyla karşılaştır" yazın. `@` yalnızca mevcut Projedeki düğümleri listeler ve başka bir yer belirtmediğiniz tüm işlemler sohbetin kendi Projede gerçekleşir.
@@ -239,8 +239,8 @@ Sohbetlerinizde oluşturduğunuz tüm yapıtları görüntülemek için **+**
Varsayılan olarak hayır. Kendi yapıtlarınızı yalnızca siz açabilirsiniz. Görüntüleyicide **Paylaşımı etkinleştir** seçeneğini açıp bağlantıyı gönderin; yapıtın Alan içinde kalması gerekiyorsa **Alan üyeleri**'ni seçin.
-
- Hayır. Belleğin kapsamı kullanıcıya ve Veritabanına göredir. Başka bir Veritabanındaki belleği yeniden kullanmak istiyorsanız Cuppy'den o Veritabanının belleğini okumasını ve ilgili bölümleri mevcut Veritabanına kaydetmesini isteyin.
+
+ Hayır. Belleğin kapsamı kullanıcıya ve Projeye göredir. Başka bir Projedeki belleği yeniden kullanmak istiyorsanız Cuppy'den o Projenin belleğini okumasını ve ilgili bölümleri mevcut Projeye kaydetmesini isteyin.
@@ -268,11 +268,11 @@ Sohbetlerinizde oluşturduğunuz tüm yapıtları görüntülemek için **+**
- Skill'leri içe aktarmak veya yönetmek için **+** menüsünü açıp **Skill'ler**'i seçin ya da etkin bir Skill'i seçmek için giriş kutusuna `/` yazın. Skill'i içe aktarırken kimlerin kullanabileceğini seçin: Kendi sohbetleriniz için kişisel, aynı Veritabanındaki işbirlikçilerin ihtiyaç duyduğu durumlarda Veritabanı, Alandaki herkes içinse Alan seçeneğini kullanın. Veritabanını yönetebilen kullanıcılar Veritabanı Skill'leri, Alan sahipleri ve oluşturucuları ise Alan Skill'leri ekleyebilir. AI Chat bir `.skill` dosyası sunarsa eklemek için dosya kartındaki **Yükle** seçeneğini kullanın.
+ Skill'leri içe aktarmak veya yönetmek için **+** menüsünü açıp **Skill'ler**'i seçin ya da etkin bir Skill'i seçmek için giriş kutusuna `/` yazın. Skill'i içe aktarırken kimlerin kullanabileceğini seçin: Kendi sohbetleriniz için kişisel, aynı Projedeki işbirlikçilerin ihtiyaç duyduğu durumlarda Proje, Alandaki herkes içinse Alan seçeneğini kullanın. Projeyi yönetebilen kullanıcılar Proje Skill'leri, Alan sahipleri ve oluşturucuları ise Alan Skill'leri ekleyebilir. AI Chat bir `.skill` dosyası sunarsa eklemek için dosya kartındaki **Yükle** seçeneğini kullanın.
- Her zaman yalnızca tek bir sürüm geçerlidir ve ekibin paylaştığı sürüm kişisel kopyadan önceliklidir: Veritabanı Skill'i Alan Skill'inden, Alan Skill'i ise kişisel Skill'den önceliklidir. Bir uygulama veya bot sohbetinde, ilgili uygulama ya da bot için eklenen Skill ilk sırada gelir. Herkesi yeni bir sürüme geçirmek için Veritabanı veya Alandaki kopyayı güncelleyin.
+ Her zaman yalnızca tek bir sürüm geçerlidir ve ekibin paylaştığı sürüm kişisel kopyadan önceliklidir: Proje Skill'i Alan Skill'inden, Alan Skill'i ise kişisel Skill'den önceliklidir. Bir uygulama veya bot sohbetinde, ilgili uygulama ya da bot için eklenen Skill ilk sırada gelir. Herkesi yeni bir sürüme geçirmek için Proje veya Alandaki kopyayı güncelleyin.
diff --git a/tr/basic/ai/app-builder.mdx b/tr/basic/ai/app-builder.mdx
index 7d163dd4..db6d63e1 100644
--- a/tr/basic/ai/app-builder.mdx
+++ b/tr/basic/ai/app-builder.mdx
@@ -5,21 +5,21 @@ description: AI kullanarak verilerinizi özel web uygulamalarına dönüştürü
Tüm Bulut planlarında kullanılabilir; kendi sunucunuzda barındırılan sürüm için Business veya üzeri gerekir.
-Teable App Builder, kod yazmadan Veritabanlarınızı tamamen işlevsel ve özelleştirilmiş web uygulamalarına dönüştürmenizi sağlar. Veri yapınızın gücünü AI destekli tasarımla birleştirerek dahili araçları, müşteri portallarını ve veri panolarını dakikalar içinde kullanıma sunabilirsiniz.
+Teable App Builder, kod yazmadan Projelerinizi tamamen işlevsel ve özelleştirilmiş web uygulamalarına dönüştürmenizi sağlar. Veri yapınızın gücünü AI destekli tasarımla birleştirerek dahili araçları, müşteri portallarını ve veri panolarını dakikalar içinde kullanıma sunabilirsiniz.
## Genel Bakış
App Builder, "İstemden Uygulamaya" iş akışını izler. Ne istediğinizi açıklarsınız; AI uygulamanın yapısını, sayfalarını ve mantığını sizin için oluşturur. Ardından görsel düzenleyiciyi veya kodu kullanarak her ayrıntıya ince ayar yapabilirsiniz.
-Özel arayüzler ve bağımsız uygulamalar oluşturmak için App Builder'ı kullanın. Veritabanı içinde etkileşimli veri analizi ve anlık sorular için [AI Chat](/tr/basic/ai/ai-chat) kullanın.
+Özel arayüzler ve bağımsız uygulamalar oluşturmak için App Builder'ı kullanın. Proje içinde etkileşimli veri analizi ve anlık sorular için [AI Chat](/tr/basic/ai/ai-chat) kullanın.
## Uygulama Oluşturma
Uygulama oluşturmanın iki temel yolu vardır:
-1. **Veritabanından**: Herhangi bir Veritabanında, mevcut verilerinize bağlı bir uygulama oluşturmak için "Uygulama Oluştur"a tıklayın.
+1. **Projeden**: Herhangi bir Projede, mevcut verilerinize bağlı bir uygulama oluşturmak için "Uygulama Oluştur"a tıklayın.
2. **Sohbetten**: AI Chat'i açın ve "Bu müşteri Tablosu için bir CRM uygulaması oluştur" yazın.
## Uygulama Düzenleyici Arayüzü
@@ -37,7 +37,7 @@ Uygulamanızın komuta merkezi.
- **Doğal Dille Düzenleme**: *"Üstbilgiyi mavi yap"* veya *"Yeni Kayıtlar için bir gönderim formu ekle"* gibi değişiklikleri açıklayın.
- **Otomatik Yönlendirme**: AI, hangi bileşen veya sayfadan söz ettiğinizi anlar ve doğrudan değiştirir.
- **Entegrasyonlar**: Uygulama görevinin üçüncü taraf bir hesaba erişmesi gerektiğinde App Builder, sohbet panelinde **Slack'e Bağlan** gibi bir kart gösterebilir. OAuth ile yetkilendirmek için **Bağlan**'a tıklayın. Bu yetkilendirmeyi iptal etmek için **Atla**'ya tıklayın; AI, bu bağlantı olmadan tamamlayabildiği bölümlerle devam eder.
-- **Skill'ler**: Bu uygulama sohbetinin Skill'lerini yönetmek için **+** menüsünü açıp **Skill'ler**'i seçin. Buraya eklenen bir Skill yalnızca mevcut uygulamada kullanılabilir; uygulamanın Veritabanı ve Alanıyla paylaşılan Skill'ler de burada kullanılabilir. Etkin bir Skill'i seçmek için giriş kutusuna `/` yazın.
+- **Skill'ler**: Bu uygulama sohbetinin Skill'lerini yönetmek için **+** menüsünü açıp **Skill'ler**'i seçin. Buraya eklenen bir Skill yalnızca mevcut uygulamada kullanılabilir; uygulamanın Proje ve Alanıyla paylaşılan Skill'ler de burada kullanılabilir. Etkin bir Skill'i seçmek için giriş kutusuna `/` yazın.
- **Dosyaları yönetme**: Uygulama korumalı alanındaki dosyaları görüntülemek için **+** → **Diğer** → **Dosyaları yönet** yolunu açın. Desteklenen dosyaları önizlemek, oluşturulan dosyaları indirmek veya artık gerek duymadığınız dosya ve klasörleri silmek için bu seçeneği kullanın.
- **Sohbeti Temizleme**: Mevcut sohbet konudan uzaklaştıysa yeni bir oturum başlatmak için panelin sağ alt köşesindeki **Sohbeti Temizle**'ye tıklayın. Bu işlem mevcut sohbetin geçmişini temizler ancak uygulamanın kendisini silmez. İlk kullanımda bir onay gösterilir; bu onayın daha sonra yeniden gösterilmemesini seçebilirsiniz.
diff --git a/tr/basic/ai/connect-everything/migrate-airtable.mdx b/tr/basic/ai/connect-everything/migrate-airtable.mdx
index ce26e467..7b20a24e 100644
--- a/tr/basic/ai/connect-everything/migrate-airtable.mdx
+++ b/tr/basic/ai/connect-everything/migrate-airtable.mdx
@@ -13,7 +13,7 @@ keywords:
## Taşımayı başlatma
1. Taşımak istediğiniz Veritabanlarına erişimi olan bir [Airtable Kişisel Erişim Token'ı](https://airtable.com/create/tokens) oluşturun.
-2. Hedef Teable Veritabanını açın ve AI Chat'i başlatın.
+2. Hedef Teable Projeyi açın ve AI Chat'i başlatın.
3. `/` yazın, **Connect Everything**'i seçin ve token'ı sağlayın.
4. Teable AI'dan Airtable Veritabanını taşımasını isteyin, ardından sonucu gözden geçirin.
diff --git a/tr/basic/ai/connect-everything/migrate-baserow.mdx b/tr/basic/ai/connect-everything/migrate-baserow.mdx
index 940a4358..8669bae3 100644
--- a/tr/basic/ai/connect-everything/migrate-baserow.mdx
+++ b/tr/basic/ai/connect-everything/migrate-baserow.mdx
@@ -13,7 +13,7 @@ Bir Baserow örneğine bağlanıp erişilebilir verileri Teable'a taşımak içi
## Taşımayı başlatma
1. Baserow örneğinin URL'sini kopyalayın ve kaynak Tablolara okuma erişimi olan bir [Baserow veritabanı token'ı](https://baserow.io/user-docs/personal-api-tokens) oluşturun.
-2. Hedef Teable Veritabanını açın ve AI Chat'i başlatın.
+2. Hedef Teable Projeyi açın ve AI Chat'i başlatın.
3. `/` yazın, **Connect Everything**'i seçin ve örnek URL'si ile veritabanı token'ını sağlayın.
4. Teable AI'dan Baserow veritabanını taşımasını isteyin, ardından sonucu gözden geçirin.
diff --git a/tr/basic/ai/connect-everything/migrate-clickup.mdx b/tr/basic/ai/connect-everything/migrate-clickup.mdx
index 7d44eb8b..689b5fa4 100644
--- a/tr/basic/ai/connect-everything/migrate-clickup.mdx
+++ b/tr/basic/ai/connect-everything/migrate-clickup.mdx
@@ -16,7 +16,7 @@ keywords:
## Taşımayı başlatma
1. ClickUp'ta **Settings → Apps** bölümünü açın ve kişisel API token'ınızı kopyalayın. ClickUp'ın [kimlik doğrulama kılavuzuna](https://developer.clickup.com/docs/authentication) bakın.
-2. Hedef Teable Veritabanını açın ve AI Chat'i başlatın.
+2. Hedef Teable Projeyi açın ve AI Chat'i başlatın.
3. `/` yazın, **Connect Everything**'i seçin ve kişisel API token'ını sağlayın.
4. Teable AI'dan erişilebilir ClickUp Çalışma Alanlarını taşımasını ve ekibinizin ihtiyaç duyduğu proje Görünümlerini, panoları ve otomasyonları oluşturmasını isteyin.
diff --git a/tr/basic/ai/connect-everything/migrate-jira.mdx b/tr/basic/ai/connect-everything/migrate-jira.mdx
index 266d07ba..36b2e041 100644
--- a/tr/basic/ai/connect-everything/migrate-jira.mdx
+++ b/tr/basic/ai/connect-everything/migrate-jira.mdx
@@ -16,7 +16,7 @@ keywords:
## Taşımayı başlatma
1. Taşımak istediğiniz Jira projelerine erişimi olan bir hesap için [Atlassian API token'ı](https://id.atlassian.com/manage-profile/security/api-tokens) oluşturun. Atlassian'ın [REST API'ler için temel kimlik doğrulama](https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/) kılavuzuna bakın.
-2. Hedef Teable Veritabanını açın ve AI Chat'i başlatın.
+2. Hedef Teable Projeyi açın ve AI Chat'i başlatın.
3. `/` yazın, **Connect Everything**'i seçin ve Jira Cloud site URL'sini, hesabın e-posta adresini ve API token'ını sağlayın.
4. Teable AI'dan erişilebilir Jira projelerini taşımasını ve ekibinizin ihtiyaç duyduğu proje Görünümlerini, panoları ve otomasyonları oluşturmasını isteyin.
diff --git a/tr/basic/ai/connect-everything/migrate-monday.mdx b/tr/basic/ai/connect-everything/migrate-monday.mdx
index da28226c..26f79952 100644
--- a/tr/basic/ai/connect-everything/migrate-monday.mdx
+++ b/tr/basic/ai/connect-everything/migrate-monday.mdx
@@ -16,7 +16,7 @@ keywords:
## Taşımayı başlatma
1. monday.com'da profil menünüzü açın, **Developers**'ı seçin ve kişisel API token'ınızı kopyalayın. monday.com'un [API kimlik doğrulama kılavuzuna](https://developer.monday.com/api-reference/docs/authentication) bakın.
-2. Hedef Teable Veritabanını açın ve AI Chat'i başlatın.
+2. Hedef Teable Projeyi açın ve AI Chat'i başlatın.
3. `/` yazın, **Connect Everything**'i seçin ve kişisel API token'ını sağlayın.
4. Teable AI'dan erişilebilir monday.com çalışma alanlarını taşımasını ve ekibinizin ihtiyaç duyduğu proje Görünümlerini, panoları ve otomasyonları oluşturmasını isteyin.
diff --git a/tr/basic/ai/connect-everything/migrate-nocodb.mdx b/tr/basic/ai/connect-everything/migrate-nocodb.mdx
index eebcb3cc..c39f9c00 100644
--- a/tr/basic/ai/connect-everything/migrate-nocodb.mdx
+++ b/tr/basic/ai/connect-everything/migrate-nocodb.mdx
@@ -13,7 +13,7 @@ Bir NocoDB örneğine bağlanıp erişilebilir verileri Teable'a taşımak için
## Taşımayı başlatma
1. NocoDB örneğinin URL'sini kopyalayın ve kaynak Veritabanına erişimi olan bir [NocoDB API token'ı](https://nocodb.com/docs/product-docs/account-settings/api-tokens) oluşturun.
-2. Hedef Teable Veritabanını açın ve AI Chat'i başlatın.
+2. Hedef Teable Projeyi açın ve AI Chat'i başlatın.
3. `/` yazın, **Connect Everything**'i seçin ve örnek URL'si ile API token'ını sağlayın.
4. Teable AI'dan NocoDB Veritabanını taşımasını isteyin, ardından sonucu gözden geçirin.
diff --git a/tr/basic/ai/connect-everything/migrate-smartsheet.mdx b/tr/basic/ai/connect-everything/migrate-smartsheet.mdx
index 319c9f3e..3d39bb39 100644
--- a/tr/basic/ai/connect-everything/migrate-smartsheet.mdx
+++ b/tr/basic/ai/connect-everything/migrate-smartsheet.mdx
@@ -16,7 +16,7 @@ keywords:
## Taşımayı başlatma
1. Smartsheet'te **Account → Personal Settings → API Access** bölümünü açıp bir erişim token'ı oluşturun. Smartsheet'in [API başlangıç kılavuzuna](https://developers.smartsheet.com/api/smartsheet/guides/getting-started) bakın.
-2. Hedef Teable Veritabanını açın ve AI Chat'i başlatın.
+2. Hedef Teable Projeyi açın ve AI Chat'i başlatın.
3. `/` yazın, **Connect Everything**'i seçin ve erişim token'ıyla hesap ortamını belirtin: standard, Regions Europe veya Gov.
4. Teable AI'dan erişilebilir Smartsheet çalışma alanlarını taşımasını ve ekibinizin ihtiyaç duyduğu proje Görünümlerini, panoları ve otomasyonları oluşturmasını isteyin.
diff --git a/tr/basic/ai/connect-everything/migrate-smartsuite.mdx b/tr/basic/ai/connect-everything/migrate-smartsuite.mdx
index ed8e6568..745a3547 100644
--- a/tr/basic/ai/connect-everything/migrate-smartsuite.mdx
+++ b/tr/basic/ai/connect-everything/migrate-smartsuite.mdx
@@ -13,7 +13,7 @@ SmartSuite'i bağlayıp erişilebilir verileri Teable'a taşımak için [Teable
## Taşımayı başlatma
1. [SmartSuite API anahtarınızı ve Workspace ID'nizi](https://help.smartsuite.com/en/articles/6096587-retrieving-your-api-key-and-workspace-id) alın.
-2. Hedef Teable Veritabanını açın ve AI Chat'i başlatın.
+2. Hedef Teable Projeyi açın ve AI Chat'i başlatın.
3. `/` yazın, **Connect Everything**'i seçin ve API anahtarıyla Workspace ID'yi sağlayın.
4. Teable AI'dan SmartSuite çözümünü taşımasını isteyin, ardından sonucu gözden geçirin.
diff --git a/tr/basic/ai/overview.mdx b/tr/basic/ai/overview.mdx
index 6fa8b4c9..4e836603 100644
--- a/tr/basic/ai/overview.mdx
+++ b/tr/basic/ai/overview.mdx
@@ -45,6 +45,6 @@ Teable, verilerinizle daha akıllı çalışmanıza yardımcı olmak için güç
1. **AI'ı etkinleştirin** (yalnızca kendi sunucunuzda barındırılan sürüm) - Teable Cloud, kullanıma hazır yerleşik AI ile birlikte gelir. Kendi sunucusunda barındıran kullanıcılar önce [AI Ayarları](/tr/basic/admin-panel/ai-setting) bölümünü tamamlamalıdır. Kendi modellerinizi bağlamak istiyorsanız [Özel AI Modeli](/tr/basic/ai/custom-model) ile devam edin.
2. **AI Chat'i kullanın** - Verileriniz hakkında sorular sorun veya grafikler oluşturun
-3. **Uygulamalar geliştirin** - Basit bir istemle Veritabanınızı bir web uygulamasına dönüştürün
+3. **Uygulamalar geliştirin** - Basit bir istemle Projenizi bir web uygulamasına dönüştürün
4. **AI Alanları oluşturun** - Verilerinizi otomatik olarak işlemek için AI destekli Alanlar ekleyin
5. **Otomasyonlar geliştirin** - İş akışlarınızda AI ile oluşturma ve Komut dosyası çalıştırma eylemlerini kullanın
diff --git a/tr/basic/ai/teable-skill.mdx b/tr/basic/ai/teable-skill.mdx
index dcfa08de..2a3f4c39 100644
--- a/tr/basic/ai/teable-skill.mdx
+++ b/tr/basic/ai/teable-skill.mdx
@@ -24,7 +24,7 @@ Skill yüklendikten sonra aşağıdaki istemleri deneyin.
```text Basit Başlangıç İstemleri wrap
- {Veritabanı URL'sini yapıştırın} içinde basit bir CRM tablosu oluştur.
+ {Proje URL'sini yapıştırın} içinde basit bir CRM tablosu oluştur.
```
```text Yerel Dosyalar → Teable wrap
diff --git a/tr/basic/authority-matrix.mdx b/tr/basic/authority-matrix.mdx
index 8075f7f2..7caa5905 100644
--- a/tr/basic/authority-matrix.mdx
+++ b/tr/basic/authority-matrix.mdx
@@ -1,12 +1,12 @@
---
title: "Genel Bakış"
-description: "Aynı veritabanındaki farklı ekipler için erişim kapsamları belirleyerek üyelerin yalnızca ihtiyaç duydukları verileri görmesini, düzenlemesini veya dışa aktarmasını sağlayın."
+description: "Aynı projedeki farklı ekipler için erişim kapsamları belirleyerek üyelerin yalnızca ihtiyaç duydukları verileri görmesini, düzenlemesini veya dışa aktarmasını sağlayın."
---
{/* mintlify-resync: 2026-05-28 */}
Business planı ve üzerindeki planlarda kullanılabilir
-Satış, finans, operasyon ve yönetim ekipleri aynı veritabanını paylaştığında izinler; kimlerin veritabanına girebileceğini, hangi verileri görebileceğini veya düzenleyebileceğini ve verileri içe ya da dışa aktarıp aktaramayacağını belirler. Yetki Matrisi, ekiplerin verileri tek yerde tutarken erişimi sorumluluklara göre ayırmasına yardımcı olur.
+Satış, finans, operasyon ve yönetim ekipleri aynı projeyi paylaştığında izinler; kimlerin projeye girebileceğini, hangi verileri görebileceğini veya düzenleyebileceğini ve verileri içe ya da dışa aktarıp aktaramayacağını belirler. Yetki Matrisi, ekiplerin verileri tek yerde tutarken erişimi sorumluluklara göre ayırmasına yardımcı olur.
Üyelere veya departmanlara özel roller atayabilir, ardından her rolün yalnızca ihtiyaç duyduğu tablolara, uygulamalara ve iş akışlarına erişmesine izin verebilirsiniz. Tablolar için görünür görünümleri, görünür kayıtları, düzenlenebilir alanları ve içe ya da dışa aktarma izinlerini de sınırlayabilirsiniz. Örneğin satış ekibi kendi müşterilerini yönetebilir, finans ekibi faturalandırma alanlarını görebilir ve yönetim ekibi veri kümesinin tamamını görüntüleyebilir.
@@ -17,7 +17,7 @@ Satış, finans, operasyon ve yönetim ekipleri aynı veritabanını paylaştı
| Departman düzeyinde erişim | Satış ekibi müşteri kayıtlarını yönetirken finans ekibi yalnızca faturalandırma alanlarını görebilir. |
| Atanan kişiye dayalı kayıtlar | Satış temsilcileri yalnızca kendilerine atanan kayıtları görüntüleyip güncelleyebilir. |
| Kısıtlı veri girişi | Üyeler mevcut kayıtları düzenlemeden veya silmeden yeni kayıtlar oluşturabilir. |
-| Paylaşılan bir veritabanındaki hassas alanlar | Üyeler ödeme veya maliyet alanlarını görmeden sipariş kayıtlarını görüntüleyebilir. |
+| Paylaşılan bir projedeki hassas alanlar | Üyeler ödeme veya maliyet alanlarını görmeden sipariş kayıtlarını görüntüleyebilir. |
| Denetimli uygulamalar ve iş akışları | Roller belirli uygulamaları veya iş akışlarını açabilirken yetkisiz düğümler gizli kalır. |
## İzinler Nasıl Çalışır?
@@ -34,7 +34,7 @@ Rol listesi bir `Yöneticiler` bölümü ve bir `Özel roller` bölümü içerir
className="docs-screenshot"
/>
-Özel bir rol oluşturmak için `Rol ekle` seçeneğini kullanın. Rol ayrıntıları sayfasında ortak çalışanları atayın, kısa bir açıklama yazın ve veritabanındaki her düğüm için erişimi yapılandırın:
+Özel bir rol oluşturmak için `Rol ekle` seçeneğini kullanın. Rol ayrıntıları sayfasında ortak çalışanları atayın, kısa bir açıklama yazın ve projedeki her düğüm için erişimi yapılandırın:
Temel Alan ve veritabanı izin düzeyleri hakkında bilgi edinmek için [İş Birliği İzinleri](/tr/basic/space/space-permission) sayfasına bakın.
+Temel Alan ve proje izin düzeyleri hakkında bilgi edinmek için [İş Birliği İzinleri](/tr/basic/space/space-permission) sayfasına bakın.
diff --git a/tr/basic/authority-matrix/authority-matrix-practical-guide.mdx b/tr/basic/authority-matrix/authority-matrix-practical-guide.mdx
index d26ffad3..4d11905f 100644
--- a/tr/basic/authority-matrix/authority-matrix-practical-guide.mdx
+++ b/tr/basic/authority-matrix/authority-matrix-practical-guide.mdx
@@ -4,7 +4,7 @@ description: "Paylaşılan verilere, sahipliğe dayalı kayıt erişimine ve kı
---
{/* mintlify-resync: 2026-05-28 */}
-Bu kılavuzda üç tablodan oluşan bir satış veritabanı kullanılır: `Müşteriler`, `Satış Siparişleri` ve `Ürünler`. Amaç, veritabanının tamamını açığa çıkarmadan her rolün ihtiyaç duyduğu verilerle çalışmasını sağlamaktır.
+Bu kılavuzda üç tablodan oluşan bir satış proje kullanılır: `Müşteriler`, `Satış Siparişleri` ve `Ürünler`. Amaç, projenin tamamını açığa çıkarmadan her rolün ihtiyaç duyduğu verilerle çalışmasını sağlamaktır.
| Rol | Erişim hedefi |
| --- | --- |
@@ -24,7 +24,7 @@ Bu kılavuzda üç tablodan oluşan bir satış veritabanı kullanılır: `Müş
- Veritabanında Yetki Matrisi sayfasını açın ve ana anahtarı etkinleştirin. Bu işlemi yapan kullanıcı yönetici olarak eklenir.
+ Projede Yetki Matrisi sayfasını açın ve ana anahtarı etkinleştirin. Bu işlemi yapan kullanıcı yönetici olarak eklenir.
`Rol ekle`'ye tıklayın ve `Satış Direktörü`, `Satış Temsilcisi` ve `Veri Giriş Görevlisi` rollerini oluşturun.
diff --git a/tr/basic/automation.mdx b/tr/basic/automation.mdx
index 2ec591af..3bf8d76c 100644
--- a/tr/basic/automation.mdx
+++ b/tr/basic/automation.mdx
@@ -65,8 +65,8 @@ Yeniden çalıştırma denemeleri yeniden deneme olarak işaretlenir ve özgün
| Öğe | Sınır |
|---|---|
-| E-posta gönderim hızı | Veritabanı başına saniyede 5 |
-| Webhook alma hızı | Veritabanı başına saniyede 50, iş akışı başına saniyede 2 |
+| E-posta gönderim hızı | Proje başına saniyede 5 |
+| Webhook alma hızı | Proje başına saniyede 50, iş akışı başına saniyede 2 |
| Webhook yük boyutu | 4 MB |
| Çalıştırma kotası ve geçmişi saklama süresi | Plana göre değişir |
@@ -82,7 +82,7 @@ Yeniden çalıştırma denemeleri yeniden deneme olarak işaretlenir ve özgün
Teable Cloud, günlük kullanımda büyük artış veya kısa sürede ani yoğunluk gibi olağan dışı kullanımlarda kritik bildirimler de gönderebilir. Sistem son günlük ve saatlik çalıştırma örüntülerini kullanır; kesin eşikler değişebilir.
- Bildirim, **Alan Ayarları** → **Faturalandırma** bölümünü açar. Kullanılabilir olduğunda en fazla çalıştırmaya katkıda bulunan iş akışını ve Veritabanını gösterir. Kota hatırlatmaları plan sınırınıza dahil edilen çalıştırmalara dayanır; olağan dışı kullanım denetimleri **başarılı**, **başarısız** veya **beklemede** durumundaki son çalıştırmaları da değerlendirebilir.
+ Bildirim, **Alan Ayarları** → **Faturalandırma** bölümünü açar. Kullanılabilir olduğunda en fazla çalıştırmaya katkıda bulunan iş akışını ve Projeyi gösterir. Kota hatırlatmaları plan sınırınıza dahil edilen çalıştırmalara dayanır; olağan dışı kullanım denetimleri **başarılı**, **başarısız** veya **beklemede** durumundaki son çalıştırmaları da değerlendirebilir.
Kullanım beklediğiniz gibiyse ek otomasyon kotası satın almayı veya planınızı değiştirmeyi değerlendirin. Beklenmedik bir kullanım varsa en yoğun iş akışını inceleyip ilgili otomasyonu ayarlayın ya da duraklatın.
diff --git a/tr/basic/automation/actions/communication/send-email-overview.mdx b/tr/basic/automation/actions/communication/send-email-overview.mdx
index d28d78b0..6b0e1095 100644
--- a/tr/basic/automation/actions/communication/send-email-overview.mdx
+++ b/tr/basic/automation/actions/communication/send-email-overview.mdx
@@ -37,7 +37,7 @@ E-postalar varsayılan olarak Teable'ın yerleşik posta hizmetinden gönderilir
\* **Kime** veya **BCC** alanlarından en az biri zorunludur.
-**Hız sınırı:** Veritabanı başına saniyede 5 e-posta.
+**Hız sınırı:** Proje başına saniyede 5 e-posta.
## Nasıl yapılandırılır?
diff --git a/tr/basic/automation/actions/records/create-record.mdx b/tr/basic/automation/actions/records/create-record.mdx
index 20c2e41f..81c2f454 100644
--- a/tr/basic/automation/actions/records/create-record.mdx
+++ b/tr/basic/automation/actions/records/create-record.mdx
@@ -30,7 +30,7 @@ Belirtilen tabloda yeni bir kayıt oluşturur. Önceki adımlardaki verileri yen
## Nasıl yapılandırılır?
1. İş akışınıza bir **Kayıt Oluştur** eylemi ekleyin.
-2. Kaydın oluşturulmasını istediğiniz **Tabloyu** seçin. Varsayılan olarak bu, aynı Veritabanındaki bir tablodur; ancak başka bir Veritabanındaki tabloyu hedeflemek için [Veritabanları Arası Erişim](/tr/basic/automation/actions/records/cross-base) özelliğini kullanabilirsiniz.
+2. Kaydın oluşturulmasını istediğiniz **Tabloyu** seçin. Varsayılan olarak bu, aynı Projedeki bir tablodur; ancak başka bir Projedeki tabloyu hedeflemek için [Projeler Arası Erişim](/tr/basic/automation/actions/records/cross-base) özelliğini kullanabilirsiniz.
3. Alan eşleme bölümü, hedef tablodaki tüm alanları gösterir. Doldurmak istediğiniz her alan için:
- **Sabit değer:** Doğrudan alana bir değer yazın (ör. Durum alanı için "Yeni" yazın).
- **Dinamik değer:** Önceki bir adımdaki değişkeni eklemek için alanın yanındaki **+** düğmesine tıklayın. Örneğin tetikleyen kaydın adını kopyalamak için tetikleyicinin "Ad" alanını ekleyin.
@@ -68,11 +68,11 @@ Bu, eylemleri zincirlemeniz gerektiğinde kullanışlıdır. Örneğin bir kayı
- Bu eylemi [Döngü (Toplu)](../logic/loop-run) ile birleştirerek toplu kayıt oluşturabilirsiniz. Örneğin bir tablodan 50 kayıt alıp başka bir tabloda karşılık gelen 50 kayıt oluşturabilirsiniz.
- Eşlemediğiniz alanlar tablonun varsayılan değerlerini (varsa) kullanır veya boş kalır.
- Bağlantılı kayıt alanları görünen değerleri değil, Kayıt Kimliklerini bekler. Bir kayda bağlantı vermek istiyorsanız kaydın adı yerine Kayıt Kimliğini ilettiğinizden emin olun.
-- Hedef tablo otomasyonun bulunduğu Veritabanından farklı bir Veritabanındaysa [Veritabanları Arası Erişim](/tr/basic/automation/actions/records/cross-base) özelliğini kullanın.
+- Hedef tablo otomasyonun bulunduğu Projeden farklı bir Projedeyse [Projeler Arası Erişim](/tr/basic/automation/actions/records/cross-base) özelliğini kullanın.
## İlgili konular
- [Kaydı güncelle](/tr/basic/automation/actions/records/update-record) — yeni kayıt oluşturmak yerine mevcut kayıtları değiştirin
- [Kayıtları getir](/tr/basic/automation/actions/records/get-records) — yeni kayıt oluştururken girdi olarak kullanılacak kayıtları alın
-- [Veritabanları arası erişim](/tr/basic/automation/actions/records/cross-base) — geçerli Veritabanının dışındaki tablolarda kayıt oluşturun
+- [Projeleri arası erişim](/tr/basic/automation/actions/records/cross-base) — geçerli Projenin dışındaki tablolarda kayıt oluşturun
- [Döngü (toplu)](../logic/loop-run) — tek eylem adımında birden fazla kayıt oluşturun
diff --git a/tr/basic/automation/actions/records/cross-base.mdx b/tr/basic/automation/actions/records/cross-base.mdx
index c7f05bfa..541837df 100644
--- a/tr/basic/automation/actions/records/cross-base.mdx
+++ b/tr/basic/automation/actions/records/cross-base.mdx
@@ -1,6 +1,6 @@
---
-title: "Veritabanları arası erişim"
-description: "Tek bir iş akışında farklı Veritabanlarındaki verileri okuyun ve yazın"
+title: "Projeleri arası erişim"
+description: "Tek bir iş akışında farklı Projelerdeki verileri okuyun ve yazın"
---
{/* mintlify-resync: 2026-05-26 */}
@@ -10,74 +10,74 @@ Otomasyon oluşturmak için Komut dosyası çalıştır'ı kullanmanızı kesinl
Lütfen unutmayın: eylemleri elle eklerseniz AI daha sonra bunları tanıyamaz veya değiştiremez.
-Otomasyon eylemleri varsayılan olarak iş akışının bulunduğu Veritabanındaki tablolar üzerinde çalışır. Veritabanları Arası Erişim, bir iş akışının başka bir Veritabanındaki verileri okumasını ve bu Veritabanına veri yazmasını sağlar. Departmanları, projeleri veya veri kümelerini kapsayan iş akışlarında kullanın.
+Otomasyon eylemleri varsayılan olarak iş akışının bulunduğu Projedeki tablolar üzerinde çalışır. Projeler Arası Erişim, bir iş akışının başka bir Projedeki verileri okumasını ve bu Projeye veri yazmasını sağlar. Departmanları, projeleri veya veri kümelerini kapsayan iş akışlarında kullanın.
-Örneğin Satış Veritabanındaki bir otomasyon, ayrı bir Operasyon Veritabanında sipariş karşılama kaydı oluşturabilir; bir raporlama iş akışı da birden fazla proje Veritabanındaki verileri tek bir özette birleştirebilir.
+Örneğin Satış Projedeki bir otomasyon, ayrı bir Operasyon Projede sipariş karşılama kaydı oluşturabilir; bir raporlama iş akışı da birden fazla proje Projedeki verileri tek bir özette birleştirebilir.
## Desteklenen eylemler
-| Eylem | Veritabanları Arası Destek |
+| Eylem | Projeler Arası Destek |
|---|---|
| Kayıt Oluştur | Evet |
| Kaydı Güncelle | Evet |
| Kayıtları Getir | Evet |
-Bunlar kayıt odaklı üç eylemdir. Diğer eylemler (E-posta Gönder, HTTP İsteği vb.) belirli bir tabloyu hedeflemediğinden Veritabanları arası erişime ihtiyaç duymaz.
+Bunlar kayıt odaklı üç eylemdir. Diğer eylemler (E-posta Gönder, HTTP İsteği vb.) belirli bir tabloyu hedeflemediğinden Projeleri arası erişime ihtiyaç duymaz.
## Nasıl yapılandırılır?
1. İş akışınızda desteklenen bir eylemi (Kayıt Oluştur, Kaydı Güncelle veya Kayıtları Getir) açın.
-2. **Tablo** seçicinin yanındaki **Veritabanları Arası Erişim** seçeneğine tıklayın.
-3. Hesabınızın erişebildiği tüm Alanları ve Veritabanlarını gösteren bir panel açılır. Hedef **Alanı**, ardından hedef **Veritabanını** seçin.
-4. Bu Veritabanındaki **Tabloyu** seçin. Eylem destekliyorsa belirli bir **Görünüm** de seçebilirsiniz.
-5. Alanları eşleyin ve eylemi her zamanki gibi yapılandırın. Alan listesi artık geçerli Veritabanının alanlarını değil, hedef tablonun alanlarını gösterir.
+2. **Tablo** seçicinin yanındaki **Projeler Arası Erişim** seçeneğine tıklayın.
+3. Hesabınızın erişebildiği tüm Alanları ve Projeleri gösteren bir panel açılır. Hedef **Alanı**, ardından hedef **Projeyi** seçin.
+4. Bu Projedeki **Tabloyu** seçin. Eylem destekliyorsa belirli bir **Görünüm** de seçebilirsiniz.
+5. Alanları eşleyin ve eylemi her zamanki gibi yapılandırın. Alan listesi artık geçerli Projenin alanlarını değil, hedef tablonun alanlarını gösterir.
6. Eylemi kaydedin.
## Somut örnek: Satıştan Sipariş Karşılamaya
-İki Veritabanınız olduğunu düşünün:
+İki Projeniz olduğunu düşünün:
-- **Satış Veritabanı** — satış ekibinin tamamlanan anlaşmaları izlediği bir "Anlaşmalar" tablosu içerir.
-- **Operasyon Veritabanı** — operasyon ekibinin sevkiyatı yönettiği bir "Sipariş Karşılama" tablosu içerir.
+- **Satış Proje** — satış ekibinin tamamlanan anlaşmaları izlediği bir "Anlaşmalar" tablosu içerir.
+- **Operasyon Proje** — operasyon ekibinin sevkiyatı yönettiği bir "Sipariş Karşılama" tablosu içerir.
Bir anlaşma tamamlandığında otomatik olarak sipariş karşılama kaydı oluşturmak istiyorsunuz:
-1. **Tetikleyici:** Satış Veritabanında "Kayıt koşullarla eşleştiğinde" tetikleyicisini şu filtreyle kullanın: `Aşama`, `Kazanılarak Tamamlandı` değerine eşittir.
-2. **Eylem:** Operasyon Veritabanı > Sipariş Karşılama tablosunu gösteren Veritabanları Arası Erişim ile Kayıt Oluştur.
+1. **Tetikleyici:** Satış Projede "Kayıt koşullarla eşleştiğinde" tetikleyicisini şu filtreyle kullanın: `Aşama`, `Kazanılarak Tamamlandı` değerine eşittir.
+2. **Eylem:** Operasyon Proje > Sipariş Karşılama tablosunu gösteren Projeler Arası Erişim ile Kayıt Oluştur.
3. **Alan eşleme:** Anlaşmanın Müşteri Adı, Ürün, Miktar ve Teslimat Adresi değerlerini Sipariş Karşılama tablosundaki karşılık gelen alanlarla eşleyin.
-Artık her anlaşma tamamlandığında Operasyon Veritabanında otomatik olarak bir sipariş karşılama kaydı oluşturulur; elle devir gerekmez.
+Artık her anlaşma tamamlandığında Operasyon Projede otomatik olarak bir sipariş karşılama kaydı oluşturulur; elle devir gerekmez.
## İzin modeli
-İş akışı güncellemelerini oluşturduğunuzda, düzenlediğinizde veya uyguladığınızda Teable, Veritabanları arası her eylemi geçerli düzenleyicinin izinlerine göre denetler:
+İş akışı güncellemelerini oluşturduğunuzda, düzenlediğinizde veya uyguladığınızda Teable, Projeleri arası her eylemi geçerli düzenleyicinin izinlerine göre denetler:
-| Eylem | Hedef Veritabanında zorunlu izin |
+| Eylem | Hedef Projede zorunlu izin |
|---|---|
| Kayıtları Getir | Alanları ve kayıtları okuma |
| Kayıt Oluştur | Alanları ve kayıtları okumanın yanı sıra kayıt oluşturma |
| Kaydı Güncelle | Alanları ve kayıtları okumanın yanı sıra kayıtları güncelleme |
-Etkin iş akışı çalıştırmaları hedef Veritabanı için Teable'ın otomasyon çalışma zamanı kimliğini kullanır. Veritabanları arası eylemle oluşturulan veya güncellenen kayıtlar, kayıt meta verilerinde ve denetim yüzeylerinde **Otomasyon Robotu** olarak görünür.
+Etkin iş akışı çalıştırmaları hedef Proje için Teable'ın otomasyon çalışma zamanı kimliğini kullanır. Projeleri arası eylemle oluşturulan veya güncellenen kayıtlar, kayıt meta verilerinde ve denetim yüzeylerinde **Otomasyon Robotu** olarak görünür.
### Erişim değiştiğinde ne olur?
-Geçerli düzenleyici hedef Veritabanında gerekli izne sahip değilse Teable, bu düzenleyicinin söz konusu Veritabanını gösteren Veritabanları arası eylemler eklemesini veya değiştirmesini engeller. Bir taslakta düzenleyicinin erişemediği Veritabanları arası eylemler zaten varsa Teable bu taslağın uygulanmasını da engeller. Hâlihazırda etkin olan sürüm çalışmaya devam eder; Teable, bir sonraki düzenleme veya uygulama sırasında izinleri yeniden denetler.
+Geçerli düzenleyici hedef Projede gerekli izne sahip değilse Teable, bu düzenleyicinin söz konusu Projeyi gösteren Projeleri arası eylemler eklemesini veya değiştirmesini engeller. Bir taslakta düzenleyicinin erişemediği Projeleri arası eylemler zaten varsa Teable bu taslağın uygulanmasını da engeller. Hâlihazırda etkin olan sürüm çalışmaya devam eder; Teable, bir sonraki düzenleme veya uygulama sırasında izinleri yeniden denetler.
Bir iş akışını düzenlerken veya uygularken oluşan izin hatasını gidermek için:
-1. Her iki Veritabanına da erişimi olan birinden iş akışını düzenleyip uygulamasını isteyin.
-2. Ya da hedef Veritabanındaki gerekli izinleri geri yükleyip iş akışını yeniden uygulayın.
+1. Her iki Projeye da erişimi olan birinden iş akışını düzenleyip uygulamasını isteyin.
+2. Ya da hedef Projedeki gerekli izinleri geri yükleyip iş akışını yeniden uygulayın.
## İpuçları
-- Veritabanları arası erişim, farklı **Alanlardaki** Veritabanlarına ulaşabilir. İş akışını yapılandıran veya uygulayan düzenleyici, hedef Veritabanında gerekli izinlere sahip olmalıdır.
-- Alanları Veritabanları arasında eşlerken alan türleri uyumlu olmalıdır. Örneğin bir metin alanını ek alanıyla eşleyemezsiniz.
-- Hedef Veritabanının yapısını değiştirirseniz (tabloları yeniden adlandırma, alanları silme) bu tablo ve alanlara başvuran Veritabanları arası eylemler bozulur. Yapısal değişikliklerin ardından iş akışınızı güncelleyin.
-- Karmaşık Veritabanları arası iş akışlarını düzenli tutmak için otomasyonlarınızı tek bir "merkez" Veritabanında toplamayı değerlendirin.
+- Projeleri arası erişim, farklı **Alanlardaki** Projelere ulaşabilir. İş akışını yapılandıran veya uygulayan düzenleyici, hedef Projede gerekli izinlere sahip olmalıdır.
+- Alanları Projeleri arasında eşlerken alan türleri uyumlu olmalıdır. Örneğin bir metin alanını ek alanıyla eşleyemezsiniz.
+- Hedef Projenin yapısını değiştirirseniz (tabloları yeniden adlandırma, alanları silme) bu tablo ve alanlara başvuran Projeleri arası eylemler bozulur. Yapısal değişikliklerin ardından iş akışınızı güncelleyin.
+- Karmaşık Projeleri arası iş akışlarını düzenli tutmak için otomasyonlarınızı tek bir "merkez" Projede toplamayı değerlendirin.
## İlgili konular
-- [Kayıt oluştur](/tr/basic/automation/actions/records/create-record) — geçerli veya başka bir Veritabanında kayıt oluşturun
-- [Kaydı güncelle](/tr/basic/automation/actions/records/update-record) — geçerli veya başka bir Veritabanındaki kayıtları güncelleyin
-- [Kayıtları getir](/tr/basic/automation/actions/records/get-records) — geçerli veya başka bir Veritabanındaki kayıtları alın
+- [Kayıt oluştur](/tr/basic/automation/actions/records/create-record) — geçerli veya başka bir Projede kayıt oluşturun
+- [Kaydı güncelle](/tr/basic/automation/actions/records/update-record) — geçerli veya başka bir Projedeki kayıtları güncelleyin
+- [Kayıtları getir](/tr/basic/automation/actions/records/get-records) — geçerli veya başka bir Projedeki kayıtları alın
diff --git a/tr/basic/automation/actions/records/get-records.mdx b/tr/basic/automation/actions/records/get-records.mdx
index b474ddd6..91b8e7bd 100644
--- a/tr/basic/automation/actions/records/get-records.mdx
+++ b/tr/basic/automation/actions/records/get-records.mdx
@@ -33,7 +33,7 @@ Bir tablodaki kayıtları alıp dizi olarak döndürür. Sonraki adımlarda sonu
## Nasıl yapılandırılır?
1. İş akışınıza bir **Kayıtları Getir** eylemi ekleyin.
-2. Sorgulamak istediğiniz **Tabloyu** seçin. Tablo farklı bir Veritabanındaysa [Veritabanları Arası Erişim](/tr/basic/automation/actions/records/cross-base) özelliğini kullanın.
+2. Sorgulamak istediğiniz **Tabloyu** seçin. Tablo farklı bir Projedeyse [Projeler Arası Erişim](/tr/basic/automation/actions/records/cross-base) özelliğini kullanın.
3. (İsteğe bağlı) Görünümün filtre, sıralama ve alan görünürlüğü ayarlarını devralmak için bir **Görünüm** seçin.
4. (İsteğe bağlı) Sonuçları daraltmak için **Filtre** koşulları ekleyin. Örneğin `Durum`, `Etkin` değerine eşit ve `Son Tarih` bugünden önce olabilir.
5. (İsteğe bağlı) Sayfalandırma için **Atla** ve **Al** değerlerini ayarlayın. Örneğin ilk 100 kaydı almak için Atla 0 ve Al 100 değerlerini kullanın.
@@ -80,11 +80,11 @@ Büyük bir tablonun tamamını işlemek için giderek artan Atla değerlerine s
- Kayıtları Getir hiçbir veriyi değiştirmez; salt okunurdur.
- Sorgu sıfır kayıt döndürürse sonuçlara başvuran sonraki adımlar boş bir dizi alır. İş akışınızın bu durumu uygun şekilde ele aldığından emin olun (ör. sonuç yokken "sonuçlarınız burada" yazan bir e-posta göndermeyin).
- Kayıtları Getir'deki filtreler görünüm filtreleriyle aynı şekilde çalışır: koşulları VE/VEYA mantığıyla birleştirebilirsiniz.
-- Veritabanları Arası Erişim kullanılırken sorgu, iş akışını oluşturan kişinin izinleriyle çalışır. Oluşturan kişi hedef Veritabanına erişimini kaybederse adım başarısız olur.
+- Projeler Arası Erişim kullanılırken sorgu, iş akışını oluşturan kişinin izinleriyle çalışır. Oluşturan kişi hedef Projeye erişimini kaybederse adım başarısız olur.
## İlgili konular
-- [Veritabanları arası erişim](/tr/basic/automation/actions/records/cross-base) — diğer Veritabanlarındaki tabloları sorgulayın
+- [Projeleri arası erişim](/tr/basic/automation/actions/records/cross-base) — diğer Projelerdeki tabloları sorgulayın
- [Döngü (toplu)](../logic/loop-run) — sonuç dizisi üzerinde yineleme yapın
- [Kayıt oluştur](/tr/basic/automation/actions/records/create-record) — alınan verilere göre kayıt oluşturun
- [Kaydı güncelle](/tr/basic/automation/actions/records/update-record) — Kayıtları Getir ile bulunan kayıtları güncelleyin
diff --git a/tr/basic/automation/actions/records/update-record.mdx b/tr/basic/automation/actions/records/update-record.mdx
index 1da75b51..c2e8e89b 100644
--- a/tr/basic/automation/actions/records/update-record.mdx
+++ b/tr/basic/automation/actions/records/update-record.mdx
@@ -93,11 +93,11 @@ Otomasyonunuz **Kayıt güncellendiğinde** tetikleyicisiyle başlatılıyor ve
- Bir kaydı güncellemek aynı tabloyu izleyen diğer otomasyonları tetikleyebilir. Zincirleme etkileri göz önünde bulundurun.
- Birden fazla kaydı virgülle ayrılmış kimliklerle güncellediğinizde tüm kayıtlar aynı alan değerlerini alır. Her kayıtta farklı değerler kullanmak için bunun yerine bir [Döngü](../logic/loop-run) adımı kullanın.
- Bir alanı temizlemek istiyorsanız alanı boş bir değerle eşleyin. Yalnızca eşlemeden bırakmak alanı *temizlemez*.
-- Farklı bir Veritabanındaki tabloda bulunan kayıtları güncellemek için [Veritabanları Arası Erişim](/tr/basic/automation/actions/records/cross-base) özelliğini kullanın.
+- Farklı bir Projedeki tabloda bulunan kayıtları güncellemek için [Projeler Arası Erişim](/tr/basic/automation/actions/records/cross-base) özelliğini kullanın.
## İlgili konular
- [Kayıt oluştur](/tr/basic/automation/actions/records/create-record) — mevcut kayıtları değiştirmek yerine yeni kayıtlar ekleyin
- [Kayıtları getir](/tr/basic/automation/actions/records/get-records) — güncellemeden önce kimliklerini bulmak için kayıtları alın
-- [Veritabanları arası erişim](/tr/basic/automation/actions/records/cross-base) — geçerli Veritabanının dışındaki tablolarda bulunan kayıtları güncelleyin
+- [Projeleri arası erişim](/tr/basic/automation/actions/records/cross-base) — geçerli Projenin dışındaki tablolarda bulunan kayıtları güncelleyin
- [Döngü (toplu)](../logic/loop-run) — birden fazla kaydı farklı değerlerle güncelleyin
diff --git a/tr/basic/automation/ai/scripting/runscript.mdx b/tr/basic/automation/ai/scripting/runscript.mdx
index 2d449058..05bc1f6e 100644
--- a/tr/basic/automation/ai/scripting/runscript.mdx
+++ b/tr/basic/automation/ai/scripting/runscript.mdx
@@ -210,7 +210,7 @@ output.set("records", data);
### Komut dosyasından AI çağırma
-`POST /api/automation/runtime/ai`, Veritabanınızın AI modeline bir istem gönderir. Veritabanı otomasyon bağlamından alındığı için Veritabanı kimliği gerekmez. Gövde `prompt` değerini ve isteğe bağlı `attachments`, `modelKey`, `temperature` ve `outputType` değerlerini alır; yanıt `{ "message": ... }` biçimindedir.
+`POST /api/automation/runtime/ai`, Projenizin AI modeline bir istem gönderir. Proje otomasyon bağlamından alındığı için Proje kimliği gerekmez. Gövde `prompt` değerini ve isteğe bağlı `attachments`, `modelKey`, `temperature` ve `outputType` değerlerini alır; yanıt `{ "message": ... }` biçimindedir.
Ekler, her çağrıda en fazla 10 adet olmak üzere `{ url, mimetype, name }` öğeleridir; her biri 20 MB'tan küçük olmalı ve 30 saniye içinde indirilmelidir. Görüntüler, PDF'ler ve Office belgeleri desteklenir. Varsayılan sohbet modeli görüntüleri ve benzer ekleri okuyamayabilir; bu nedenle dosya gönderirken `modelKey` iletin. Her çağrı kredi tüketir.
diff --git a/tr/basic/automation/examples/api-automation.mdx b/tr/basic/automation/examples/api-automation.mdx
index 95306563..5a33528b 100644
--- a/tr/basic/automation/examples/api-automation.mdx
+++ b/tr/basic/automation/examples/api-automation.mdx
@@ -17,7 +17,7 @@ AI, iş akışının tamamını otomatik olarak oluşturur. Oluşturulan komut d
## Ön koşullar
- Bir Kişisel Erişim Belirteci (PAT). Bkz. [Erişim Belirteci](/tr/api-doc/token).
-- Veritabanı kimliğiniz, tablo kimliğiniz ve alan kimlikleriniz. Bkz. [Kimlikleri Alma](/tr/api-doc/get-id).
+- Proje kimliğiniz, tablo kimliğiniz ve alan kimlikleriniz. Bkz. [Kimlikleri Alma](/tr/api-doc/get-id).
## Yardımcı İşlevler
@@ -74,7 +74,7 @@ await api("PUT", `/base/${baseId}/workflow/${wf.id}/active`, {
## En İyi Uygulamalar
-- En az ayrıcalığa sahip PAT'yi kullanın; erişimi yalnızca ihtiyaç duyduğu Alanlar ve Veritabanlarıyla sınırlandırın.
+- En az ayrıcalığa sahip PAT'yi kullanın; erişimi yalnızca ihtiyaç duyduğu Alanlar ve Projelerle sınırlandırın.
- Belirteçleri ortam değişkenlerinde saklayın, asla kod içine sabitlemeyin.
- Etkinleştirmeden önce doğrulama yapmak için **Düğümü Test Et**'i kullanın.
- [Otomasyon API Başvurusu](/tr/api-reference/automation/put-base-workflow-action) belgesinin tamamına bakın.
diff --git a/tr/basic/automation/examples/cross-base-sync.mdx b/tr/basic/automation/examples/cross-base-sync.mdx
index cccab976..327fefe4 100644
--- a/tr/basic/automation/examples/cross-base-sync.mdx
+++ b/tr/basic/automation/examples/cross-base-sync.mdx
@@ -1,6 +1,6 @@
---
-title: "Kayıtları birden fazla Veritabanında eşitlenmiş tutma"
-description: "Yeni veya güncellenmiş kayıtları Veritabanları Arası Erişim ile başka bir Veritabanına otomatik olarak çoğaltın"
+title: "Kayıtları birden fazla Projede eşitlenmiş tutma"
+description: "Yeni veya güncellenmiş kayıtları Projeler Arası Erişim ile başka bir Projeye otomatik olarak çoğaltın"
---
Otomasyon örneklerini doğrudan AI Chat'te oluşturmanızı öneririz. İstediğiniz iş akışını açıklamanız yeterlidir; AI tetikleyici, eylemler, komut dosyası ve yapılandırma dahil tüm kurulumu sizin için tamamlar.
@@ -9,18 +9,18 @@ description: "Yeni veya güncellenmiş kayıtları Veritabanları Arası Erişim
Tablonuzun sağ kenar çubuğunda AI Chat'i açın ve AI'a ne istediğinizi söyleyin. Örneğin şöyle diyebilirsiniz:
-*"Satış Veritabanında yeni bir sipariş oluşturulduğunda Sipariş Karşılama Veritabanında sipariş kimliğini, müşteri adını ve tutarı içeren, durumu Beklemede olarak ayarlanmış eşleşen bir kayıt oluştur"*
+*"Satış Projede yeni bir sipariş oluşturulduğunda Sipariş Karşılama Projede sipariş kimliğini, müşteri adını ve tutarı içeren, durumu Beklemede olarak ayarlanmış eşleşen bir kayıt oluştur"*
AI, iş akışının tamamını otomatik olarak oluşturur. Oluşturulan komut dosyasını inceleyebilir, gerçek verilerle test edebilir ve hazır olduğunuzda iş akışını etkinleştirebilirsiniz.
## Elle yapılandırma
-1. **Satış** Veritabanında **Kayıt Oluşturulduğunda** tetikleyicisiyle bir **iş akışı oluşturun**.
+1. **Satış** Projede **Kayıt Oluşturulduğunda** tetikleyicisiyle bir **iş akışı oluşturun**.
2. **Siparişler** tablonuzu seçin.
3. **Test et**'e tıklayın.
4. **Eylem ekleyin** → **Kayıt Oluştur**.
-5. Tablo seçicinin yanındaki **Veritabanları Arası Erişim** seçeneğine tıklayın.
-6. **Sipariş Karşılama** Veritabanına gidip **Siparişler** tablosunu seçin.
+5. Tablo seçicinin yanındaki **Projeler Arası Erişim** seçeneğine tıklayın.
+6. **Sipariş Karşılama** Projeye gidip **Siparişler** tablosunu seçin.
7. Alanları eşleyin:
- Sipariş Kimliği → tetikleyicinin Sipariş Kimliği (**+** üzerinden)
- Müşteri → tetikleyicinin Müşteri değeri
@@ -31,6 +31,6 @@ AI, iş akışının tamamını otomatik olarak oluşturur. Oluşturulan komut d
## İki Yönlü Eşitleme
Güncellemeleri her iki yönde eşitlemek için:
-1. **Sipariş Karşılama** Veritabanında ikinci bir iş akışı oluşturun.
-2. Satış Veritabanını gösteren Veritabanları Arası Erişim ile **Kayıt Güncellendiğinde** → **Kaydı Güncelle** adımlarını kullanın.
+1. **Sipariş Karşılama** Projede ikinci bir iş akışı oluşturun.
+2. Satış Projeyi gösteren Projeler Arası Erişim ile **Kayıt Güncellendiğinde** → **Kaydı Güncelle** adımlarını kullanın.
3. Sonsuz döngülerden kaçınmak için filtre kullanın; örneğin yalnızca belirli alanlar değiştiğinde tetikleyin ve güncellemeden önce değerin gerçekten farklı olduğunu denetleyin.
diff --git a/tr/basic/automation/trigger/external/webhook-received.mdx b/tr/basic/automation/trigger/external/webhook-received.mdx
index 4fc50a1a..01204599 100644
--- a/tr/basic/automation/trigger/external/webhook-received.mdx
+++ b/tr/basic/automation/trigger/external/webhook-received.mdx
@@ -78,7 +78,7 @@ Teable'ın kendi alındı bildirimine dönmek için **Yanıt** ayarını istedi
## Webhook'unuzu test etme
-Test etmenin en kolay yolu komut satırından `curl` kullanmaktır. Veritabanı ve iş akışı kimliklerini içerdiğinden URL'yi elle yazmak yerine tetikleyici panelindeki gerçek URL'yi kopyalayın.
+Test etmenin en kolay yolu komut satırından `curl` kullanmaktır. Proje ve iş akışı kimliklerini içerdiğinden URL'yi elle yazmak yerine tetikleyici panelindeki gerçek URL'yi kopyalayın.
**Yetkilendirme olmadan:**
@@ -120,7 +120,7 @@ Test isteğini gönderdikten sonra verilerin alınıp doğru ayrıştırıldığ
| Kapsam | Sınır |
|---|---|
-| Veritabanı başına | Saniyede 50 istek |
+| Proje başına | Saniyede 50 istek |
| İş akışı başına | Saniyede 2 istek |
Hız sınırını aşan istekler HTTP 429 yanıtı alır. Harici sisteminiz kısa süreli istek yoğunlukları gönderiyorsa üstel geri çekilmeli yeniden deneme mantığı uygulamayı değerlendirin.
diff --git a/tr/basic/base.mdx b/tr/basic/base.mdx
index 252560bc..55f37f21 100644
--- a/tr/basic/base.mdx
+++ b/tr/basic/base.mdx
@@ -1,42 +1,44 @@
---
title: "Genel Bakış"
-description: "Veritabanları oluşturun, yönetin, içe ve dışa aktarın. .tea dosyalarıyla verileri Teable Cloud Alanları arasında taşıyın veya Cloud ile kendi sunucunuzdaki örnekler arasında geçiş yapın."
+description: "Projeleri oluşturun, yönetin, içe ve dışa aktarın. .tea dosyalarıyla verileri Teable Cloud Alanları arasında taşıyın veya Cloud ile kendi sunucunuzdaki örnekler arasında geçiş yapın."
---
{/* mintlify-resync: 2026-05-26 */}
-Veritabanı, belirli bir projeye ait tüm bilgileri saklamak ve işlemek için kullanılan bir araçtır. Her Alanda birden fazla Veritabanı bulunabilir ve her Veritabanı bağımsız çalışarak belirli projeler veya tablo koleksiyonları için açık bir bilgi yapısı sağlar.
+Proje, ilişkili tabloları, uygulamaları ve otomasyonları bir araya getirir. Her Alan birden fazla proje içerebilir. Her projenin kendi kaynakları ve iş birliği izinleri vardır.
-Veritabanı kavramına aşina değilseniz bunları Excel'deki çalışma kitapları gibi düşünebilirsiniz; her çalışma kitabı birden fazla sayfa içerebilir.
+Proje, API ve CLI içindeki `base` kaynağının arayüzdeki adıdır. `baseId` gibi API alanları, `bse` kimlik öneki ve `/base/...` URL’leri değişmez.
-## Veritabanı Oluşturma ve Yönetme
+Proje kavramına aşina değilseniz bunları Excel'deki çalışma kitapları gibi düşünebilirsiniz; her çalışma kitabı birden fazla sayfa içerebilir.
-### Veritabanı Ekleme
+## Proje Oluşturma ve Yönetme {#veritabanı-oluşturma-ve-yönetme}
+
+### Proje Ekleme {#veritabanı-ekleme}
1. Bir Alana girin
-2. Sağ üst köşedeki "Veritabanı Oluştur" seçeneğine tıklayın
+2. Sağ üst köşedeki "Proje Oluştur" seçeneğine tıklayın
-### Veritabanını Yeniden Adlandırma/Silme
+### Projeyi Yeniden Adlandırma/Silme {#veritabanını-yeniden-adlandırmasilme}
1. Bir Alana girin
-2. İmleci bir Veritabanının üzerine getirin
+2. İmleci bir Projenin üzerine getirin
3. Menüyü açmak için "···" düğmesine tıklayın
4. "Yeniden Adlandır" veya "Sil" seçeneğine tıklayın
-### Veritabanındaki Kaynakları Düzenleme
+### Projedeki Kaynakları Düzenleme {#veritabanındaki-kaynakları-düzenleme}
-Bir Veritabanına girdikten sonra sol kenar çubuğunda geçerli Veritabanındaki tablolar, uygulamalar ve otomasyonlar gibi kaynaklar gösterilir. Bu kaynakları klasörlerle düzenleyebilir ve büyük Veritabanlarında gezinmeyi kolaylaştırabilirsiniz.
+Bir Projeye girdikten sonra sol kenar çubuğunda geçerli Projedeki tablolar, uygulamalar ve otomasyonlar gibi kaynaklar gösterilir. Bu kaynakları klasörlerle düzenleyebilir ve büyük Projelerde gezinmeyi kolaylaştırabilirsiniz.
Yaygın işlemler şunlardır:
@@ -46,40 +48,40 @@ Yaygın işlemler şunlardır:
- **Açıklama ekleme**: Tablo, uygulama ve otomasyonlarda üstbilgide kaynak adının altındaki **Açıklama ekle**'ye tıklayın. Amacı, sahibini, devir notlarını veya kullanım kurallarını kaydetmek için açıklamaları kullanın. Teable, açıklamayı kaynağı ilk açtığınızda ve açıklama değiştikten sonra bir kez daha gösterir.
- **Düğüm bilgilerini denetleme**: Kaynağın `...` menüsünü açıp klasör, tablo, otomasyon veya uygulama kimliğinin yanı sıra oluşturulma ve değiştirilme bilgilerini görmek için **Düğüm bilgileri**'ni seçin.
-### Veritabanını Başka Bir Alana Çoğaltma {#duplicate-a-base-to-another-space}
+### Projeyi Başka Bir Alana Çoğaltma {#duplicate-a-base-to-another-space}
-Adım 1: Alanda çoğaltmak istediğiniz Veritabanını seçin;
+Adım 1: Alanda çoğaltmak istediğiniz Projeyi seçin;
-Adım 2: Menü simgesine tıklayın ve Veritabanını Kopyala seçeneğini belirleyin;
+Adım 2: Menü simgesine tıklayın ve Projeyi Kopyala seçeneğini belirleyin;
Adım 3: Açılır pencerede hedef Alanı seçin. Bu Alanda Oluşturucu iznine sahip olmanız gerekir.
-Büyük Veritabanlarında Teable; Veritabanı yapısını, kayıtları ve ekleri kopyalarken çoğaltma iletişim kutusunda ilerlemeyi gösterir. Kopyalama bitene kadar iletişim kutusunu açık tutun. Revizyon geçmişi ve işbirlikçiler kopyalanmaz.
+Büyük Projelerde Teable; Proje yapısını, kayıtları ve ekleri kopyalarken çoğaltma iletişim kutusunda ilerlemeyi gösterir. Kopyalama bitene kadar iletişim kutusunu açık tutun. Revizyon geçmişi ve işbirlikçiler kopyalanmaz.
-Veritabanında başka bir Alanı gösteren Bağlantı, Arama, Toplama, Koşullu Arama veya Koşullu Toplama alanları varsa Teable çoğaltmadan önce etkilenen alanları gösterir. Devam ederseniz Teable bu alanları çoğaltılan Veritabanında **Tek satırlı metin** alanlarına dönüştürür.
+Projede başka bir Alanı gösteren Bağlantı, Arama, Toplama, Koşullu Arama veya Koşullu Toplama alanları varsa Teable çoğaltmadan önce etkilenen alanları gösterir. Devam ederseniz Teable bu alanları çoğaltılan Projede **Tek satırlı metin** alanlarına dönüştürür.
-### Veritabanını Alanlar Arasında Taşıma
+### Projeyi Alanlar Arasında Taşıma {#veritabanını-alanlar-arasında-taşıma}
-Gerekli Alan izinlerine sahipseniz bir Veritabanını başka bir Alana taşıyabilirsiniz. Taşıma sonucunda ilişki tabanlı alanlar Alanlar arasında bağlantı kuracaksa Teable sizi uyarır ve etkilenen alanları listeler. Onayladığınızda Teable, taşıma işleminin bir parçası olarak bu alanları **Tek satırlı metin** alanlarına dönüştürür.
+Gerekli Alan izinlerine sahipseniz bir Projeyi başka bir Alana taşıyabilirsiniz. Taşıma sonucunda ilişki tabanlı alanlar Alanlar arasında bağlantı kuracaksa Teable sizi uyarır ve etkilenen alanları listeler. Onayladığınızda Teable, taşıma işleminin bir parçası olarak bu alanları **Tek satırlı metin** alanlarına dönüştürür.
-## Veritabanlarını İçe ve Dışa Aktarma
+## Projeleri İçe ve Dışa Aktarma {#veritabanlarını-i̇çe-ve-dışa-aktarma}
Airtable, Baserow, NocoDB, SmartSuite ve diğer sistemleri Teable'a taşımak için AI Chat'i kullanın.
-### Veritabanını İçe Aktarma (Veri Taşıma)
+### Projeyi İçe Aktarma (Veri Taşıma) {#veritabanını-i̇çe-aktarma-veri-taşıma}
-`.tea` dosya biçimi bir Veritabanını tüm tabloları, alanları, verileri ve yapılandırmalarıyla birlikte içe aktarır. Şu durumlarda kullanışlıdır:
-- **Veri Taşıma**: Veritabanlarını farklı Teable örnekleri arasında taşıyın (ör. Cloud'dan kendi sunucunuza)
-- **Yedeği Geri Yükleme**: Daha önce dışa aktarılmış bir Veritabanını geri yükleyin
-- **Şablon Paylaşımı**: Eksiksiz Veritabanı yapılarını diğer ekiplerle paylaşın
+`.tea` dosya biçimi bir Projeyi tüm tabloları, alanları, verileri ve yapılandırmalarıyla birlikte içe aktarır. Şu durumlarda kullanışlıdır:
+- **Veri Taşıma**: Projeleri farklı Teable örnekleri arasında taşıyın (ör. Cloud'dan kendi sunucunuza)
+- **Yedeği Geri Yükleme**: Daha önce dışa aktarılmış bir Projeyi geri yükleyin
+- **Şablon Paylaşımı**: Eksiksiz Proje yapılarını diğer ekiplerle paylaşın
**Adımlar:**
1. Alana girin
@@ -89,19 +91,19 @@ Gerekli Alan izinlerine sahipseniz bir Veritabanını başka bir Alana taşıyab
-Airtable'dan Veritabanı oluşturmak istiyorsanız aynı içe aktarma iletişim kutusunda **Airtable'dan içe aktar**'ı seçin.
+Airtable'dan Proje oluşturmak istiyorsanız aynı içe aktarma iletişim kutusunda **Airtable'dan içe aktar**'ı seçin.
-### Veritabanını Dışa Aktarma (Yedekleme ve Taşıma) {#export-base-backup-&-migration}
+### Projeyi Dışa Aktarma (Yedekleme ve Taşıma) {#export-base-backup-&-migration}
-Yedekleme veya taşıma için Veritabanınızı `.tea` dosyasına aktarın. Dışa aktarılan dosya tüm tabloları, alanları, verileri, görünümleri ve yapılandırmaları içerir.
+Yedekleme veya taşıma için Projenizi `.tea` dosyasına aktarın. Dışa aktarılan dosya tüm tabloları, alanları, verileri, görünümleri ve yapılandırmaları içerir.
**Adımlar:**
1. Alana girin
-2. İmleci dışa aktarmak istediğiniz Veritabanının üzerine getirin
+2. İmleci dışa aktarmak istediğiniz Projenin üzerine getirin
3. Menüyü açmak için 「···」 düğmesine tıklayın
4. 「Dışa Aktar」 seçeneğine tıklayın
5. Kayıt verilerini dışa aktarmak için **Kayıtları dahil et** seçeneğini açık bırakın. Yalnızca yapıyı ve yapılandırmayı aktarmak için kapatın.
@@ -110,28 +112,28 @@ Yedekleme veya taşıma için Veritabanınızı `.tea` dosyasına aktarın. Dı
-- Teable örnekleri arasında veri taşımak için Veritabanınızı kaynak örnekten dışa aktarın, ardından `.tea` dosyasını hedef örneğe aktarın. Tüm veriler ve yapılandırmalar korunur.
-- Teable, Veritabanları arası ilişki alanlarını dışa aktarılan dosyada **Tek satırlı metin** alanlarına dönüştürür.
-- Bir Veritabanını Alanlar arasında çoğalttığınızda veya taşıdığınızda Alanlar arası ilişki alanları **Tek satırlı metin** alanlarına dönüştürülür.
+- Teable örnekleri arasında veri taşımak için Projenizi kaynak örnekten dışa aktarın, ardından `.tea` dosyasını hedef örneğe aktarın. Tüm veriler ve yapılandırmalar korunur.
+- Teable, Projeleri arası ilişki alanlarını dışa aktarılan dosyada **Tek satırlı metin** alanlarına dönüştürür.
+- Bir Projeyi Alanlar arasında çoğalttığınızda veya taşıdığınızda Alanlar arası ilişki alanları **Tek satırlı metin** alanlarına dönüştürülür.
-## Veritabanını Paylaşma
+## Projeyi Paylaşma {#veritabanını-paylaşma}
-Veritabanları herkese açık bağlantılar üzerinden paylaşılabilir. Paylaşım kapsamı tüm Veritabanı veya geçerli seçili öğe olabilir.
+Projeleri herkese açık bağlantılar üzerinden paylaşılabilir. Paylaşım kapsamı tüm Proje veya geçerli seçili öğe olabilir.
-1. Hedef Veritabanına girin
-2. Veritabanının veya seçili öğenin paylaşım menüsünü açın
+1. Hedef Projeye girin
+2. Projenin veya seçili öğenin paylaşım menüsünü açın
3. **Web'de paylaş** seçeneğini açın
4. Paylaşım bağlantısını veya QR kodunu kopyalayın
@@ -139,29 +141,29 @@ Paylaşım kapsamları şunlardır:
| Kapsam | Açıklama |
|------|------|
-| **Tüm Veritabanını paylaş** | Geçerli Veritabanındaki tüm öğeleri paylaşır. Daha sonra eklenen yeni tablolar ve klasörler otomatik olarak dahil edilir. |
+| **Tüm Projeyi paylaş** | Geçerli Projedeki tüm öğeleri paylaşır. Daha sonra eklenen yeni tablolar ve klasörler otomatik olarak dahil edilir. |
| **Seçili öğeyi paylaş** | Geçerli seçili öğeyi paylaşır. Bir klasör paylaşıldığında alt öğeleri de dahil edilir. |
Paylaşım ayarlarında bağlantı izinlerini, **Görüntüleyenlerin veri kopyalamasına izin ver** seçeneğini ve parolayla erişimi yapılandırabilir; bağlantıyı yeniden oluşturabilir veya silebilir ve gömme yapılandırmasını kopyalayabilirsiniz.
Paylaşım kapsamı bir uygulama içeriyorsa uygulamanın herkese açık bağlantı üzerinden erişilebilmesi için yayımlanmış olması gerekir.
-## Veritabanındaki Özellikler
+## Projedeki Özellikler {#veritabanındaki-özellikler}
-Bir Veritabanı, iş veya işle ilgili bilgileri kaydetmek ve düzenlemek için birden fazla tablo içerebilir.
+Bir Proje, iş veya işle ilgili bilgileri kaydetmek ve düzenlemek için birden fazla tablo içerebilir.
-Örneğin bir müşteri yönetimi Veritabanında "Müşteri Şirketleri", "Müşteri Kişileri" ve "Müşteri Takip Kayıtları" için ayrı tablolar bulunabilir; toplantı odası yönetimi Veritabanında ise "Toplantı Odası Yönetimi", "Toplantı Odası Ekipmanları" ve "Toplantı Odası Rezervasyonları"nı kaydetmek için ayrı tablolar bulunabilir.
+Örneğin bir müşteri yönetimi Projede "Müşteri Şirketleri", "Müşteri Kişileri" ve "Müşteri Takip Kayıtları" için ayrı tablolar bulunabilir; toplantı odası yönetimi Projede ise "Toplantı Odası Yönetimi", "Toplantı Odası Ekipmanları" ve "Toplantı Odası Rezervasyonları"nı kaydetmek için ayrı tablolar bulunabilir.
-Bu nedenle Veritabanındaki özelliklerin çoğu tablolarla ilgilidir:
+Bu nedenle Projedeki özelliklerin çoğu tablolarla ilgilidir:
-* **Tablo Oluşturma**: Veritabanları, kullanıcıların projeye özel ihtiyaçlara göre tablo yapısını, alanları ve veri türlerini tanımlayabilecekleri yeni tablolar oluşturmasına olanak tanır.
-* **Tabloları Düzenleme**: Kullanıcılar Veritabanındaki mevcut tabloları düzenleyebilir; kayıt ekleyebilir, silebilir ve değiştirebilir.
-* **Verileri Dışa ve İçe Aktarma**: Veritabanları verileri CSV'ye aktarmayı ve CSV ile XLSX biçimindeki verileri içe aktarmayı destekler.
+* **Tablo Oluşturma**: Projeleri, kullanıcıların projeye özel ihtiyaçlara göre tablo yapısını, alanları ve veri türlerini tanımlayabilecekleri yeni tablolar oluşturmasına olanak tanır.
+* **Tabloları Düzenleme**: Kullanıcılar Projedeki mevcut tabloları düzenleyebilir; kayıt ekleyebilir, silebilir ve değiştirebilir.
+* **Verileri Dışa ve İçe Aktarma**: Projeleri verileri CSV'ye aktarmayı ve CSV ile XLSX biçimindeki verileri içe aktarmayı destekler.
Tablolar hakkında daha fazla bilgi için [Tablolar bölümüne](/tr/basic/table) bakın.
diff --git a/tr/basic/credential.mdx b/tr/basic/credential.mdx
index 3dfc0d9c..0c29d24f 100644
--- a/tr/basic/credential.mdx
+++ b/tr/basic/credential.mdx
@@ -39,7 +39,7 @@ Kaynağın kimlik bilgisi panelini açın:
Her erişim için bir **Değişken adı** gerekir; bu, kimlik bilgisinin o uygulama veya otomasyon içindeki takma adıdır. Adlandırma kuralları gizli anahtar Key'iyle aynıdır ve kodun okuduğu ad budur.
-Panelde **Henüz bağlanmadı** yer tutucuları da görünebilir. Uygulama kopyalama, iş akışı çoğaltma, veritabanı içe aktarma veya çoğaltma işlemlerinde kodun beklediği takma adlar taşınır, kimlik bilgileri taşınmaz. **Benimkini bağla** ile kendi kimlik bilginizi verirsiniz ve uygulama ya da otomasyon çalışır hale gelir.
+Panelde **Henüz bağlanmadı** yer tutucuları da görünebilir. Uygulama kopyalama, iş akışı çoğaltma, proje içe aktarma veya çoğaltma işlemlerinde kodun beklediği takma adlar taşınır, kimlik bilgileri taşınmaz. **Benimkini bağla** ile kendi kimlik bilginizi verirsiniz ve uygulama ya da otomasyon çalışır hale gelir.
Bir takma ad şu anda başkasının kimlik bilgisini tutuyorsa **Benimkiyle değiştir** ile devralabilirsiniz. **Yalnızca yetkiyi kaldır (yer tutucuyu koru)** yalnızca bağı çözer, yer tutucu kalır ve kodda değişiklik gerekmez.
diff --git a/tr/basic/security.mdx b/tr/basic/security.mdx
index 67f3e1fa..b6113a9e 100644
--- a/tr/basic/security.mdx
+++ b/tr/basic/security.mdx
@@ -112,13 +112,13 @@ Teable, verilerinizi yedeklemek için birden fazla seçenek sunar:
| Yöntem | Açıklama | Kullanım Alanı |
|--------|-------------|----------|
-| **[Veritabanını Dışa Aktarma](/tr/basic/base#export-base-backup-&-migration)** | Veritabanının tamamını `.tea` dosyası olarak indirin (yapı, veriler, otomasyonlar) | Tam yedekleme, taşıma |
-| **[Veritabanını Çoğaltma](/tr/basic/base#duplicate-a-base-to-another-space)** | Teable içinde Veritabanının bir kopyasını oluşturun | Hızlı anlık görüntü |
+| **[Projeyi Dışa Aktarma](/tr/basic/base#export-base-backup-&-migration)** | Projenin tamamını `.tea` dosyası olarak indirin (yapı, veriler, otomasyonlar) | Tam yedekleme, taşıma |
+| **[Projeyi Çoğaltma](/tr/basic/base#duplicate-a-base-to-another-space)** | Teable içinde Projenin bir kopyasını oluşturun | Hızlı anlık görüntü |
| **[CSV Olarak Dışa Aktarma](/tr/basic/table/export)** | Tek bir Tablonun verilerini dışa aktarın | Veri taşınabilirliği |
| **[API ile Dışa Aktarma](/tr/api-doc/record/get)** | Kayıtları REST API aracılığıyla programlı olarak dışa aktarın | Otomatik yedeklemeler |
-Veritabanının tamamını `.tea` dosyası olarak, tek tek Tabloları CSV dosyaları olarak dışa aktararak veya verilerinizi Teable API üzerinden alarak Veritabanlarınızı elle yedekleyebilirsiniz.
+Projenin tamamını `.tea` dosyası olarak, tek tek Tabloları CSV dosyaları olarak dışa aktararak veya verilerinizi Teable API üzerinden alarak Projelerinizi elle yedekleyebilirsiniz.
## Tek Oturum Açma (SSO)
diff --git a/tr/basic/space.mdx b/tr/basic/space.mdx
index 67f0cde4..94e9d754 100644
--- a/tr/basic/space.mdx
+++ b/tr/basic/space.mdx
@@ -64,15 +64,15 @@ Silinen Alanlar çöp kutusuna taşınır. Burada verileri kalıcı olarak silme
## Benimle Paylaşılanlar
-Birisi sizi veritabanına ortak çalışan olarak eklediğinde veritabanı, Alan kenar çubuğundaki **Benimle paylaşılanlar** altında görünür.
+Birisi sizi projeye ortak çalışan olarak eklediğinde proje, Alan kenar çubuğundaki **Benimle paylaşılanlar** altında görünür.
-Sizinle paylaşılan veritabanları, kendi Alanlarınızdaki veritabanlarından farklıdır:
+Sizinle paylaşılan projeleri, kendi Alanlarınızdaki projelerden farklıdır:
- Erişim, paylaşan kişi tarafından denetlenir.
-- Kullanabileceğiniz işlemler, size verilen veritabanı iznine bağlıdır.
-- Paylaşan kişi erişiminizi kaldırırsa veritabanı artık görünmez.
+- Kullanabileceğiniz işlemler, size verilen proje iznine bağlıdır.
+- Paylaşan kişi erişiminizi kaldırırsa proje artık görünmez.
-Herkese açık veritabanı paylaşımı için [Veritabanı](/tr/basic/base) sayfasına bakın.
+Herkese açık proje paylaşımı için [Proje](/tr/basic/base) sayfasına bakın.
## Alan Ayarları
@@ -95,7 +95,7 @@ AI ayarları sayfasında Alan sahipleri, geçerli Alandaki AI özellikleri için
**IM'de Sohbet**
-**IM'de Sohbet** sayfasında Alan yöneticileri bot oluşturabilir ve botun modelini, erişebildiği Veritabanlarını, Becerilerini, dosyalarını ve IM entegrasyonunu yapılandırabilir.
+**IM'de Sohbet** sayfasında Alan yöneticileri bot oluşturabilir ve botun modelini, erişebildiği Projeleri, Becerilerini, dosyalarını ve IM entegrasyonunu yapılandırabilir.
**Plan**
diff --git a/tr/basic/space/base-invite.mdx b/tr/basic/space/base-invite.mdx
index b00afbac..073650a8 100644
--- a/tr/basic/space/base-invite.mdx
+++ b/tr/basic/space/base-invite.mdx
@@ -1,39 +1,39 @@
---
-title: "Veritabanı Daveti"
-description: "İzinleri veritabanı düzeyinde yönetin. Daha ayrıntılı ve güvenli veri iş birliği için tüm Alana erişim vermeden üyeleri belirli bir veritabanına davet edin."
+title: "Proje Daveti"
+description: "İzinleri proje düzeyinde yönetin. Daha ayrıntılı ve güvenli veri iş birliği için tüm Alana erişim vermeden üyeleri belirli bir projeye davet edin."
---
-## Veritabanı Ortak Çalışanı Nedir?
+## Proje Ortak Çalışanı Nedir? {#veritabanı-ortak-çalışanı-nedir}
-Veritabanı ortak çalışanı, yalnızca belirli bir veritabanına davet edilen üyedir. Alan ortak çalışanlarının aksine yalnızca davet edildikleri veritabanlarına erişebilir ve Alandaki diğer veritabanlarını göremezler.
+Proje ortak çalışanı, yalnızca belirli bir projeye davet edilen üyedir. Alan ortak çalışanlarının aksine yalnızca davet edildikleri projelere erişebilir ve Alandaki diğer projeleri göremezler.
-## Veritabanı Ortak Çalışanları Ekleme
+## Proje Ortak Çalışanları Ekleme {#veritabanı-ortak-çalışanları-ekleme}
-Herhangi bir veritabanına girin ve sağ üst köşedeki `Davet et` düğmesine tıklayın. İki yöntem desteklenir:
+Herhangi bir projeye girin ve sağ üst köşedeki `Davet et` düğmesine tıklayın. İki yöntem desteklenir:
-- **E-postayla davet et**: Alıcının e-posta adresini girin, veritabanı izin düzeyini (ör. "Oluşturucu") ayarlayın ve **Davet Gönder**'e tıklayın.
+- **E-postayla davet et**: Alıcının e-posta adresini girin, proje izin düzeyini (ör. "Oluşturucu") ayarlayın ve **Davet Gönder**'e tıklayın.
- **Bağlantıyla davet et**: Özel bir davet bağlantısı oluşturmak için "Bağlantı ile Davet Et" sekmesine geçin. Bağlantıyı kopyalayıp paylaşın. Alıcılar bağlantıya tıklayarak katılabilir.
-E-posta daveti gönderdikten sonra panelde gösterilen doğrudan Veritabanı bağlantısını kopyalayıp ayrıca gönderebilirsiniz. Davet edilen kişi, Veritabanını açan bir uygulama içi bildirim de alır.
+E-posta daveti gönderdikten sonra panelde gösterilen doğrudan Proje bağlantısını kopyalayıp ayrıca gönderebilirsiniz. Davet edilen kişi, Projeyi açan bir uygulama içi bildirim de alır.
-Davet panelinde veritabanına hâlihazırda erişimi olan tüm kullanıcıları görüntüleyebilirsiniz:
+Davet panelinde projeye hâlihazırda erişimi olan tüm kullanıcıları görüntüleyebilirsiniz:
-- **Veritabanı ortak çalışanları**: Yalnızca bu veritabanına doğrudan davet edilen üyeler.
-- **Alan ortak çalışanları**: Adlarının yanında "Alan" rozetiyle gösterilir; bu, Alan düzeyinde üye olduklarını ve bu veritabanına erişimi otomatik olarak devraldıklarını belirtir.
+- **Proje ortak çalışanları**: Yalnızca bu projeye doğrudan davet edilen üyeler.
+- **Alan ortak çalışanları**: Adlarının yanında "Alan" rozetiyle gösterilir; bu, Alan düzeyinde üye olduklarını ve bu projeye erişimi otomatik olarak devraldıklarını belirtir.
-Veritabanı, farklı iş birliği düzeylerini destekleyen dört izin rolü sunar. Ayrıntılı izin karşılaştırması için [İzin Ayrıntıları](/tr/basic/space/space-permission) sayfasına bakın.
+Proje, farklı iş birliği düzeylerini destekleyen dört izin rolü sunar. Ayrıntılı izin karşılaştırması için [İzin Ayrıntıları](/tr/basic/space/space-permission) sayfasına bakın.
Tablo, alan veya kayıt düzeyinde daha ayrıntılı denetim için [Yetki Matrisi](/tr/basic/authority-matrix) özelliğini kullanın.
@@ -46,11 +46,11 @@ Veritabanı, farklı iş birliği düzeylerini destekleyen dört izin rolü suna
## Kullanım Alanları
-Veritabanı daveti harici ortak çalışanlar için tasarlanmıştır. Örneğin bir varlık kitaplığını düzenlemek üzere tutulan serbest çalışan bir tasarımcı, Alandaki diğer veritabanlarını görmeden yalnızca bu veritabanına **Düzenleyici** izniyle davet edilebilir.
+Proje daveti harici ortak çalışanlar için tasarlanmıştır. Örneğin bir varlık kitaplığını düzenlemek üzere tutulan serbest çalışan bir tasarımcı, Alandaki diğer projeleri görmeden yalnızca bu projeye **Düzenleyici** izniyle davet edilebilir.
## Notlar
-- **İzin devralma**: Bir Alan Yöneticisi, bu Alandaki tüm veritabanlarına otomatik olarak tam erişime sahiptir ve veritabanı düzeyinde daha düşük bir izne geçirilemez.
-- **Bağlantı güvenliği**: Davet bağlantısını edinen herkes veritabanına katılmayı deneyebilir. Bağlantı sızarsa davet panelinde yanındaki X simgesine tıklayarak bağlantıyı iptal edebilirsiniz.
+- **İzin devralma**: Bir Alan Yöneticisi, bu Alandaki tüm projelere otomatik olarak tam erişime sahiptir ve proje düzeyinde daha düşük bir izne geçirilemez.
+- **Bağlantı güvenliği**: Davet bağlantısını edinen herkes projeye katılmayı deneyebilir. Bağlantı sızarsa davet panelinde yanındaki X simgesine tıklayarak bağlantıyı iptal edebilirsiniz.
[Yetki Matrisi](/tr/basic/authority-matrix) ve [İzin Ayrıntıları](/tr/basic/space/space-permission) birlikte kullanıldığında yalnızca **Yönetici** kullanıcılar Yetki Matrisi kısıtlamalarından muaftır. Diğer tüm kullanıcılar bu kısıtlamalara tabidir.
diff --git a/tr/basic/space/billing.mdx b/tr/basic/space/billing.mdx
index ae842a58..b2caee4b 100644
--- a/tr/basic/space/billing.mdx
+++ b/tr/basic/space/billing.mdx
@@ -41,19 +41,19 @@ Alanınızın kaynak tüketimini şu ölçümlerle izleyin:
| Ölçüm | Açıklama |
|--------|-------------|
-| **Toplam ortak çalışan** | Geçerli Alandaki ve veritabanlarındaki faturalandırılabilir ortak çalışanların sayısı |
+| **Toplam ortak çalışan** | Geçerli Alandaki ve projelerdeki faturalandırılabilir ortak çalışanların sayısı |
| **Aylık en fazla otomasyon çalıştırması** | Aylık otomasyon çalıştırma kotası. Her otomasyon çalıştırması 1 çalıştırma kotası tüketir |
| **Toplam kayıt** | Alandaki tüm tablolarda bulunan toplam satır sayısı |
| **Ek depolama alanı** | Yüklenen eklerin kullandığı toplam depolama alanı |
| **Toplam e-posta** | Teable E-posta Hizmeti kullanılarak otomasyon yoluyla gönderilen e-postalar |
-Hem Alan çöp kutusundaki hem de veritabanı çöp kutusundaki veriler toplam kayıt istatistiklerine dâhil edilir. Toplam kayıt sayısını azaltmak için "Alan → Çöp Kutusu" veya "Veritabanı → Çöp Kutusu" içindeki verileri temizleyin.
+Hem Alan çöp kutusundaki hem de proje çöp kutusundaki veriler toplam kayıt istatistiklerine dâhil edilir. Toplam kayıt sayısını azaltmak için "Alan → Çöp Kutusu" veya "Proje → Çöp Kutusu" içindeki verileri temizleyin.
-Kayıt kullanımını Veritabanına göre görüntülemek için **Toplam kayıt** kartındaki **Ayrıntılar**'a tıklayın. İletişim kutusu, her Veritabanı için etkin kayıtları, çöp kutusundaki kayıtları ve toplam kayıtları gösterir. İletişim kutusundan bir Veritabanı çöp kutusu sayfası açabilir veya zaten çöp kutusunda bulunan bir Veritabanını kalıcı olarak silebilirsiniz.
+Kayıt kullanımını Projeye göre görüntülemek için **Toplam kayıt** kartındaki **Ayrıntılar**'a tıklayın. İletişim kutusu, her Proje için etkin kayıtları, çöp kutusundaki kayıtları ve toplam kayıtları gösterir. İletişim kutusundan bir Proje çöp kutusu sayfası açabilir veya zaten çöp kutusunda bulunan bir Projeyi kalıcı olarak silebilirsiniz.
### Bir Sınıra Ulaşıldığında
-Alan bir plan sınırına ulaştığında Teable işlemi çalışmadan önce durdurur ve hangi sınıra ulaştığınızı, sınırın ne kadarını kullandığınızı ve Veritabanı başına kullanım bağlantılarını gösteren yükseltme iletişim kutusunu açar. Bu; yapıştırma, doldurma, satırları çoğaltma, toplu kayıt oluşturma, içe aktarma ve ek yükleme işlemleri için geçerlidir.
+Alan bir plan sınırına ulaştığında Teable işlemi çalışmadan önce durdurur ve hangi sınıra ulaştığınızı, sınırın ne kadarını kullandığınızı ve Proje başına kullanım bağlantılarını gösteren yükseltme iletişim kutusunu açar. Bu; yapıştırma, doldurma, satırları çoğaltma, toplu kayıt oluşturma, içe aktarma ve ek yükleme işlemleri için geçerlidir.
Devam etmek için planı yükseltin veya kayıtları ya da ekleri silerek yer açın.
@@ -129,9 +129,9 @@ Mevcut bir aboneliğin değiştirilmesi, faturalandırma portalındaki bir onay
### Koltuklar
-Koltuklar peşin satın alınır; ekibiniz büyümeden önce koltuk satın alabilirsiniz. Alanda ve veritabanlarında **Sahip**, **Oluşturucu** veya **Düzenleyici** rolündeki ortak çalışanlar bir koltuk kullanır. **Yorumcu** ve **Görüntüleyici** ücretsizdir.
+Koltuklar peşin satın alınır; ekibiniz büyümeden önce koltuk satın alabilirsiniz. Alanda ve projelerde **Sahip**, **Oluşturucu** veya **Düzenleyici** rolündeki ortak çalışanlar bir koltuk kullanır. **Yorumcu** ve **Görüntüleyici** ücretsizdir.
-Cloud planlarında satın alınan koltuklar kesin bir sınırdır. Teable, Alanın bu sınırı aşmasına neden olacak her işlemi engeller ve koltuk eklemeyi önerir. Buna e-posta davetleri, faturalandırılabilir bir rolle davet bağlantısı oluşturma veya bağlantının rolünü böyle bir role değiştirme, böyle bir bağlantı üzerinden katılma, doğrudan ortak çalışan ekleme ve bir kişiyi faturalandırılabilir bir role yükseltme dâhildir. Zaten bir koltuğu olan kişi başka bir veritabanına katılabilir veya yeni bir koltuk kullanmadan rol değiştirebilir.
+Cloud planlarında satın alınan koltuklar kesin bir sınırdır. Teable, Alanın bu sınırı aşmasına neden olacak her işlemi engeller ve koltuk eklemeyi önerir. Buna e-posta davetleri, faturalandırılabilir bir rolle davet bağlantısı oluşturma veya bağlantının rolünü böyle bir role değiştirme, böyle bir bağlantı üzerinden katılma, doğrudan ortak çalışan ekleme ve bir kişiyi faturalandırılabilir bir role yükseltme dâhildir. Zaten bir koltuğu olan kişi başka bir projeye katılabilir veya yeni bir koltuk kullanmadan rol değiştirebilir.
Devam etmek için Plan sayfasından koltuk ekleyin veya kişiye ücretsiz Yorumcu ya da Görüntüleyici rolünü verin. Yalnızca Alan sahibi koltuk satın alabilir.
diff --git a/tr/basic/space/space-invite.mdx b/tr/basic/space/space-invite.mdx
index 5c4b621e..b077daa7 100644
--- a/tr/basic/space/space-invite.mdx
+++ b/tr/basic/space/space-invite.mdx
@@ -5,7 +5,7 @@ description: "Başkalarını e-posta veya bağlantı yoluyla Alan ortak çalış
## Alan Ortak Çalışanı Nedir?
-Bir Alanı başka bir kullanıcıyla paylaştığınızda bu kullanıcı, Alandaki tüm veritabanlarına erişebilen bir Alan ortak çalışanı olur.
+Bir Alanı başka bir kullanıcıyla paylaştığınızda bu kullanıcı, Alandaki tüm projelere erişebilen bir Alan ortak çalışanı olur.
## Alan Ortak Çalışanları Ekleme
@@ -14,7 +14,7 @@ Bir Alanı başka bir kullanıcıyla paylaştığınızda bu kullanıcı, Alanda
1. Sol kenar çubuğunda ortak çalışan eklemek istediğiniz Alana tıklayın.
2. Alanın üst kısmındaki "Davet et" düğmesine tıklayın.
3. Alan daveti penceresi açılır. Burada e-posta veya bağlantı yoluyla davet seçeneklerini görürsünüz. Daha önce yapılandırılan "Davet Bağlantıları" ve mevcut "Alan Ortak Çalışanları" da ilgili bölümlerde yer alır.
-4. **E-posta daveti**: Bir veya birden fazla e-posta adresi girin (adresleri virgülle ayırın). Ardından kullanıcıların Alandaki tüm veritabanlarında sahip olmasını istediğiniz izin düzeyini ayarlayın. Son olarak kullanıcıları iş birliğine davet etmek için e-posta gönder'e tıklayın.
+4. **E-posta daveti**: Bir veya birden fazla e-posta adresi girin (adresleri virgülle ayırın). Ardından kullanıcıların Alandaki tüm projelerde sahip olmasını istediğiniz izin düzeyini ayarlayın. Son olarak kullanıcıları iş birliğine davet etmek için e-posta gönder'e tıklayın.
E-posta daveti gönderdikten sonra panelde gösterilen doğrudan Alan bağlantısını kopyalayıp ayrıca gönderebilirsiniz. Davet edilen kişi, Alanı açan bir uygulama içi bildirim de alır.
@@ -24,7 +24,7 @@ Bir Alanı başka bir kullanıcıyla paylaştığınızda bu kullanıcı, Alanda
className="docs-screenshot"
/>
-5. **Bağlantı daveti**: "Bağlantı ile Davet Et" seçeneğine tıklayın. Ardından davet bağlantısının Alandaki tüm veritabanları için vereceği izin düzeyini ayarlayın. Son olarak bağlantı oluştur'a tıklayın. Oluşturulan bağlantının yanındaki pano simgesine tıklayarak bağlantıyı istediğiniz şekilde paylaşabilirsiniz.
+5. **Bağlantı daveti**: "Bağlantı ile Davet Et" seçeneğine tıklayın. Ardından davet bağlantısının Alandaki tüm projeleri için vereceği izin düzeyini ayarlayın. Son olarak bağlantı oluştur'a tıklayın. Oluşturulan bağlantının yanındaki pano simgesine tıklayarak bağlantıyı istediğiniz şekilde paylaşabilirsiniz.
-Alan ortak çalışanları, Alandaki tüm veritabanlarına erişebilir. Bir kişinin yalnızca belirli veritabanlarında çalışması gerekiyorsa onu [Veritabanı Ortak Çalışanı](/tr/basic/space/base-invite) yapmayı değerlendirin.
+Alan ortak çalışanları, Alandaki tüm projelere erişebilir. Bir kişinin yalnızca belirli projelerde çalışması gerekiyorsa onu [Proje Ortak Çalışanı](/tr/basic/space/base-invite) yapmayı değerlendirin.
## Davet Bağlantılarını Silme
@@ -56,7 +56,7 @@ Alan ortak çalışanlarını Alan paylaşım penceresinden kaldırabilirsiniz.
* **İzin kısıtlaması**: Yalnızca Yönetici veya Oluşturucu iznine sahip kullanıcılar diğer ortak çalışanları kaldırabilir.
* **Kendi erişimini kaldırma**: Alanda en az bir başka Yönetici varsa kendi erişiminizi kaldırabilirsiniz.
-* **Kapsam**: Birini Alandan kaldırmak, bu kişinin ayrı ayrı veritabanlarında sahip olduğu izinleri kaldırmaz.
+* **Kapsam**: Birini Alandan kaldırmak, bu kişinin ayrı ayrı projelerde sahip olduğu izinleri kaldırmaz.
Bir Alana yeni kullanıcılar eklerken aşağıdaki rolleri atayabilirsiniz ([İzin Ayrıntıları](/tr/basic/space/space-permission) sayfasına bakın):
@@ -68,8 +68,8 @@ Bir Alana yeni kullanıcılar eklerken aşağıdaki rolleri atayabilirsiniz ([İ
| Yorumcu | Kayıtlara yorum yapabilir ancak verileri değiştiremez. |
| Görüntüleyici | Görüntüleyebilir ancak yorum yapamaz. |
-## Veritabanı Erişimini İnceleme
+## Proje Erişimini İnceleme {#veritabanı-erişimini-i̇nceleme}
-Bir kişi veya departman ayrı veritabanlarında da izne sahip olsa bile Alan ortak çalışanı listesinde yalnızca bir kez görünür. Rolün yanındaki **Veritabanı izinleri** rozeti, kişinin kaç veritabanına davet edildiğini gösterir. Alanın kendisine hiç eklenmemiş biri **Yalnızca seçili veritabanlarına erişebilir** olarak listelenir.
+Bir kişi veya departman ayrı projelerde da izne sahip olsa bile Alan ortak çalışanı listesinde yalnızca bir kez görünür. Rolün yanındaki **Proje izinleri** rozeti, kişinin kaç projeye davet edildiğini gösterir. Alanın kendisine hiç eklenmemiş biri **Yalnızca seçili projelere erişebilir** olarak listelenir.
-Bu veritabanlarını ve her birinde sahip olunan rolü görmek için satırı genişletin. Buradan **Veritabanı erişimini kaldır** tek bir veritabanı iznini geri çeker; yalnızca veritabanı erişimi olan bir satırdaki **Ortak çalışanı kaldır** ise kişinin bu Alanda sahip olduğu tüm veritabanı izinlerini geri çeker.
+Bu projeleri ve her birinde sahip olunan rolü görmek için satırı genişletin. Buradan **Proje erişimini kaldır** tek bir proje iznini geri çeker; yalnızca proje erişimi olan bir satırdaki **Ortak çalışanı kaldır** ise kişinin bu Alanda sahip olduğu tüm proje izinlerini geri çeker.
diff --git a/tr/basic/space/space-permission.mdx b/tr/basic/space/space-permission.mdx
index 50ae76bc..c68d8cc9 100644
--- a/tr/basic/space/space-permission.mdx
+++ b/tr/basic/space/space-permission.mdx
@@ -1,20 +1,20 @@
---
title: "İş Birliği İzni Ayrıntıları"
-description: "Bu bölüm, Alanlarda ve veritabanlarında dört farklı izin düzeyinin işlem kapsamını açıklar."
+description: "Bu bölüm, Alanlarda ve projelerde dört farklı izin düzeyinin işlem kapsamını açıklar."
---
Teable, tablo/alan/kayıt düzeylerinde daha ayrıntılı izin denetimi sağlar. Lütfen [Yetki Matrisi](/tr/basic/authority-matrix) bölümüne bakın.
-### Veritabanı İşlemleri
+### Proje İşlemleri {#veritabanı-i̇şlemleri}
| Açıklama | Oluşturucu/Yönetici | Düzenleyici | Yorumcu | Görüntüleyici |
| ----------- | :------------: | :----: | :-------: | :----: |
-| Veritabanındaki verileri görüntüleme | ✅ | ✅ | ✅ | ✅ |
+| Projedeki verileri görüntüleme | ✅ | ✅ | ✅ | ✅ |
| Eşit veya daha düşük izne sahip kullanıcıları davet etme | ✅ | ✅ | ✅ | ✅ |
| Görünüm paylaşım bağlantıları oluşturma veya silme | ✅ | ✅ | | |
| Otomasyon oluşturma ve düzenleme | ✅ | | | |
| Yetki Matrisini etkinleştirme | ✅ | | | |
-| Veritabanı iş birliği davet bağlantıları oluşturma veya silme | ✅ | | | |
-| Veritabanını yeniden adlandırma | ✅ | | | |
+| Proje iş birliği davet bağlantıları oluşturma veya silme | ✅ | | | |
+| Projeyi yeniden adlandırma | ✅ | | | |
### Kayıt İşlemleri
@@ -51,12 +51,12 @@ description: "Bu bölüm, Alanlarda ve veritabanlarında dört farklı izin düz
| Açıklama | Yönetici | Oluşturucu | Düzenleyici | Yorumcu | Görüntüleyici |
| ----------- | :-----: | :-----: | :----: | :-------: | :----: |
-| Alandaki tüm veritabanlarına erişme | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Alandaki tüm projelere erişme | ✅ | ✅ | ✅ | ✅ | ✅ |
| Eşit veya daha düşük izne sahip kullanıcıları davet etme | ✅ | ✅ | ✅ | ✅ | ✅ |
| Alanı yeniden adlandırma | ✅ | ✅ | | | |
-| Alana veritabanı ekleme ve Alandan veritabanı kaldırma | ✅ | ✅ | | | |
-| Alandaki veritabanlarını yeniden düzenleme | ✅ | ✅ | | | |
-| Veritabanlarını Alanlar arasında taşıma | ✅ | ✅ | | | |
+| Alana proje ekleme ve Alandan proje kaldırma | ✅ | ✅ | | | |
+| Alandaki projeleri yeniden düzenleme | ✅ | ✅ | | | |
+| Projeleri Alanlar arasında taşıma | ✅ | ✅ | | | |
| Faturalandırma ayarlarını düzenleme, Alanı yükseltme | ✅ | | | | |
| Yönetici izinleri verme | ✅ | | | | |
diff --git a/tr/basic/table.mdx b/tr/basic/table.mdx
index 3b81f504..a88be175 100644
--- a/tr/basic/table.mdx
+++ b/tr/basic/table.mdx
@@ -1,16 +1,16 @@
---
title: "Genel Bakış"
-description: "Bir Veritabanında tablolar oluşturun, içe aktarın, paylaşın ve yönetin."
+description: "Bir Projede tablolar oluşturun, içe aktarın, paylaşın ve yönetin."
---
{/* mintlify-resync: 2026-05-14 */}
-Her Veritabanı, ilişkili verileri saklamak ve yönetmek için birden fazla tablo içerebilir. Teable tabloları veritabanı tablolarıyla eşdeğerdir; [elektronik tablolardan farklarını](/tr/compare/teable-vs-excel) anlamak Teable'dan en iyi şekilde yararlanmanıza yardımcı olur.
+Her Proje, ilişkili verileri saklamak ve yönetmek için birden fazla tablo içerebilir. Teable tabloları veritabanı tablolarıyla eşdeğerdir; [elektronik tablolardan farklarını](/tr/compare/teable-vs-excel) anlamak Teable'dan en iyi şekilde yararlanmanıza yardımcı olur.
## Tablo Oluşturma ve Yönetme
### Tablo Ekleme
-Bir Veritabanında dizindeki `+` düğmesine tıklayın ve şunlardan birini seçin:
+Bir Projede dizindeki `+` düğmesine tıklayın ve şunlardan birini seçin:
-Diğer tablolar silmekte olduğunuz tabloya bağlanıyorsa onay iletişim kutusu, silme işleminden etkilenen alanları ait oldukları Veritabanı ve tabloyla birlikte listeler. Tablo silindiğinde bu bağlantı alanları, bağlantılı kayıt başlıklarını koruyan tek satırlı metin alanlarına dönüştürülür; bunların üzerine kurulmuş arama veya toplama alanları ise çalışmayı durdurur.
+Diğer tablolar silmekte olduğunuz tabloya bağlanıyorsa onay iletişim kutusu, silme işleminden etkilenen alanları ait oldukları Proje ve tabloyla birlikte listeler. Tablo silindiğinde bu bağlantı alanları, bağlantılı kayıt başlıklarını koruyan tek satırlı metin alanlarına dönüştürülür; bunların üzerine kurulmuş arama veya toplama alanları ise çalışmayı durdurur.
### Çöp Kutusu
-Silinen tabloları yönetmek için Veritabanının sol üst köşesindeki çöp kutusu simgesine tıklayın.
+Silinen tabloları yönetmek için Projenin sol üst köşesindeki çöp kutusu simgesine tıklayın.
-- **Geri yükle**: Tüm verileri korunmuş hâlde tabloyu Veritabanına geri getirir
+- **Geri yükle**: Tüm verileri korunmuş hâlde tabloyu Projeye geri getirir
- **Çöp kutusunu boşalt**: Çöp kutusundaki tüm tabloları kalıcı olarak siler
Bir tabloyu geri yüklemek bağlantı dönüşümünü geri almaz. Diğer tablolardaki bağlantı alanları metin olarak kalır; bağlantıyı geri istiyorsanız bu alanları yeniden oluşturun.
diff --git a/tr/basic/table/import.mdx b/tr/basic/table/import.mdx
index fe29b43a..cdcacc16 100644
--- a/tr/basic/table/import.mdx
+++ b/tr/basic/table/import.mdx
@@ -4,7 +4,7 @@ description: "CSV, Excel, Airtable veya Google E-Tablolar verilerini Teable'a ak
---
{/* mintlify-resync: 2026-05-14 */}
-Yeni tablo başlatmak, mevcut tabloya yeni veriler eklemek veya Airtable ya da Google E-Tablolar'daki tabloları bir Teable Veritabanına taşımak için içe aktarmayı kullanın. Veritabanının tamamını içe aktarırken Airtable ve Google E-Tablolar da kullanılabilir.
+Yeni tablo başlatmak, mevcut tabloya yeni veriler eklemek veya Airtable ya da Google E-Tablolar'daki tabloları bir Teable Projeye taşımak için içe aktarmayı kullanın. Projenin tamamını içe aktarırken Airtable ve Google E-Tablolar da kullanılabilir.
Airtable, Baserow, NocoDB, SmartSuite ve diğer sistemleri Teable'a taşımak için AI Chat'teki Connect Everything özelliğini kullanın.
@@ -72,16 +72,16 @@ Yüklemeden sonra dosya sütunlarını hedef tablodaki alanlarla eşleyip **İç
Örneğinizde Airtable entegrasyonu yapılandırılmışsa Airtable içe aktarma özelliğini iki şekilde kullanabilirsiniz:
-- Yeni bir Teable Veritabanı oluşturmak için hedef Alan menüsünü açın, **İçe Aktar**'a tıklayın ve **Airtable'dan içe aktar**'ı seçin.
-- Görüntülediğiniz Teable Veritabanına tablolar aktarmak için Veritabanı kaynak menüsünü kullanın:
+- Yeni bir Teable Proje oluşturmak için hedef Alan menüsünü açın, **İçe Aktar**'a tıklayın ve **Airtable'dan içe aktar**'ı seçin.
+- Görüntülediğiniz Teable Projeye tablolar aktarmak için Proje kaynak menüsünü kullanın:
-1. Hedef Teable Veritabanını açın.
+1. Hedef Teable Projeyi açın.
2. Sol dizinin üst kısmındaki `+` simgesine tıklayın.
3. **Diğer kaynaklardan ekle** bölümünde **Airtable**'ı seçin.
@@ -99,8 +99,8 @@ Yüklemeden sonra dosya sütunlarını hedef tablodaki alanlarla eşleyip **İç
Şu giriş noktalarından birini kullanın:
-- Yeni bir Teable Veritabanı oluşturmak için hedef Alan menüsünü açın, **İçe Aktar**'a tıklayın ve **Google E-Tablolar'dan içe aktar**'ı seçin.
-- Görüntülediğiniz Veritabanına tablo eklemek için sol dizinin üst kısmındaki `+` simgesine tıklayın ve **Diğer kaynaklardan ekle** bölümünden **Google E-Tablolar**'ı seçin.
+- Yeni bir Teable Proje oluşturmak için hedef Alan menüsünü açın, **İçe Aktar**'a tıklayın ve **Google E-Tablolar'dan içe aktar**'ı seçin.
+- Görüntülediğiniz Projeye tablo eklemek için sol dizinin üst kısmındaki `+` simgesine tıklayın ve **Diğer kaynaklardan ekle** bölümünden **Google E-Tablolar**'ı seçin.
@@ -113,7 +113,7 @@ Yüklemeden sonra dosya sütunlarını hedef tablodaki alanlarla eşleyip **İç
Her sekme satır ve sütun sayısıyla birlikte bir kart olarak gösterilir. İstediğiniz sekmeleri seçin. Veriler olmadan yalnızca alan yapısını istiyorsanız **Kayıtları içe aktar** seçeneğini kaldırın.
- **İçe aktarmayı başlat**'a tıklayıp iletişim kutusunu açık tutun. İlerlemeyi tablo tablo, işlem tamamlandığında ise her tabloya kaç kayıt eklendiğini bildirir. Yeni Veritabanı içe aktarmasından sonra doğrudan sonuca gitmek için **Veritabanını aç**'ı kullanın.
+ **İçe aktarmayı başlat**'a tıklayıp iletişim kutusunu açık tutun. İlerlemeyi tablo tablo, işlem tamamlandığında ise her tabloya kaç kayıt eklendiğini bildirir. Yeni Proje içe aktarmasından sonra doğrudan sonuca gitmek için **Projeyi aç**'ı kullanın.
diff --git a/tr/basic/view/toolbar.mdx b/tr/basic/view/toolbar.mdx
index 404f8ce7..3b9b8d47 100644
--- a/tr/basic/view/toolbar.mdx
+++ b/tr/basic/view/toolbar.mdx
@@ -148,9 +148,9 @@ Sıralama menüsündeki `Kayıtları otomatik sırala` seçeneğini kullanın.
## Görünümü Paylaşma
-**Görünümü paylaş**, geçerli görünümü bağlantı olarak yayımlar. Ziyaretçiler bu görünümdeki verileri ve düzeni görür. Bu işlem, onları veritabanı ortak çalışanı olarak davet etmekle aynı değildir.
+**Görünümü paylaş**, geçerli görünümü bağlantı olarak yayımlar. Ziyaretçiler bu görünümdeki verileri ve düzeni görür. Bu işlem, onları proje ortak çalışanı olarak davet etmekle aynı değildir.
-Bir veritabanının tamamını, belirli bir tabloyu veya klasörü paylaşmak için [Veritabanı](/tr/basic/base) sayfasındaki veritabanı paylaşımını kullanın.
+Bir projenin tamamını, belirli bir tabloyu veya klasörü paylaşmak için [Proje](/tr/basic/base) sayfasındaki proje paylaşımını kullanın.
| Paylaşım seçeneği | En uygun kullanım |
| --- | --- |
@@ -240,5 +240,5 @@ Görünüm kilitliyse veya görünümü düzenleme izniniz yoksa kendi geçici a
## Notlar
- Kişisel modda olmadığınız sürece filtreleri, grupları, sıralamaları, görünür alanları veya satır yüksekliğini değiştirmek geçerli görünümü kullanan herkesi etkiler.
-- Görünümü paylaş, tam veritabanı izinlerini değil geçerli görünümün sonucunu yayımlar. Sürekli iş birliği için üye izinlerini veya veritabanı paylaşımını kullanın.
+- Görünümü paylaş, tam proje izinlerini değil geçerli görünümün sonucunu yayımlar. Sürekli iş birliği için üye izinlerini veya proje paylaşımını kullanın.
- Her iki modda da hücre değerlerinde yapılan düzenlemeler herkesle eşitlenmeye devam eder.
diff --git a/tr/deploy/env.mdx b/tr/deploy/env.mdx
index 30589e9c..9f788dac 100644
--- a/tr/deploy/env.mdx
+++ b/tr/deploy/env.mdx
@@ -71,7 +71,7 @@ mode: "wide"
| BACKEND_MAIL_AUTH_USER | Varsayılan posta sunucusu kimlik doğrulama kullanıcı adı | - | - | username |
| BACKEND_MAIL_AUTH_PASS | Varsayılan posta sunucusu kimlik doğrulama parolası | - | - | usertoken |
| BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH | Davet e-postası konularında davet eden kişinin adının en fazla uzunluğu. Boş değer veya 0, kısaltmayı devre dışı bırakır | - | - | 32 |
-| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Davet e-postası konularında Alan veya Veritabanı adının en fazla uzunluğu. Boş değer veya 0, kısaltmayı devre dışı bırakır | - | - | 32 |
+| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Davet e-postası konularında Alan veya Proje adının en fazla uzunluğu. Boş değer veya 0, kısaltmayı devre dışı bırakır | - | - | 32 |
| **Oturum/JWT Yapılandırması** | | | | |
| BACKEND_SESSION_EXPIRES_IN | Oturum sona erme süresi | 7d | - | 7d |
| BACKEND_SESSION_COOKIE_SECURE | Oturum çerezinin güvenli olup olmadığı | false | - | true |
@@ -93,7 +93,7 @@ mode: "wide"
| TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | Değişiklik işlemi başına en fazla kayıt sayısı | 20000 | - | 20000 |
| TABLE_LIMIT_COMPUTED_CELL_VALUE_MAX_BYTES | Hesaplanan hücre değerinin en fazla bayt sayısı | 262144 | - | 262144 |
| TABLE_LIMIT_FORMULA_MAX_LENGTH | Formülün en fazla uzunluğu | 8192 | - | 8192 |
-| TABLE_LIMIT_TABLES_PER_BASE_MAX | Veritabanı başına en fazla tablo sayısı | 1000 | - | 1000 |
+| TABLE_LIMIT_TABLES_PER_BASE_MAX | Proje başına en fazla tablo sayısı | 1000 | - | 1000 |
| TABLE_LIMIT_FIELDS_PER_TABLE_MAX | Tablo başına en fazla alan sayısı | 500 | - | 500 |
| TABLE_LIMIT_VIEWS_PER_TABLE_MAX | Tablo başına en fazla görünüm sayısı | 100 | - | 100 |
| TABLE_LIMIT_CREATE_TABLE_FIELDS_MAX | Tablo oluştururken kabul edilen en fazla alan sayısı | 1000 | - | 1000 |
@@ -133,10 +133,10 @@ mode: "wide"
| TELEMETRY_REPORT_DISABLED | Bağlı örneklerden gelen lisans uyumluluğu raporları dahil, kendi sunucusunda barındırma telemetrisi raporlamasını devre dışı bırakır | false | - | true |
| **Veritabanı Yapılandırması** | | | | |
| PRISMA_DATABASE_URL | Veritabanı bağlantı URL'si; yapılandırılması zorunludur | - | Evet | postgresql://teable:teable@127.0.0.1:5432/teable |
-| PUBLIC_DATABASE_PROXY | Veritabanı "Veritabanı Bağlantısı" panelinde oluşturulan kimlik bilgilerinde kullanılan, dışarıdan erişilebilir veritabanı adresi (ana bilgisayar:bağlantı noktası); harici salt okunur SQL erişimini etkinleştirmek için ayarlayın | - | - | db.example.com:42345 |
+| PUBLIC_DATABASE_PROXY | Projenin "Veritabanı Bağlantısı" panelinde oluşturulan kimlik bilgilerinde kullanılan, dışarıdan erişilebilir veritabanı adresi (ana bilgisayar:bağlantı noktası); harici salt okunur SQL erişimini etkinleştirmek için ayarlayın | - | - | db.example.com:42345 |
| PRISMA_TRANSACTION_TIMEOUT | Bir işlemin zaman aşımına uğramadan önce çalışabileceği en uzun süre (ms). Uzun süren işlemler için artırın (ör. çok sayıda yabancı anahtar içeren toplu güncellemeler) | 5000 | - | 60000 |
| PRISMA_TRANSACTION_MAX_WAIT | Havuzdan bir işlem edinmek için beklenecek en uzun süre (ms) | 2000 | - | 5000 |
-| BIG_TRANSACTION_TIMEOUT | Büyük Veritabanlarının dışa aktarılması gibi büyük dahili işlemler için zaman aşımı (ms) | 600000 | - | 1200000 |
+| BIG_TRANSACTION_TIMEOUT | Büyük Projelerin dışa aktarılması gibi büyük dahili işlemler için zaman aşımı (ms) | 600000 | - | 1200000 |
## Gizli anahtarlar ve döndürme {#secrets-and-rotation}
diff --git a/uk/api-doc/get-id.mdx b/uk/api-doc/get-id.mdx
index ec45df5d..8f956cf2 100644
--- a/uk/api-doc/get-id.mdx
+++ b/uk/api-doc/get-id.mdx
@@ -14,11 +14,11 @@ title: "Як знайти ідентифікатори"
## BaseId
-Відкрийте потрібну Базу і скопіюйте з URL рядок, що починається з 'bse', наприклад: `bseXXXXXXXXXX`
+Відкрийте потрібний Проєкт і скопіюйте з URL рядок, що починається з 'bse', наприклад: `bseXXXXXXXXXX`
diff --git a/uk/api-doc/oauth.mdx b/uk/api-doc/oauth.mdx
index d8037554..3fc2105a 100644
--- a/uk/api-doc/oauth.mdx
+++ b/uk/api-doc/oauth.mdx
@@ -33,7 +33,7 @@ Teable підтримує три режими авторизації OAuth 2.0:
| Ресурс | Області дозволів |
|----------|--------|
| **Застосунок** | `app\|create`, `app\|read`, `app\|update`, `app\|delete` |
-| **База** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
+| **Проєкт** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
| **Таблиця** | `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` |
@@ -296,14 +296,14 @@ curl https://app.teable.ai/api/table/TABLE_ID/record \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Зазвичай перший крок після отримання токена — отримати всі Бази, доступні поточному користувачу:
+Зазвичай перший крок після отримання токена — отримати всі Проєкти, доступні поточному користувачу:
```bash
curl https://app.teable.ai/api/base/access/all \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-Ця кінцева точка повертає всі Бази, до яких поточний користувач має дозвіл на доступ. Значення `baseId` із відповіді можна використовувати в наступних викликах API.
+Ця кінцева точка повертає всі Проєкти, до яких поточний користувач має дозвіл на доступ. Значення `baseId` із відповіді можна використовувати в наступних викликах API.
## Оновлення токенів доступу
diff --git a/uk/api-doc/record/interface.mdx b/uk/api-doc/record/interface.mdx
index 4adb4b63..5597a021 100644
--- a/uk/api-doc/record/interface.mdx
+++ b/uk/api-doc/record/interface.mdx
@@ -2,7 +2,7 @@
title: "Інтерфейс Полів Запису"
---
-Поле пошуку не є окремим типом Поля. У пов’язаній Базі можна шукати Поле будь-якого типу. Тип Поля пошуку визначається вихідним Полем у пов’язаній Базі та має властивість isLookup. Поля пошуку не можна редагувати.
+Поле пошуку не є окремим типом Поля. У пов’язаному Проєкті можна шукати Поле будь-якого типу. Тип Поля пошуку визначається вихідним Полем у пов’язаному Проєкті та має властивість isLookup. Поля пошуку не можна редагувати.
За певних умов усі значення, що повертаються Полями, можуть мати `isMultipleCellValue: true`:
diff --git a/uk/api-doc/sql-query.mdx b/uk/api-doc/sql-query.mdx
index 87bab23e..b35808d4 100644
--- a/uk/api-doc/sql-query.mdx
+++ b/uk/api-doc/sql-query.mdx
@@ -11,12 +11,12 @@ Teable дає змогу підключатися до базової бази
### Створення підключення до бази даних
-1. **Відкрийте Таблицю**: спочатку відкрийте будь-яку Таблицю в Базі, до якої потрібно підключитися.
-2. **Перейдіть на сторінку конструктора**: натисніть значок ⚙️ у верхньому правому куті, щоб перейти на сторінку конструктора Бази.
+1. **Відкрийте Таблицю**: спочатку відкрийте будь-яку Таблицю в Проєкті, до якого потрібно підключитися.
+2. **Перейдіть на сторінку конструктора**: натисніть значок ⚙️ у верхньому правому куті, щоб перейти на сторінку конструктора Проєкту.
@@ -50,7 +50,7 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
**Примітка:** у PostgreSQL беріть назви схем і Таблиць у подвійні лапки `"`, щоб зберегти чутливість до регістру.
Для написання такого запиту потрібно знати три речі:
-- **Назва схеми (BaseId)**: ідентифікатор Бази, що починається з `bse`
+- **Назва схеми (BaseId)**: ідентифікатор Проєкту, що починається з `bse`
- **Назва Таблиці**: фізична назва Таблиці в PostgreSQL
- **Назви Полів**: фактичні назви стовпців у базі даних
@@ -58,27 +58,27 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
### Як знайти BaseId (назву схеми)
-Кожній Базі в Teable відповідає **схема** в PostgreSQL. BaseId — це назва схеми, яка використовується в SQL-запитах.
+Кожному Проєкту в Teable відповідає **схема** в PostgreSQL. BaseId — це назва схеми, яка використовується в SQL-запитах.
**Спосіб 1:** перегляньте URL — рядок, що починається з `bse`, є BaseId.
-**Спосіб 2:** в інтерфейсі конструктора Бази відображена назва схеми є BaseId.
+**Спосіб 2:** в інтерфейсі конструктора Проєкту відображена назва схеми є BaseId.
### Як знайти назви Таблиць
-Назви Таблиць в інтерфейсі Teable не синхронізуються автоматично з фізичними назвами Таблиць у базі даних. Фактичну назву Таблиці в базі даних можна переглянути в інтерфейсі конструктора Бази.
+Назви Таблиць в інтерфейсі Teable не синхронізуються автоматично з фізичними назвами Таблиць у базі даних. Фактичну назву Таблиці в базі даних можна переглянути в інтерфейсі конструктора Проєкту.
diff --git a/uk/api-doc/token.mdx b/uk/api-doc/token.mdx
index 6e41df1e..d1a3c8fb 100644
--- a/uk/api-doc/token.mdx
+++ b/uk/api-doc/token.mdx
@@ -15,7 +15,7 @@ description: "Персональні токени доступу викорис
3. Додайте до токена відповідні області дозволів.
-4. Укажіть, до яких баз і просторів матиме доступ токен.
+4. Укажіть, до яких проєктів і просторів матиме доступ токен.
Після створення токен буде показано лише один раз. Рекомендуємо скопіювати його та зберегти в безпечному місці.
diff --git a/uk/basic/admin-panel/announcements.mdx b/uk/basic/admin-panel/announcements.mdx
index d879c5f5..e90de955 100644
--- a/uk/basic/admin-panel/announcements.mdx
+++ b/uk/basic/admin-panel/announcements.mdx
@@ -15,7 +15,7 @@ description: "Публікуйте оголошення в застосунку
| Налаштування | Що воно визначає |
| --- | --- |
-| **Форма** | Де відображається оголошення: **Банер** угорі застосунку, **Спливне повідомлення** як тимчасове сповіщення, **Модальне вікно** як діалогове вікно, що перериває роботу, або **Картка бічної панелі** на бічних панелях Простору й Бази. |
+| **Форма** | Де відображається оголошення: **Банер** угорі застосунку, **Спливне повідомлення** як тимчасове сповіщення, **Модальне вікно** як діалогове вікно, що перериває роботу, або **Картка бічної панелі** на бічних панелях Простору й Проєкту. |
| **Рівень** | Тон повідомлення для користувачів: **Інформація**, **Технічне обслуговування**, **Критичне** або **Вирішено**. |
| Заголовок і **Текст** | Текст оголошення. |
| **Початок** / **Завершення** | Період показу оголошення. Час завершення має бути пізнішим за час початку. |
diff --git a/uk/basic/admin-panel/audit-log.mdx b/uk/basic/admin-panel/audit-log.mdx
index 29e51ae6..1cb234ea 100644
--- a/uk/basic/admin-panel/audit-log.mdx
+++ b/uk/basic/admin-panel/audit-log.mdx
@@ -11,9 +11,9 @@ description: "Переглядайте дії в усьому екземпляр
## Що можна переглянути
-Журнал аудиту охоплює поширені дії з адміністрування та спільної роботи, зокрема Простори, Бази, Таблиці, Перегляди, Поля, Записи, спільний доступ, запрошення, токени доступу й Матрицю повноважень.
+Журнал аудиту охоплює поширені дії з адміністрування та спільної роботи, зокрема Простори, Проєкти, Таблиці, Перегляди, Поля, Записи, спільний доступ, запрошення, токени доступу й Матрицю повноважень.
-Для кожного запису журналу вказано час операції, оператора, тип дії, пов’язану Базу або Простір і джерело запиту. Відкрийте запис журналу, щоб переглянути подробиці.
+Для кожного запису журналу вказано час операції, оператора, тип дії, пов’язаний Проєкт або Простір і джерело запиту. Відкрийте запис журналу, щоб переглянути подробиці.
## Дії з обліковим записом оператора
@@ -30,10 +30,10 @@ description: "Переглядайте дії в усьому екземпляр
- **Вибрати оператора**: показати дії певного користувача.
- **Вибрати Простір**: показати дії в певному Просторі.
-- **Вибрати Базу**: показати дії для певної Бази.
-- **Вибрати дію**: фільтрувати за типом операції, наприклад Записами, Полями, Переглядами, Таблицями, Базами, спільним доступом, Матрицею повноважень, ролями Матриці повноважень, Просторами, запрошеннями, користувачами й токенами доступу.
+- **Вибрати Проєкт**: показати дії для певного Проєкту.
+- **Вибрати дію**: фільтрувати за типом операції, наприклад Записами, Полями, Переглядами, Таблицями, Проєктами, спільним доступом, Матрицею повноважень, ролями Матриці повноважень, Просторами, запрошеннями, користувачами й токенами доступу.
-Якщо користувача, Базу або Простір видалено, запис залишається в журналі, а ресурс позначається як видалений.
+Якщо користувача, Проєкт або Простір видалено, запис залишається в журналі, а ресурс позначається як видалений.
## Перегляд великих списків журналу
diff --git a/uk/basic/admin-panel/computed-outbox.mdx b/uk/basic/admin-panel/computed-outbox.mdx
index e7a847c5..87f7cef4 100644
--- a/uk/basic/admin-panel/computed-outbox.mdx
+++ b/uk/basic/admin-panel/computed-outbox.mdx
@@ -30,7 +30,7 @@ description: "Відстежуйте доставлення BullMQ і чергу
Щоб звузити список:
- Натискайте плитки станів над Таблицею, щоб фільтрувати за станом: **Очікує**, **Активне**, **Відкладене**, **Невдале**, **Завершене (збережене)** тощо. Можна вибрати кілька плиток одночасно, а наведення на плитку показує пояснення відповідного стану.
-- Фільтруйте за **Простором**, **Базою**, **Причиною** або **Результатом**, шукайте завдання, Базу, Простір чи помилку або задайте мінімальний час опрацювання, щоб знайти повільні завдання.
+- Фільтруйте за **Простором**, **Проєктом**, **Причиною** або **Результатом**, шукайте завдання, Проєкт, Простір чи помилку або задайте мінімальний час опрацювання, щоб знайти повільні завдання.
- Натисніть рядок, щоб відкрити **Ланцюжок обчислень**: часові позначки черги, затримку доставлення, час опрацювання, повну причину помилки з відредагованим SQL для невдалого доставлення та опис поширення, наведений нижче.
Стан **Завершене** не означає, що завдання виконало роботу. Позначка результату показує фактичну дію доставлення: **Опрацьовано** — завдання виконано, **Без змін** — нічого не залишилося робити, **Відкладено** — виконання переплановано на пізніший час, а **Припарковано** означає, що його область призупинено. Фільтр **Результат** звужує список за цим результатом і показує кількість доставлень для кожного з них. Таким чином, поєднання **Завершене (збережене)** з **Опрацьовано** залишає лише доставлення, які справді виконали завдання.
@@ -58,7 +58,7 @@ description: "Відстежуйте доставлення BullMQ і чергу
Лічильник **Невдалі** та розділ **Обслуговування аномалій** показують різні типи проблем, тому їхні значення можуть відрізнятися.
-Розділ **Обслуговування аномалій** об’єднує аномалії в групи проблем — по одній для кожної Бази, вихідної Таблиці та помилки, — щоб першопричину було легко знайти. Перш ніж щось відновлювати, перегляньте причину помилки й усуньте основну проблему. Розгорніть групу, щоб прочитати відомості про помилку й охоплені нею завдання; ці рядки призначені для перевірки, а відновлення завжди виконується для всієї групи.
+Розділ **Обслуговування аномалій** об’єднує аномалії в групи проблем — по одній для кожного Проєкту, вихідної Таблиці та помилки, — щоб першопричину було легко знайти. Перш ніж щось відновлювати, перегляньте причину помилки й усуньте основну проблему. Розгорніть групу, щоб прочитати відомості про помилку й охоплені нею завдання; ці рядки призначені для перевірки, а відновлення завжди виконується для всієї групи.
Доступні дії залежать від типу групи:
@@ -70,7 +70,7 @@ description: "Відстежуйте доставлення BullMQ і чергу
Після відновлення групи Teable повідомляє, скільки завдань відновлено, скільки було щойно додано до черги або вже перебувало в ній і скільки доставлено чи відкладено. Після цього виконавці опрацьовують групу відповідно до поточних обмежень паралельного виконання й поділу завдань.
-Група з позначкою **Базу видалено** належить Базі, якої більше не існує. Її відновлення відразу знову завершиться помилкою, тому доступна лише дія **Відхилити групу**.
+Група з позначкою **Проєкт видалено** належить Проєкту, якого більше не існує. Її відновлення відразу знову завершиться помилкою, тому доступна лише дія **Відхилити групу**.
Переміщення Таблиці до кошика більше не створює тут аномалій. Обчислювальне завдання, яке й досі посилається на Таблицю в кошику, пропускає кроки читання з неї, завершує кроки для активних Таблиць і успішно завершується.
@@ -101,8 +101,8 @@ description: "Відстежуйте доставлення BullMQ і чергу
| Елемент керування | Що він обмежує |
| --- | --- |
| **Паралельне виконання для процесу** | Кількість обчислювальних завдань, які кожен робочий процес опрацьовує одночасно. |
-| **Обмеження отримання для Бази** | Кількість обчислювальних завдань, що одночасно виконуються для однієї Бази (**Для Бази**) і однієї вихідної Таблиці в ній (**Для початкової Таблиці**). Обидва стандартні значення дорівнюють 2; допустимі значення — від 1 до 16. |
+| **Обмеження отримання для Проєкту** | Кількість обчислювальних завдань, що одночасно виконуються для одного Проєкту (**Для Проєкту**) і однієї вихідної Таблиці в ньому (**Для початкової Таблиці**). Обидва стандартні значення дорівнюють 2; допустимі значення — від 1 до 16. |
-Збільшуйте обмеження отримання, коли вузьким місцем є одна завантажена База, а паралельність для процесу — коли в черзі одночасно перебуває багато Баз.
+Збільшуйте обмеження отримання, коли вузьким місцем є один завантажений Проєкт, а паралельність для процесу — коли в черзі одночасно перебуває багато Проєктів.
Вища паралельність збільшує навантаження на базу даних. Простори, які зберігають дані в [тенанті бази даних](/uk/basic/admin-panel/database-tenant), продовжують використовувати стандартні налаштування середовища для обмежень отримання, оскільки їхні пули підключень розраховано на ці значення.
diff --git a/uk/basic/admin-panel/database-tenant.mdx b/uk/basic/admin-panel/database-tenant.mdx
index 7c608aa7..80af1a4b 100644
--- a/uk/basic/admin-panel/database-tenant.mdx
+++ b/uk/basic/admin-panel/database-tenant.mdx
@@ -26,6 +26,6 @@ description: "Зберігайте дані Простору Teable у базі
Ні. Це Простір Teable, дані якого зберігаються в цій базі даних.
- Ні. Він змінює місце, де Teable зберігає власні дані Простору й керує ними. Ви надаєте базу даних PostgreSQL, розміщену в іншому місці, а Teable створює власні дані в ній і керує ними. Наявні Таблиці та Записи в цій базі даних не підключаються до Teable й не імпортуються автоматично як Бази.
+ Ні. Він змінює місце, де Teable зберігає власні дані Простору й керує ними. Ви надаєте базу даних PostgreSQL, розміщену в іншому місці, а Teable створює власні дані в ній і керує ними. Наявні Таблиці та Записи в цій базі даних не підключаються до Teable й не імпортуються автоматично як Проєкти.
diff --git a/uk/basic/admin-panel/multitenancy.mdx b/uk/basic/admin-panel/multitenancy.mdx
index f1846ca7..1d726d80 100644
--- a/uk/basic/admin-panel/multitenancy.mdx
+++ b/uk/basic/admin-panel/multitenancy.mdx
@@ -16,10 +16,10 @@ noindex: true
Екземпляр Teable
├── Тенант організації A
│ ├── Адміністратори організації, учасники та відділи
-│ └── Простори, Бази й налаштування рівня організації
+│ └── Простори, Проєкти й налаштування рівня організації
├── Тенант організації B
│ ├── Адміністратори організації, учасники та відділи
-│ └── Простори, Бази й налаштування рівня організації
+│ └── Простори, Проєкти й налаштування рівня організації
└── Тенант організації C
```
@@ -107,7 +107,7 @@ noindex: true
| --- | --- |
| **Користувачі** | Перегляд користувачів поточної організації та керування ними |
| **Організація** | Створення, переміщення, перейменування й видалення відділів і керування їхніми учасниками |
-| **Керування Просторами** | Додавання Просторів до організації, видалення їх з організації та перегляд кількості Просторів і Баз |
+| **Керування Просторами** | Додавання Просторів до організації, видалення їх з організації та перегляд кількості Просторів і Проєктів |
| **Налаштування автентифікації** | Налаштування сторонніх постачальників автентифікації для організації |
| **Налаштування безпеки** | Підтвердження доменів електронної пошти, щоб нові користувачі з такими доменами автоматично приєднувалися до організації |
| **Налаштування екземпляра** | Зміна назви організації, автоматичного доступу до Простору й області відділів |
diff --git a/uk/basic/admin-panel/skills.mdx b/uk/basic/admin-panel/skills.mdx
index df79b545..ab921347 100644
--- a/uk/basic/admin-panel/skills.mdx
+++ b/uk/basic/admin-panel/skills.mdx
@@ -9,7 +9,7 @@ description: "Публікуйте навички, якими може кори
Використовуйте розділ **Навички**, щоб публікувати навички для всього екземпляра. Додана тут навичка доступна в кожній розмові AI Chat, App Builder і ботів, тому використовуйте цей рівень для методів роботи, які ваша організація має застосовувати за замовчуванням, наприклад корпоративного стилю текстів, стандарту звітності або спільної процедури інтеграції.
-Навички, додані користувачами в інших місцях, залишаються у відповідній області. Докладніше про особисті навички й навички Бази та Простору див. у розділі [AI Chat](/uk/basic/ai/ai-chat).
+Навички, додані користувачами в інших місцях, залишаються у відповідній області. Докладніше про особисті навички й навички Проєкту та Простору див. у розділі [AI Chat](/uk/basic/ai/ai-chat).
## Додавання навички
@@ -34,4 +34,4 @@ description: "Публікуйте навички, якими може кори
## Якщо назва використовується двічі
-Опублікована тут навичка є стандартною для екземпляра. Якщо навичка Бази, Простору, користувача, застосунку або бота має таку саму назву, у цій розмові діє навичка з вужчою областю, а навичка екземпляра ігнорується.
+Опублікована тут навичка є стандартною для екземпляра. Якщо навичка Проєкту, Простору, користувача, застосунку або бота має таку саму назву, у цій розмові діє навичка з вужчою областю, а навичка екземпляра ігнорується.
diff --git a/uk/basic/admin-panel/spaces.mdx b/uk/basic/admin-panel/spaces.mdx
index ac3c0a04..501b08d1 100644
--- a/uk/basic/admin-panel/spaces.mdx
+++ b/uk/basic/admin-panel/spaces.mdx
@@ -8,7 +8,7 @@ description: "Керуйте всіма Просторами екземпляр
### Відомості про Простір
* **Назва Простору**: відображувана назва Простору
-* **Бази**: загальна кількість Баз у Просторі
+* **Проєкти**: загальна кількість Проєктів у Просторі
* **Співавтори**: загальна кількість користувачів із доступом до Простору
* **Час створення**: час створення Простору
* **Автоматичне приєднання**: чи дозволяє Простір новим користувачам приєднуватися автоматично
@@ -26,7 +26,7 @@ description: "Керуйте всіма Просторами екземпляр
Після видалення Простору з Панелі адміністратора:
* Простір негайно позначається як видалений
-* Усі Бази й дані в Просторі стають недоступними
+* Усі Проєкти й дані в Просторі стають недоступними
* Співавтори втрачають доступ до Простору
* Цю операцію неможливо скасувати
diff --git a/uk/basic/admin-panel/table-query-ops.mdx b/uk/basic/admin-panel/table-query-ops.mdx
index ec68a1b5..dfc36ad3 100644
--- a/uk/basic/admin-panel/table-query-ops.mdx
+++ b/uk/basic/admin-panel/table-query-ops.mdx
@@ -26,7 +26,7 @@ description: "Переглядайте покриття пошуку та інд
| **Не налаштовано** | Таблиці без покриття пошуку. |
| **Недоступно** | Таблиці, які зараз не можуть використовувати індексований пошук. Причину вказано в рядку. |
-Поле пошуку приймає назви та ідентифікатори Таблиць, Баз і Просторів. Сортувати можна за параметром **Найбільше повільних запитів** або **Назва Таблиці**. **Вікно спостереження** охоплює останню годину або 24 години, і всі показники спостережень у списку відповідають цьому вікну. Спостереження зберігаються 2 дні, давніші у списку не показуються.
+Поле пошуку приймає назви та ідентифікатори Таблиць, Проєктів і Просторів. Сортувати можна за параметром **Найбільше повільних запитів** або **Назва Таблиці**. **Вікно спостереження** охоплює останню годину або 24 години, і всі показники спостережень у списку відповідають цьому вікну. Спостереження зберігаються 2 дні, давніші у списку не показуються.
У кожному рядку наведено оцінену кількість рядків і розмір Таблиці, запити й повільні запити за вікно, поточний метод пошуку та покриття Полів, кількість індексів фільтрування/сортування, а також кількість відкритих рекомендацій і активних завдань. Натисніть назву Таблиці, щоб відкрити подробиці.
diff --git a/uk/basic/admin-panel/template-admin.mdx b/uk/basic/admin-panel/template-admin.mdx
index c7904a54..7c2114ac 100644
--- a/uk/basic/admin-panel/template-admin.mdx
+++ b/uk/basic/admin-panel/template-admin.mdx
@@ -1,6 +1,6 @@
---
title: "Керування шаблонами"
-description: "Керуйте шаблонами робочих процесів для своєї організації, щоб користувачі могли швидко почати роботу з попередньо налаштованими Базами."
+description: "Керуйте шаблонами робочих процесів для своєї організації, щоб користувачі могли швидко почати роботу з попередньо налаштованими Проєктами."
---
Доступно для самостійно розгорнутого тарифного плану Business та вище
@@ -16,12 +16,12 @@ description: "Керуйте шаблонами робочих процесів
* **Опис Markdown**: докладний опис із підтримкою форматування розширеного тексту
* **Категорія**: групування шаблонів за бізнес-сценаріями (наприклад, кадрова робота, продажі, розробка)
* **Системний**: указує, чи є шаблон офіційним системним шаблоном
-* **Джерело**: вихідна База, використана для створення шаблону
+* **Джерело**: вихідний Проєкт, використаний для створення шаблону
#### Операції із шаблонами
* **Новий шаблон**: створити нову конфігурацію шаблону
-* **Опублікувати знімок**: зберегти поточний стан вихідної Бази. Перш ніж додати шаблон до списку, потрібно опублікувати знімок.
+* **Опублікувати знімок**: зберегти поточний стан вихідного Проєкту. Перш ніж додати шаблон до списку, потрібно опублікувати знімок.
* **Стан (публікація)**: додати шаблон до центру шаблонів або вилучити його звідти. Потрібні назва, опис і знімок.
* **Закріпити**: закріпити важливі шаблони вгорі списку
* **Видалити**: видалити конфігурацію шаблону
@@ -31,7 +31,7 @@ description: "Керуйте шаблонами робочих процесів
Користувачі самостійно розгорнутих екземплярів можуть імпортувати шаблони з офіційної Teable Cloud:
1. **Завантаження**: отримайте файл `.tea` з [Офіційного центру шаблонів](https://teable.ai/templates)
-2. **Імпорт**: імпортуйте файл `.tea` як нову Базу у своєму Просторі
+2. **Імпорт**: імпортуйте файл `.tea` як новий Проєкт у своєму Просторі
3. **Створення шаблону**: перейдіть до розділу Керування шаблонами > Новий шаблон
-4. **Вибір джерела**: виберіть імпортовану Базу як джерело
+4. **Вибір джерела**: виберіть імпортований Проєкт як джерело
5. **Публікація**: налаштуйте відомості, опублікуйте знімок і ввімкніть стан
diff --git a/uk/basic/ai/ai-chat.mdx b/uk/basic/ai/ai-chat.mdx
index 08364932..96e31e8c 100644
--- a/uk/basic/ai/ai-chat.mdx
+++ b/uk/basic/ai/ai-chat.mdx
@@ -35,7 +35,7 @@ AI Chat допомагає аналізувати поточну Таблицю,
- **Мої секрети**: відкрийте **+** → **Більше** → **Мої секрети**, щоб зберегти ключі API або інші облікові дані в розділі **Налаштування** → **Інтеграції**. Ці значення належать вам, AI Chat читає їх під час роботи як змінні середовища, і ви можете надавати їх окремим застосункам та автоматизаціям. Див. [Облікові дані та інтеграції](/uk/basic/credential).
- **Запити облікових даних**: коли ШІ потрібен сторонній обліковий запис або секрет, у розмові закріплюється картка запиту. Виберіть **Підключити мій обліковий запис**, щоб пройти OAuth, або надайте наявні облікові дані. Кнопка **Пропустити** лишає їх при вас, і ШІ продовжує з тим, що не залежить від них.
- **Скрейпер**: відкрийте меню **+**, виберіть **Скрейпер**, а потім платформу й тип даних. Пункти бувають двох видів: одні збирають дані за вставленим посиланням, наприклад **особистий профіль** у LinkedIn або **відгуки про товар** на Amazon; інші шукають за ключовим словом, хештегом чи іменем, наприклад **пошук відео** у TikTok або **дописи сабреддіту** на Reddit. Teable підставить у поле введення готову інструкцію й залишить у кінці частину, яку потрібно доповнити. **Будь-яка вебсторінка** приймає вставлене посилання напряму.
-- **Навички**: відкрийте меню **+** і виберіть **Навички**, щоб імпортувати, увімкнути, вимкнути або випробувати навички в поточному чаті. Під час імпорту виберіть, хто може використовувати навичку: **Особиста** доступна лише вам, **База** — співавторам у цій Базі, а **Простір** — усім у цьому Просторі. Введіть `/` у полі введення, щоб вибрати ввімкнену навичку. Щоб підключити або перенести зовнішню систему, див. розділ [Підключення та перенесення будь-яких даних](/uk/basic/ai/connect-everything).
+- **Навички**: відкрийте меню **+** і виберіть **Навички**, щоб імпортувати, увімкнути, вимкнути або випробувати навички в поточному чаті. Під час імпорту виберіть, хто може використовувати навичку: **Особиста** доступна лише вам, **Проєкт** — співавторам у цьому Проєкті, а **Простір** — усім у цьому Просторі. Введіть `/` у полі введення, щоб вибрати ввімкнену навичку. Щоб підключити або перенести зовнішню систему, див. розділ [Підключення та перенесення будь-яких даних](/uk/basic/ai/connect-everything).
- **Використання контексту**: кільце поруч із полем введення показує, яку частину контекстного вікна моделі зараз використовує розмова. Натисніть його, щоб переглянути відсоток і кількість токенів. Коли контекст заповнюється, Teable стискає розмову; почніть новий чат, якщо потрібен чистий контекст.
- **Керування файлами**: відкрийте **+** → **Більше** → **Керування файлами**, щоб переглянути файли в пісочниці поточного чату. Можна попередньо переглядати підтримувані файли, завантажувати їх або видаляти непотрібні файли й папки. Для керування файлами має існувати розмова.
- **Черга повідомлень**: надсилання ще одного повідомлення під час роботи ШІ не перериває її. Повідомлення очікує в черзі над полем введення й надсилається після завершення поточного запуску. Елементи черги зберігають ті самі позначки Таблиці, Перегляду, вкладень і вибраних даних, що й поле введення чату; команда **Видалити** вилучає елемент, **...** → **Редагувати повідомлення** повертає його до поля введення, а для текстового елемента також доступна команда **Спрямувати**, яка передає його текст активному запуску без очікування.
@@ -129,9 +129,9 @@ AI Chat може не лише відповідати на запитання,
### Пам’ять
-Пам’ять зберігає інформацію, яку ви явно просите Cuppy запам’ятати. Її область визначається користувачем і Базою: кожен користувач у кожній Базі має незалежний контекст пам’яті, а пам’ять, збережена в іншій Базі, не з’являється автоматично в поточній.
+Пам’ять зберігає інформацію, яку ви явно просите Cuppy запам’ятати. Її область визначається користувачем і Проєктом: кожен користувач у кожному Проєкті має незалежний контекст пам’яті, а пам’ять, збережена в іншому Проєкті, не з’являється автоматично в поточному.
-- Збереження пам’яті в поточній Базі
+- Збереження пам’яті в поточному Проєкті
У розмові вкажіть, що Cuppy має запам’ятати:
@@ -139,12 +139,12 @@ AI Chat може не лише відповідати на запитання,
Будь ласка, запам’ятай xxx.
```
-- Повторне використання пам’яті з іншої Бази
+- Повторне використання пам’яті з іншого Проєкту
-Попросіть Cuppy прочитати іншу Базу й зберегти відповідні частини в поточній Базі:
+Попросіть Cuppy прочитати інший Проєкт й зберегти відповідні частини в поточному Проєкті:
```text
-Cuppy, прочитай пам’ять для Base ID bsexxxxxxxxxxxx і збережи відповідні відомості в поточній Базі.
+Cuppy, прочитай пам’ять для Проєкту з ID bsexxxxxxxxxxxx і збережи відповідні відомості в поточному Проєкті.
```
### Виконання тривалих завдань
@@ -228,8 +228,8 @@ AI Chat може підтримувати середовище однієї ро
Введіть `@` у полі введення й виберіть вузол, на який має посилатися AI Chat. У сітковому Перегляді також можна вибрати рядки, стовпці, одну комірку або діапазон комірок, а потім скористатися командою **Додати до чату** в контекстному меню.
-
- Так. ШІ не обмежений Базою, до якої належить чат: він може знаходити інші доступні вам Бази й працювати в них. Укажіть назву Бази в запиті, наприклад «порівняй цю Таблицю з Таблицею замовлень у Базі “Продажі”». За допомогою `@` можна вибирати лише вузли поточної Бази, а всі дії, для яких не вказано інше місце, і надалі виконуватимуться у власній Базі чату.
+
+ Так. ШІ не обмежений Проєктом, до якого належить чат: він може знаходити інші доступні вам Проєкти й працювати в них. Укажіть назву Проєкту в запиті, наприклад «порівняй цю Таблицю з Таблицею замовлень у Проєкті “Продажі”». За допомогою `@` можна вибирати лише вузли поточного Проєкту, а всі дії, для яких не вказано інше місце, і надалі виконуватимуться у власному Проєкті чату.
@@ -239,8 +239,8 @@ AI Chat може підтримувати середовище однієї ро
За замовчуванням — ні. Лише ви можете відкривати власні артефакти. Увімкніть **Дозволити поширення** в засобі перегляду й надішліть посилання, вибравши **Учасники Простору**, якщо артефакт має залишатися в межах Простору.
-
- Ні. Область пам’яті визначається користувачем і Базою. Щоб повторно використати пам’ять з іншої Бази, попросіть Cuppy прочитати пам’ять тієї Бази й зберегти відповідні частини в поточній Базі.
+
+ Ні. Область пам’яті визначається користувачем і Проєктом. Щоб повторно використати пам’ять з іншого Проєкту, попросіть Cuppy прочитати пам’ять того Проєкту й зберегти відповідні частини в поточному Проєкті.
@@ -268,11 +268,11 @@ AI Chat може підтримувати середовище однієї ро
- Відкрийте меню **+** і виберіть **Навички**, щоб імпортувати навички або керувати ними, чи введіть `/` у полі введення, щоб вибрати ввімкнену навичку. Під час імпорту виберіть, хто може використовувати навичку: особиста — у ваших чатах, Бази — для співавторів у тій самій Базі, а Простору — для всіх у цьому Просторі. Користувачі з правом керування Базою можуть додавати навички Бази, а власники й автори Простору — навички Простору. Якщо AI Chat показує файл `.skill`, натисніть **Установити** на картці файлу, щоб додати його.
+ Відкрийте меню **+** і виберіть **Навички**, щоб імпортувати навички або керувати ними, чи введіть `/` у полі введення, щоб вибрати ввімкнену навичку. Під час імпорту виберіть, хто може використовувати навичку: особиста — у ваших чатах, Проєкту — для співавторів у тому самому Проєкті, а Простору — для всіх у цьому Просторі. Користувачі з правом керування Проєктом можуть додавати навички Проєкту, а власники й автори Простору — навички Простору. Якщо AI Chat показує файл `.skill`, натисніть **Установити** на картці файлу, щоб додати його.
- Одночасно діє лише одна версія, а спільна командна версія має пріоритет над особистою копією: навичка Бази — над навичкою Простору, а навичка Простору — над особистою. У розмові застосунку або бота найвищий пріоритет має навичка, додана для цього застосунку чи бота. Щоб перевести всіх на нову версію, оновіть копію в Базі або Просторі.
+ Одночасно діє лише одна версія, а спільна командна версія має пріоритет над особистою копією: навичка Проєкту — над навичкою Простору, а навичка Простору — над особистою. У розмові застосунку або бота найвищий пріоритет має навичка, додана для цього застосунку чи бота. Щоб перевести всіх на нову версію, оновіть копію в Проєкті або Просторі.
diff --git a/uk/basic/ai/app-builder.mdx b/uk/basic/ai/app-builder.mdx
index b73fb4fa..35369265 100644
--- a/uk/basic/ai/app-builder.mdx
+++ b/uk/basic/ai/app-builder.mdx
@@ -5,21 +5,21 @@ description: Перетворюйте свої дані на власні веб
Доступно на всіх хмарних тарифних планах; для самостійного розгортання потрібен план Business або вище.
-Teable App Builder дає змогу перетворювати ваші бази даних на повнофункціональні, індивідуально налаштовані вебзастосунки без написання коду. Поєднуючи можливості структури даних із дизайном на основі ШІ, ви можете за лічені хвилини запускати внутрішні інструменти, клієнтські портали та інформаційні панелі даних.
+Teable App Builder дає змогу перетворювати ваші проєкти на повнофункціональні, індивідуально налаштовані вебзастосунки без написання коду. Поєднуючи можливості структури даних із дизайном на основі ШІ, ви можете за лічені хвилини запускати внутрішні інструменти, клієнтські портали та інформаційні панелі даних.
## Огляд
App Builder працює за принципом «від запиту до застосунку». Ви описуєте бажаний результат, а ШІ створює структуру, сторінки й логіку застосунку. Після цього можна точно налаштувати кожну деталь у візуальному редакторі або безпосередньо в коді.
-Використовуйте App Builder для створення власних інтерфейсів і автономних застосунків. Для інтерактивного аналізу даних і разових запитань у базі даних використовуйте [AI Chat](/uk/basic/ai/ai-chat).
+Використовуйте App Builder для створення власних інтерфейсів і автономних застосунків. Для інтерактивного аналізу даних і разових запитань у проєкті використовуйте [AI Chat](/uk/basic/ai/ai-chat).
## Створення застосунку
Створити застосунок можна двома основними способами:
-1. **З Бази**: у будь-якій Базі натисніть «Створити застосунок», щоб згенерувати застосунок, пов’язаний із поточними даними.
+1. **З Проєкту**: у будь-якому Проєкті натисніть «Створити застосунок», щоб згенерувати застосунок, пов’язаний із поточними даними.
2. **Із чату**: відкрийте AI Chat і введіть запит «Створи CRM-застосунок для цієї Таблиці клієнтів».
## Інтерфейс редактора застосунків
@@ -37,7 +37,7 @@ App Builder має подвійний інтерфейс для користув
- **Редагування природною мовою**: описуйте зміни, наприклад *«Зроби заголовок синім»* або *«Додай форму надсилання нових Записів»*.
- **Автоматична маршрутизація**: ШІ розуміє, про який компонент або сторінку ви говорите, і змінює їх безпосередньо.
- **Інтеграції**: коли для завдання застосунку потрібен доступ до стороннього облікового запису, App Builder може показати в панелі чату картку на кшталт **Підключити Slack**. Натисніть **Підключити**, щоб авторизуватися через OAuth. Натисніть **Пропустити**, щоб скасувати авторизацію; ШІ продовжить виконувати частини завдання, для яких це підключення не потрібне.
-- **Навички**: відкрийте меню **+** і виберіть **Навички**, щоб керувати навичками для цієї розмови про застосунок. Додана тут навичка доступна лише поточному застосунку; також можна використовувати навички, спільні для Бази й Простору застосунку. Введіть `/` у полі введення, щоб вибрати ввімкнену навичку.
+- **Навички**: відкрийте меню **+** і виберіть **Навички**, щоб керувати навичками для цієї розмови про застосунок. Додана тут навичка доступна лише поточному застосунку; також можна використовувати навички, спільні для Проєкту й Простору застосунку. Введіть `/` у полі введення, щоб вибрати ввімкнену навичку.
- **Керування файлами**: відкрийте **+** → **Більше** → **Керування файлами**, щоб переглянути файли в пісочниці застосунку. Тут можна попередньо переглядати підтримувані файли, завантажувати створені файли або видаляти непотрібні файли й папки.
- **Очистити розмову**: якщо поточна розмова відхилилася від теми, натисніть **Очистити чат** у нижньому правому куті панелі, щоб розпочати новий сеанс. Це очищує історію чату поточної розмови, але не видаляє сам застосунок. Під час першого використання з’являється підтвердження, яке за бажанням можна більше не показувати.
diff --git a/uk/basic/ai/connect-everything/migrate-airtable.mdx b/uk/basic/ai/connect-everything/migrate-airtable.mdx
index 20c4cf8c..c2047b4d 100644
--- a/uk/basic/ai/connect-everything/migrate-airtable.mdx
+++ b/uk/basic/ai/connect-everything/migrate-airtable.mdx
@@ -13,7 +13,7 @@ keywords:
## Початок перенесення
1. Створіть [Персональний токен доступу Airtable](https://airtable.com/create/tokens) із доступом до Баз, які потрібно перенести.
-2. Відкрийте цільову Базу Teable і запустіть AI Chat.
+2. Відкрийте цільовий Проєкт Teable і запустіть AI Chat.
3. Введіть `/`, виберіть **Connect Everything** і надайте токен.
4. Попросіть ШІ Teable перенести Базу Airtable, а потім перевірте результат.
diff --git a/uk/basic/ai/connect-everything/migrate-baserow.mdx b/uk/basic/ai/connect-everything/migrate-baserow.mdx
index 404cee25..94fd0070 100644
--- a/uk/basic/ai/connect-everything/migrate-baserow.mdx
+++ b/uk/basic/ai/connect-everything/migrate-baserow.mdx
@@ -13,7 +13,7 @@ keywords:
## Початок перенесення
1. Скопіюйте URL-адресу екземпляра Baserow і створіть [токен бази даних Baserow](https://baserow.io/user-docs/personal-api-tokens) із доступом на читання вихідних Таблиць.
-2. Відкрийте цільову Базу Teable і запустіть AI Chat.
+2. Відкрийте цільовий Проєкт Teable і запустіть AI Chat.
3. Введіть `/`, виберіть **Connect Everything** і надайте URL-адресу екземпляра та токен бази даних.
4. Попросіть ШІ Teable перенести базу даних Baserow, а потім перевірте результат.
diff --git a/uk/basic/ai/connect-everything/migrate-clickup.mdx b/uk/basic/ai/connect-everything/migrate-clickup.mdx
index 33e11dbb..9037fd16 100644
--- a/uk/basic/ai/connect-everything/migrate-clickup.mdx
+++ b/uk/basic/ai/connect-everything/migrate-clickup.mdx
@@ -16,7 +16,7 @@ keywords:
## Початок перенесення
1. У ClickUp відкрийте **Settings → Apps**, а потім скопіюйте персональний токен API. Див. [посібник з автентифікації](https://developer.clickup.com/docs/authentication) ClickUp.
-2. Відкрийте цільову Базу Teable і запустіть AI Chat.
+2. Відкрийте цільовий Проєкт Teable і запустіть AI Chat.
3. Введіть `/`, виберіть **Connect Everything** і надайте персональний токен API.
4. Попросіть ШІ Teable перенести доступні робочі простори ClickUp і створити Перегляди проєктів, інформаційні панелі та автоматизації, потрібні вашій команді.
diff --git a/uk/basic/ai/connect-everything/migrate-jira.mdx b/uk/basic/ai/connect-everything/migrate-jira.mdx
index 1dce0065..149c1867 100644
--- a/uk/basic/ai/connect-everything/migrate-jira.mdx
+++ b/uk/basic/ai/connect-everything/migrate-jira.mdx
@@ -16,7 +16,7 @@ keywords:
## Початок перенесення
1. Створіть [токен API Atlassian](https://id.atlassian.com/manage-profile/security/api-tokens) для облікового запису з доступом до проєктів Jira, які потрібно перенести. Див. посібник Atlassian [Базова автентифікація для REST API](https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/).
-2. Відкрийте цільову Базу Teable і запустіть AI Chat.
+2. Відкрийте цільовий Проєкт Teable і запустіть AI Chat.
3. Введіть `/`, виберіть **Connect Everything** і надайте URL-адресу сайту Jira Cloud, електронну адресу облікового запису та токен API.
4. Попросіть ШІ Teable перенести доступні проєкти Jira і створити Перегляди проєктів, інформаційні панелі та автоматизації, потрібні вашій команді.
diff --git a/uk/basic/ai/connect-everything/migrate-monday.mdx b/uk/basic/ai/connect-everything/migrate-monday.mdx
index 4344f0c3..82b95afa 100644
--- a/uk/basic/ai/connect-everything/migrate-monday.mdx
+++ b/uk/basic/ai/connect-everything/migrate-monday.mdx
@@ -16,7 +16,7 @@ keywords:
## Початок перенесення
1. У monday.com відкрийте меню профілю, виберіть **Developers**, а потім скопіюйте персональний токен API. Див. [посібник з автентифікації API](https://developer.monday.com/api-reference/docs/authentication) monday.com.
-2. Відкрийте цільову Базу Teable і запустіть AI Chat.
+2. Відкрийте цільовий Проєкт Teable і запустіть AI Chat.
3. Введіть `/`, виберіть **Connect Everything** і надайте персональний токен API.
4. Попросіть ШІ Teable перенести доступні робочі простори monday.com і створити Перегляди проєктів, інформаційні панелі та автоматизації, потрібні вашій команді.
diff --git a/uk/basic/ai/connect-everything/migrate-nocodb.mdx b/uk/basic/ai/connect-everything/migrate-nocodb.mdx
index e1ad2361..ff7f77fb 100644
--- a/uk/basic/ai/connect-everything/migrate-nocodb.mdx
+++ b/uk/basic/ai/connect-everything/migrate-nocodb.mdx
@@ -13,7 +13,7 @@ keywords:
## Початок перенесення
1. Скопіюйте URL-адресу екземпляра NocoDB і створіть [токен API NocoDB](https://nocodb.com/docs/product-docs/account-settings/api-tokens) із доступом до вихідної Бази.
-2. Відкрийте цільову Базу Teable і запустіть AI Chat.
+2. Відкрийте цільовий Проєкт Teable і запустіть AI Chat.
3. Введіть `/`, виберіть **Connect Everything** і надайте URL-адресу екземпляра та токен API.
4. Попросіть ШІ Teable перенести Базу NocoDB, а потім перевірте результат.
diff --git a/uk/basic/ai/connect-everything/migrate-smartsheet.mdx b/uk/basic/ai/connect-everything/migrate-smartsheet.mdx
index f6dcfbc5..84da682f 100644
--- a/uk/basic/ai/connect-everything/migrate-smartsheet.mdx
+++ b/uk/basic/ai/connect-everything/migrate-smartsheet.mdx
@@ -16,7 +16,7 @@ keywords:
## Початок перенесення
1. У Smartsheet відкрийте **Account → Personal Settings → API Access**, а потім згенеруйте токен доступу. Див. [посібник із початку роботи з API](https://developers.smartsheet.com/api/smartsheet/guides/getting-started) Smartsheet.
-2. Відкрийте цільову Базу Teable і запустіть AI Chat.
+2. Відкрийте цільовий Проєкт Teable і запустіть AI Chat.
3. Введіть `/`, виберіть **Connect Everything** і надайте токен доступу та середовище облікового запису: стандартне, Regions Europe або Gov.
4. Попросіть ШІ Teable перенести доступні робочі простори Smartsheet і створити Перегляди проєктів, інформаційні панелі та автоматизації, потрібні вашій команді.
diff --git a/uk/basic/ai/connect-everything/migrate-smartsuite.mdx b/uk/basic/ai/connect-everything/migrate-smartsuite.mdx
index 1edbd16e..deff324d 100644
--- a/uk/basic/ai/connect-everything/migrate-smartsuite.mdx
+++ b/uk/basic/ai/connect-everything/migrate-smartsuite.mdx
@@ -13,7 +13,7 @@ keywords:
## Початок перенесення
1. Отримайте [ключ API та ідентифікатор робочого простору SmartSuite](https://help.smartsuite.com/en/articles/6096587-retrieving-your-api-key-and-workspace-id).
-2. Відкрийте цільову Базу Teable і запустіть AI Chat.
+2. Відкрийте цільовий Проєкт Teable і запустіть AI Chat.
3. Введіть `/`, виберіть **Connect Everything** і надайте ключ API та ідентифікатор робочого простору.
4. Попросіть ШІ Teable перенести рішення SmartSuite, а потім перевірте результат.
diff --git a/uk/basic/ai/overview.mdx b/uk/basic/ai/overview.mdx
index 96e0ef6c..b4fe73ba 100644
--- a/uk/basic/ai/overview.mdx
+++ b/uk/basic/ai/overview.mdx
@@ -45,6 +45,6 @@ Teable інтегрує потужні можливості ШІ по всій
1. **Увімкніть ШІ** (лише для самостійного розгортання) — Teable Cloud постачається з готовим до використання вбудованим ШІ. Користувачам самостійно розгорнутих екземплярів слід спочатку виконати [Налаштування ШІ](/uk/basic/admin-panel/ai-setting). Якщо ви хочете підключити власні моделі, перейдіть до розділу [Власна модель ШІ](/uk/basic/ai/custom-model).
2. **Використовуйте AI Chat** — ставте запитання про дані або створюйте діаграми
-3. **Створюйте застосунки** — перетворіть свою Базу на вебзастосунок за допомогою простого запиту
+3. **Створюйте застосунки** — перетворіть свій Проєкт на вебзастосунок за допомогою простого запиту
4. **Створюйте Поля ШІ** — додавайте Поля на основі ШІ для автоматичного опрацювання даних
5. **Створюйте автоматизації** — використовуйте дії генерації за допомогою ШІ та виконання скрипту у своїх робочих процесах
diff --git a/uk/basic/ai/teable-skill.mdx b/uk/basic/ai/teable-skill.mdx
index 57339156..df99d61e 100644
--- a/uk/basic/ai/teable-skill.mdx
+++ b/uk/basic/ai/teable-skill.mdx
@@ -24,7 +24,7 @@ npx skills add https://github.com/teableio/agent-skills
```text Прості початкові запити wrap
-Створи просту CRM-таблицю в <База> {вставте URL Бази}.
+Створи просту CRM-таблицю в <Проєкт> {вставте URL Проєкту}.
```
```text Локальні файли → Teable wrap
diff --git a/uk/basic/authority-matrix.mdx b/uk/basic/authority-matrix.mdx
index e7daa5f3..50398e8f 100644
--- a/uk/basic/authority-matrix.mdx
+++ b/uk/basic/authority-matrix.mdx
@@ -1,13 +1,13 @@
---
title: "Огляд"
-description: "Налаштуйте області доступу для різних команд в одній Базі, щоб учасники могли переглядати, редагувати або експортувати лише потрібні їм дані."
+description: "Налаштуйте області доступу для різних команд в одному Проєкті, щоб учасники могли переглядати, редагувати або експортувати лише потрібні їм дані."
---
{/* mintlify-resync: 2026-05-28 */}
Доступно в плані Business і вище
-Коли відділи продажів, фінансів, операційна команда й керівництво спільно використовують одну Базу,
-дозволи визначають, хто може входити до Бази, які дані можна переглядати або редагувати,
+Коли відділи продажів, фінансів, операційна команда й керівництво спільно використовують один Проєкт,
+дозволи визначають, хто може входити до Проєкту, які дані можна переглядати або редагувати,
а також чи можна імпортувати або експортувати дані. Матриця повноважень допомагає командам
зберігати дані в одному місці, водночас розмежовуючи доступ відповідно до обов’язків.
@@ -24,7 +24,7 @@ description: "Налаштуйте області доступу для різн
| Доступ на рівні відділів | Відділ продажів може вести записи клієнтів, а фінансовий відділ бачить лише поля рахунків. |
| Записи за відповідальним | Торгові представники можуть переглядати й оновлювати лише призначені їм записи. |
| Обмежене введення даних | Учасники можуть створювати нові записи, не редагуючи й не видаляючи наявні. |
-| Конфіденційні поля у спільній Базі | Учасники можуть переглядати записи замовлень, не бачачи полів оплати або собівартості. |
+| Конфіденційні поля у спільному Проєкті | Учасники можуть переглядати записи замовлень, не бачачи полів оплати або собівартості. |
| Контрольовані застосунки й робочі процеси | Ролі можуть відкривати вибрані застосунки або робочі процеси, а недоступні вузли залишаються прихованими. |
## Як працюють дозволи
@@ -46,7 +46,7 @@ description: "Налаштуйте області доступу для різн
Щоб створити власну роль, натисніть `Додати роль`. На сторінці відомостей про роль призначте
співавторів, додайте короткий опис і налаштуйте доступ до кожного вузла
-Бази:
+Проєкту:
Докладніше про базові рівні дозволів Простору й Бази див. у розділі [Дозволи для співпраці](/uk/basic/space/space-permission).
+Докладніше про базові рівні дозволів Простору й Проєкту див. у розділі [Дозволи для співпраці](/uk/basic/space/space-permission).
diff --git a/uk/basic/authority-matrix/authority-matrix-practical-guide.mdx b/uk/basic/authority-matrix/authority-matrix-practical-guide.mdx
index acf68509..02100f08 100644
--- a/uk/basic/authority-matrix/authority-matrix-practical-guide.mdx
+++ b/uk/basic/authority-matrix/authority-matrix-practical-guide.mdx
@@ -4,9 +4,9 @@ description: "Налаштуйте ролі Матриці повноважен
---
{/* mintlify-resync: 2026-05-28 */}
-У цьому посібнику використовується База продажів із трьома таблицями: `Клієнти`, `Замовлення на продаж`
+У цьому посібнику використовується Проєкт продажів із трьома таблицями: `Клієнти`, `Замовлення на продаж`
і `Товари`. Мета — надати кожній ролі доступ до потрібних їй даних,
-не відкриваючи всю Базу.
+не відкриваючи весь Проєкт.
| Роль | Мета доступу |
| --- | --- |
@@ -26,7 +26,7 @@ description: "Налаштуйте ролі Матриці повноважен
- Відкрийте сторінку Матриці повноважень у Базі й увімкніть головний перемикач. Користувача,
+ Відкрийте сторінку Матриці повноважень у Проєкті й увімкніть головний перемикач. Користувача,
який її вмикає, буде додано як адміністратора.
diff --git a/uk/basic/automation.mdx b/uk/basic/automation.mdx
index 42a1d416..7feb3e8f 100644
--- a/uk/basic/automation.mdx
+++ b/uk/basic/automation.mdx
@@ -65,8 +65,8 @@ description: "Створюйте робочі процеси автоматиз
| Елемент | Обмеження |
|---|---|
-| Частота надсилання листів | 5 / секунду / Базу |
-| Частота отримання вебхуків | 50 / секунду / Базу, 2 / секунду / робочий процес |
+| Частота надсилання листів | 5 / секунду / Проєкт |
+| Частота отримання вебхуків | 50 / секунду / Проєкт, 2 / секунду / робочий процес |
| Розмір корисного навантаження вебхука | 4 МБ |
| Квота запусків і строк зберігання історії | Залежить від тарифу |
@@ -82,7 +82,7 @@ description: "Створюйте робочі процеси автоматиз
Teable Cloud також може надсилати критичні сповіщення про незвичайне використання, як-от значне добове зростання або раптовий сплеск за короткий час. Система враховує нещодавню добову й погодинну динаміку запусків, а точні порогові значення можуть змінюватися.
- Сповіщення відкриває **Налаштування Простору** → **Оплата**. За наявності даних там показано робочий процес і Базу з найбільшою кількістю запусків. Нагадування про квоту ґрунтуються на запусках, що враховуються в ліміті тарифу; під час перевірки незвичайного використання також можуть враховуватися нещодавні запуски зі станом **успішно**, **помилка** або **очікує**.
+ Сповіщення відкриває **Налаштування Простору** → **Оплата**. За наявності даних там показано робочий процес і Проєкт з найбільшою кількістю запусків. Нагадування про квоту ґрунтуються на запусках, що враховуються в ліміті тарифу; під час перевірки незвичайного використання також можуть враховуватися нещодавні запуски зі станом **успішно**, **помилка** або **очікує**.
Якщо таке використання очікуване, придбайте додаткову квоту автоматизації або змініть тариф. Якщо воно неочікуване, перегляньте робочий процес із найбільшою кількістю запусків і скоригуйте або призупиніть відповідну автоматизацію.
diff --git a/uk/basic/automation/actions/communication/send-email-overview.mdx b/uk/basic/automation/actions/communication/send-email-overview.mdx
index 20a1d93b..4ee5fe66 100644
--- a/uk/basic/automation/actions/communication/send-email-overview.mdx
+++ b/uk/basic/automation/actions/communication/send-email-overview.mdx
@@ -37,7 +37,7 @@ description: "Надсилайте персоналізовані електро
\* Потрібно вказати принаймні одне з полів **Кому** або **BCC**.
-**Обмеження частоти:** 5 листів / секунду / Базу.
+**Обмеження частоти:** 5 листів / секунду / Проєкт.
## Як налаштувати
diff --git a/uk/basic/automation/actions/records/create-record.mdx b/uk/basic/automation/actions/records/create-record.mdx
index 5afd4daa..83409724 100644
--- a/uk/basic/automation/actions/records/create-record.mdx
+++ b/uk/basic/automation/actions/records/create-record.mdx
@@ -30,7 +30,7 @@ description: "Створіть новий запис у будь-якій таб
## Як налаштувати
1. Додайте до робочого процесу дію **Створити запис**.
-2. Виберіть **Таблицю**, у якій потрібно створити запис. Стандартно це таблиця в тій самій Базі, але за допомогою [Міжбазового доступу](/uk/basic/automation/actions/records/cross-base) можна вибрати таблицю з іншої Бази.
+2. Виберіть **Таблицю**, у якій потрібно створити запис. Стандартно це таблиця в тому самому Проєкті, але за допомогою [Міжпроєктного доступу](/uk/basic/automation/actions/records/cross-base) можна вибрати таблицю з іншого Проєкту.
3. В області зіставлення полів відображаються всі поля цільової таблиці. Для кожного поля, яке потрібно заповнити:
- **Статичне значення:** введіть значення безпосередньо в поле (наприклад, «Нове» для поля «Статус»).
- **Динамічне значення:** натисніть кнопку **+** біля поля, щоб вставити змінну з попереднього кроку. Наприклад, вставте поле «Ім’я» запису-тригера, щоб скопіювати ім’я із запису, який запустив автоматизацію.
@@ -68,11 +68,11 @@ description: "Створіть новий запис у будь-якій таб
- Можна масово створювати записи, поєднавши цю дію з [Циклом (пакетна обробка)](../logic/loop-run). Наприклад, отримайте 50 записів з однієї таблиці й створіть 50 відповідних записів в іншій.
- Для незазначених полів використовуватимуться стандартні значення таблиці (за наявності), інакше вони залишаться порожніми.
- Поля пов’язаних записів очікують ідентифікатори Записів, а не відображувані значення. Щоб пов’язати запис, передавайте ідентифікатор Запису, а не його назву.
-- Використовуйте [Міжбазовий доступ](/uk/basic/automation/actions/records/cross-base), якщо цільова таблиця розташована в іншій Базі, ніж автоматизація.
+- Використовуйте [Міжпроєктний доступ](/uk/basic/automation/actions/records/cross-base), якщо цільова таблиця розташована в іншому Проєкті, ніж автоматизація.
## Пов’язані матеріали
- [Оновлення запису](/uk/basic/automation/actions/records/update-record) — змінення наявних записів замість створення нових
- [Отримання записів](/uk/basic/automation/actions/records/get-records) — отримання записів для використання як вхідних даних під час створення нових
-- [Міжбазовий доступ](/uk/basic/automation/actions/records/cross-base) — створення записів у таблицях поза поточною Базою
+- [Міжпроєктний доступ](/uk/basic/automation/actions/records/cross-base) — створення записів у таблицях поза поточним Проєктом
- [Цикл (пакетна обробка)](../logic/loop-run) — створення кількох записів за один крок дії
diff --git a/uk/basic/automation/actions/records/cross-base.mdx b/uk/basic/automation/actions/records/cross-base.mdx
index 1f8488e3..08ff116b 100644
--- a/uk/basic/automation/actions/records/cross-base.mdx
+++ b/uk/basic/automation/actions/records/cross-base.mdx
@@ -1,6 +1,6 @@
---
-title: "Міжбазовий доступ"
-description: "Читайте й записуйте дані в різних Базах у межах одного робочого процесу"
+title: "Міжпроєктний доступ"
+description: "Читайте й записуйте дані в різних Проєктах у межах одного робочого процесу"
---
{/* mintlify-resync: 2026-05-26 */}
@@ -10,74 +10,74 @@ description: "Читайте й записуйте дані в різних Ба
Зверніть увагу: якщо ви додасте дії вручну, ШІ надалі не розпізнаватиме й не змінюватиме їх.
-Стандартно дії автоматизації працюють із таблицями у власній Базі робочого процесу. Міжбазовий доступ дає робочому процесу змогу читати дані з іншої Бази й записувати їх до неї. Використовуйте його для робочих процесів, що охоплюють кілька відділів, проєктів або наборів даних.
+Стандартно дії автоматизації працюють із таблицями у власному Проєкті робочого процесу. Міжпроєктний доступ дає робочому процесу змогу читати дані з іншого Проєкту й записувати їх до нього. Використовуйте його для робочих процесів, що охоплюють кілька відділів, проєктів або наборів даних.
-Наприклад, автоматизація в Базі продажів може створити запис виконання замовлення в окремій Базі операцій, а робочий процес звітування — зібрати дані з кількох проєктних Баз в одному зведенні.
+Наприклад, автоматизація в Проєкті продажів може створити запис виконання замовлення в окремому Проєкті операцій, а робочий процес звітування — зібрати дані з кількох Проєктів в одному зведенні.
## Підтримувані дії
-| Дія | Підтримка міжбазового доступу |
+| Дія | Підтримка міжпроєктного доступу |
|---|---|
| Створити запис | Так |
| Оновити запис | Так |
| Отримати записи | Так |
-Це три дії, орієнтовані на записи. Іншим діям («Надіслати електронний лист», «HTTP-запит» тощо) міжбазовий доступ не потрібен, оскільки вони не спрямовані на певну таблицю.
+Це три дії, орієнтовані на записи. Іншим діям («Надіслати електронний лист», «HTTP-запит» тощо) міжпроєктний доступ не потрібен, оскільки вони не спрямовані на певну таблицю.
## Як налаштувати
1. Відкрийте в робочому процесі підтримувану дію («Створити запис», «Оновити запис» або «Отримати записи»).
-2. Біля засобу вибору **Таблиці** натисніть **Міжбазовий доступ**.
-3. Відкриється панель з усіма Просторами та Базами, до яких має доступ ваш обліковий запис. Виберіть цільовий **Простір**, а потім цільову **Базу**.
-4. Виберіть **Таблицю** в цій Базі. Якщо дія це підтримує, також можна вибрати певний **Перегляд**.
-5. Зіставте поля й налаштуйте дію як зазвичай. Тепер у списку полів відображаються поля цільової таблиці, а не поточної Бази.
+2. Біля засобу вибору **Таблиці** натисніть **Міжпроєктний доступ**.
+3. Відкриється панель з усіма Просторами та Проєктами, до яких має доступ ваш обліковий запис. Виберіть цільовий **Простір**, а потім цільовий **Проєкт**.
+4. Виберіть **Таблицю** в цьому Проєкті. Якщо дія це підтримує, також можна вибрати певний **Перегляд**.
+5. Зіставте поля й налаштуйте дію як зазвичай. Тепер у списку полів відображаються поля цільової таблиці, а не поточного Проєкту.
6. Збережіть дію.
## Конкретний приклад: від продажу до виконання замовлення
-Уявімо, що у вас є дві Бази:
+Уявімо, що у вас є два Проєкти:
-- **База продажів** — містить таблицю «Угоди», у якій відділ продажів відстежує укладені угоди.
-- **База операцій** — містить таблицю «Виконання замовлень», у якій операційна команда керує доставленням.
+- **Проєкт продажів** — містить таблицю «Угоди», у якій відділ продажів відстежує укладені угоди.
+- **Проєкт операцій** — містить таблицю «Виконання замовлень», у якій операційна команда керує доставленням.
Ви хочете автоматично створювати запис виконання замовлення після укладення угоди:
-1. **Тригер:** у Базі продажів використовуйте «Коли запис відповідає умовам» із фільтром: `Етап` дорівнює `Угоду укладено`.
-2. **Дія:** «Створити запис» із міжбазовим доступом до таблиці «Виконання замовлень» у Базі операцій.
+1. **Тригер:** у Проєкті продажів використовуйте «Коли запис відповідає умовам» із фільтром: `Етап` дорівнює `Угоду укладено`.
+2. **Дія:** «Створити запис» із міжпроєктним доступом до таблиці «Виконання замовлень» у Проєкті операцій.
3. **Зіставлення полів:** зіставте ім’я клієнта, продукт, кількість і адресу доставлення з відповідними полями таблиці «Виконання замовлень».
-Тепер після кожного укладення угоди в Базі операцій автоматично створюється запис виконання замовлення — передавати дані вручну не потрібно.
+Тепер після кожного укладення угоди в Проєкті операцій автоматично створюється запис виконання замовлення — передавати дані вручну не потрібно.
## Модель дозволів
-Коли ви створюєте, редагуєте або застосовуєте оновлення робочого процесу, Teable перевіряє кожну міжбазову дію відповідно до дозволів поточного редактора:
+Коли ви створюєте, редагуєте або застосовуєте оновлення робочого процесу, Teable перевіряє кожну міжпроєктну дію відповідно до дозволів поточного редактора:
-| Дія | Необхідний дозвіл у цільовій Базі |
+| Дія | Необхідний дозвіл у цільовому Проєкті |
|---|---|
| Отримати записи | Читання полів і записів |
| Створити запис | Читання полів і записів, а також створення записів |
| Оновити запис | Читання полів і записів, а також оновлення записів |
-Активні запуски робочого процесу використовують ідентичність середовища виконання автоматизації Teable для цільової Бази. У метаданих записів та інтерфейсах аудиту для записів, створених або оновлених міжбазовою дією, зазначено **Робот автоматизації**.
+Активні запуски робочого процесу використовують ідентичність середовища виконання автоматизації Teable для цільового Проєкту. У метаданих записів та інтерфейсах аудиту для записів, створених або оновлених міжпроєктною дією, зазначено **Робот автоматизації**.
### Що відбувається після зміни доступу
-Якщо поточний редактор не має необхідного дозволу в цільовій Базі, Teable не дає йому додавати або змінювати міжбазові дії, спрямовані на цю Базу. Якщо чернетка вже містить недоступні редактору міжбазові дії, Teable також блокує застосування цієї чернетки. Уже активна версія продовжує працювати; Teable знову перевірить дозволи, коли хтось наступного разу редагуватиме або застосовуватиме робочий процес.
+Якщо поточний редактор не має необхідного дозволу в цільовому Проєкті, Teable не дає йому додавати або змінювати міжпроєктні дії, спрямовані на цей Проєкт. Якщо чернетка вже містить недоступні редактору міжпроєктні дії, Teable також блокує застосування цієї чернетки. Уже активна версія продовжує працювати; Teable знову перевірить дозволи, коли хтось наступного разу редагуватиме або застосовуватиме робочий процес.
Щоб усунути помилку дозволів під час редагування або застосування робочого процесу:
-1. Попросіть користувача з доступом до обох Баз відредагувати й застосувати робочий процес.
-2. Або відновіть необхідні дозволи в цільовій Базі, а потім знову застосуйте робочий процес.
+1. Попросіть користувача з доступом до обох Проєктів відредагувати й застосувати робочий процес.
+2. Або відновіть необхідні дозволи в цільовому Проєкті, а потім знову застосуйте робочий процес.
## Поради
-- Міжбазовий доступ може охоплювати Бази в різних **Просторах**. Редактор, який налаштовує або застосовує робочий процес, повинен мати необхідні дозволи в цільовій Базі.
-- Під час зіставлення полів між Базами типи полів мають бути сумісними. Наприклад, не можна зіставити текстове поле з полем вкладення.
-- Якщо змінити структуру цільової Бази (перейменувати таблиці, видалити поля), міжбазові дії, що посилаються на ці таблиці й поля, перестануть працювати. Після структурних змін оновіть робочий процес.
-- Для складних міжбазових робочих процесів доцільно централізувати автоматизації в одній «центральній» Базі, щоб підтримувати порядок.
+- Міжпроєктний доступ може охоплювати Проєкти в різних **Просторах**. Редактор, який налаштовує або застосовує робочий процес, повинен мати необхідні дозволи в цільовому Проєкті.
+- Під час зіставлення полів між Проєктами типи полів мають бути сумісними. Наприклад, не можна зіставити текстове поле з полем вкладення.
+- Якщо змінити структуру цільового Проєкту (перейменувати таблиці, видалити поля), міжпроєктні дії, що посилаються на ці таблиці й поля, перестануть працювати. Після структурних змін оновіть робочий процес.
+- Для складних міжпроєктних робочих процесів доцільно централізувати автоматизації в одному «центральному» Проєкті, щоб підтримувати порядок.
## Пов’язані матеріали
-- [Створення запису](/uk/basic/automation/actions/records/create-record) — створення записів у поточній або іншій Базі
-- [Оновлення запису](/uk/basic/automation/actions/records/update-record) — оновлення записів у поточній або іншій Базі
-- [Отримання записів](/uk/basic/automation/actions/records/get-records) — отримання записів із поточної або іншої Бази
+- [Створення запису](/uk/basic/automation/actions/records/create-record) — створення записів у поточному або іншому Проєкті
+- [Оновлення запису](/uk/basic/automation/actions/records/update-record) — оновлення записів у поточному або іншому Проєкті
+- [Отримання записів](/uk/basic/automation/actions/records/get-records) — отримання записів із поточного або іншого Проєкту
diff --git a/uk/basic/automation/actions/records/get-records.mdx b/uk/basic/automation/actions/records/get-records.mdx
index 99ad12d0..1d30c14e 100644
--- a/uk/basic/automation/actions/records/get-records.mdx
+++ b/uk/basic/automation/actions/records/get-records.mdx
@@ -33,7 +33,7 @@ description: "Отримуйте записи з таблиці з необов
## Як налаштувати
1. Додайте до робочого процесу дію **Отримати записи**.
-2. Виберіть **Таблицю**, до якої потрібно надіслати запит. Якщо таблиця розташована в іншій Базі, скористайтеся [Міжбазовим доступом](/uk/basic/automation/actions/records/cross-base).
+2. Виберіть **Таблицю**, до якої потрібно надіслати запит. Якщо таблиця розташована в іншому Проєкті, скористайтеся [Міжпроєктним доступом](/uk/basic/automation/actions/records/cross-base).
3. (Необов’язково) Виберіть **Перегляд**, щоб успадкувати його налаштування фільтра, сортування та видимості полів.
4. (Необов’язково) Додайте умови **Фільтра**, щоб звузити результати. Наприклад, `Статус` дорівнює `Активний`, а `Дата виконання` — раніше за сьогодні.
5. (Необов’язково) Задайте **Пропустити** й **Взяти** для пагінації. Наприклад, «Пропустити» 0 і «Взяти» 100, щоб отримати перші 100 записів.
@@ -80,11 +80,11 @@ description: "Отримуйте записи з таблиці з необов
- Дія «Отримати записи» не змінює даних — вона працює лише для читання.
- Якщо запит не поверне жодного запису, наступні кроки, що посилаються на результати, отримають порожній масив. Переконайтеся, що робочий процес належно обробляє цю ситуацію (наприклад, не надсилає лист зі словами «ось ваші результати», коли результатів немає).
- Фільтри в дії «Отримати записи» працюють так само, як фільтри Перегляду: умови можна поєднувати логікою І/АБО.
-- Під час використання міжбазового доступу запит виконується з дозволами автора робочого процесу. Якщо автор втратить доступ до цільової Бази, крок завершиться помилкою.
+- Під час використання міжпроєктного доступу запит виконується з дозволами автора робочого процесу. Якщо автор втратить доступ до цільового Проєкту, крок завершиться помилкою.
## Пов’язані матеріали
-- [Міжбазовий доступ](/uk/basic/automation/actions/records/cross-base) — надсилання запитів до таблиць в інших Базах
+- [Міжпроєктний доступ](/uk/basic/automation/actions/records/cross-base) — надсилання запитів до таблиць в інших Проєктах
- [Цикл (пакетна обробка)](../logic/loop-run) — перебір масиву результатів
- [Створення запису](/uk/basic/automation/actions/records/create-record) — створення записів на основі отриманих даних
- [Оновлення запису](/uk/basic/automation/actions/records/update-record) — оновлення записів, знайдених дією «Отримати записи»
diff --git a/uk/basic/automation/actions/records/update-record.mdx b/uk/basic/automation/actions/records/update-record.mdx
index f0ec9b07..7046c837 100644
--- a/uk/basic/automation/actions/records/update-record.mdx
+++ b/uk/basic/automation/actions/records/update-record.mdx
@@ -93,11 +93,11 @@ description: "Змінюйте поля наявного запису в меж
- Оновлення запису може запустити інші автоматизації, що відстежують ту саму таблицю. Пам’ятайте про каскадні наслідки.
- Під час оновлення кількох записів за допомогою ідентифікаторів через кому всі записи отримують однакові значення полів. Для різних значень використовуйте крок [Цикл](../logic/loop-run).
- Щоб очистити поле, зіставте його з порожнім значенням. Якщо просто залишити поле незіставленим, воно *не* очиститься.
-- Використовуйте [Міжбазовий доступ](/uk/basic/automation/actions/records/cross-base), щоб оновлювати записи в таблиці, розташованій в іншій Базі.
+- Використовуйте [Міжпроєктний доступ](/uk/basic/automation/actions/records/cross-base), щоб оновлювати записи в таблиці, розташованій в іншому Проєкті.
## Пов’язані матеріали
- [Створення запису](/uk/basic/automation/actions/records/create-record) — додавання нових записів замість змінення наявних
- [Отримання записів](/uk/basic/automation/actions/records/get-records) — отримання записів для пошуку їхніх ідентифікаторів перед оновленням
-- [Міжбазовий доступ](/uk/basic/automation/actions/records/cross-base) — оновлення записів у таблицях поза поточною Базою
+- [Міжпроєктний доступ](/uk/basic/automation/actions/records/cross-base) — оновлення записів у таблицях поза поточним Проєктом
- [Цикл (пакетна обробка)](../logic/loop-run) — оновлення кількох записів різними значеннями
diff --git a/uk/basic/automation/ai/scripting/runscript.mdx b/uk/basic/automation/ai/scripting/runscript.mdx
index 0dd27459..b8e49d36 100644
--- a/uk/basic/automation/ai/scripting/runscript.mdx
+++ b/uk/basic/automation/ai/scripting/runscript.mdx
@@ -210,7 +210,7 @@ output.set("records", data);
### Виклик ШІ зі сценарію
-`POST /api/automation/runtime/ai` надсилає запит моделі ШІ вашої Бази. База визначається з контексту автоматизації, тому її ідентифікатор не потрібен. Тіло приймає `prompt`, а також необов’язкові `attachments`, `modelKey`, `temperature` й `outputType`; відповідь має формат `{ "message": ... }`.
+`POST /api/automation/runtime/ai` надсилає запит моделі ШІ вашого Проєкту. Проєкт визначається з контексту автоматизації, тому її ідентифікатор не потрібен. Тіло приймає `prompt`, а також необов’язкові `attachments`, `modelKey`, `temperature` й `outputType`; відповідь має формат `{ "message": ... }`.
Вкладення — це елементи `{ url, mimetype, name }`, до 10 на один виклик, кожен розміром до 20 МБ і з часом завантаження до 30 секунд; підтримуються зображення, PDF і документи Office. Стандартна модель чату може не читати зображення та подібні вкладення, тому під час надсилання файлів передавайте `modelKey`. Кожен виклик витрачає кредити.
diff --git a/uk/basic/automation/examples/api-automation.mdx b/uk/basic/automation/examples/api-automation.mdx
index 92f9c074..3fd1236f 100644
--- a/uk/basic/automation/examples/api-automation.mdx
+++ b/uk/basic/automation/examples/api-automation.mdx
@@ -17,7 +17,7 @@ description: "Створюйте й налаштовуйте робочі про
## Передумови
- Персональний токен доступу (PAT). Див. [Токен доступу](/uk/api-doc/token).
-- Ідентифікатори Бази, таблиці й полів. Див. [Отримання ідентифікаторів](/uk/api-doc/get-id).
+- Ідентифікатори Проєкту, таблиці й полів. Див. [Отримання ідентифікаторів](/uk/api-doc/get-id).
## Допоміжні функції
@@ -74,7 +74,7 @@ await api("PUT", `/base/${baseId}/workflow/${wf.id}/active`, {
## Рекомендації
-- Використовуйте PAT із мінімальними привілеями — обмежте його лише потрібними Просторами/Базами.
+- Використовуйте PAT із мінімальними привілеями — обмежте його лише потрібними Просторами/Проєктами.
- Зберігайте токени у змінних середовища й ніколи не вбудовуйте їх безпосередньо в код.
- Перед увімкненням використовуйте **Перевірити вузол** для перевірки.
- Див. повний [Довідник API автоматизації](/uk/api-reference/automation/put-base-workflow-action).
diff --git a/uk/basic/automation/examples/cross-base-sync.mdx b/uk/basic/automation/examples/cross-base-sync.mdx
index 1df86ac0..33bc8e32 100644
--- a/uk/basic/automation/examples/cross-base-sync.mdx
+++ b/uk/basic/automation/examples/cross-base-sync.mdx
@@ -1,6 +1,6 @@
---
-title: "Синхронізація записів між кількома Базами"
-description: "Автоматично копіюйте нові або оновлені записи до іншої Бази за допомогою міжбазового доступу"
+title: "Синхронізація записів між кількома Проєктами"
+description: "Автоматично копіюйте нові або оновлені записи до іншого Проєкту за допомогою міжпроєктного доступу"
---
Рекомендуємо створювати приклади автоматизацій безпосередньо в AI Chat. Просто опишіть потрібний робочий процес, і ШІ повністю налаштує його за вас, зокрема тригер, дії, сценарій і конфігурацію.
@@ -9,18 +9,18 @@ description: "Автоматично копіюйте нові або оновл
Відкрийте AI Chat на правій бічній панелі таблиці й опишіть ШІ бажаний результат. Наприклад:
-*«Коли в Базі продажів створюється нове замовлення, створи відповідний запис у Базі виконання замовлень з ідентифікатором замовлення, іменем клієнта, сумою та статусом “Очікує виконання”»*
+*«Коли в Проєкті продажів створюється нове замовлення, створи відповідний запис у Проєкті виконання замовлень з ідентифікатором замовлення, іменем клієнта, сумою та статусом “Очікує виконання”»*
ШІ автоматично створить повний робочий процес. Ви зможете переглянути згенерований сценарій, перевірити його з реальними даними й увімкнути робочий процес, коли все буде готово.
## Налаштування вручну
-1. **Створіть робочий процес** у Базі **Продажі** з тригером **Коли створено запис**.
+1. **Створіть робочий процес** у Проєкті **Продажі** з тригером **Коли створено запис**.
2. Виберіть таблицю **Замовлення**.
3. Натисніть **Перевірити**.
4. **Додайте дію** → **Створити запис**.
-5. Натисніть **Міжбазовий доступ** біля засобу вибору таблиці.
-6. Перейдіть до Бази **Виконання замовлень** і виберіть таблицю **Замовлення**.
+5. Натисніть **Міжпроєктний доступ** біля засобу вибору таблиці.
+6. Перейдіть до Проєкту **Виконання замовлень** і виберіть таблицю **Замовлення**.
7. Зіставте поля:
- Ідентифікатор замовлення → ідентифікатор замовлення з тригера (через **+**)
- Клієнт → клієнт із тригера
@@ -31,6 +31,6 @@ description: "Автоматично копіюйте нові або оновл
## Двостороння синхронізація
Щоб синхронізувати оновлення в обох напрямках:
-1. Створіть другий робочий процес у Базі **Виконання замовлень**.
-2. Використовуйте **Коли оновлено запис** → **Оновити запис** із міжбазовим доступом, спрямованим назад до Бази продажів.
+1. Створіть другий робочий процес у Проєкті **Виконання замовлень**.
+2. Використовуйте **Коли оновлено запис** → **Оновити запис** із міжпроєктним доступом, спрямованим назад до Проєкту продажів.
3. Використовуйте фільтр, щоб уникнути нескінченних циклів, — наприклад, запускайте процес лише після зміни певних полів і перед оновленням перевіряйте, чи справді значення відрізняється.
diff --git a/uk/basic/automation/trigger/external/webhook-received.mdx b/uk/basic/automation/trigger/external/webhook-received.mdx
index b61b553b..c3c481c8 100644
--- a/uk/basic/automation/trigger/external/webhook-received.mdx
+++ b/uk/basic/automation/trigger/external/webhook-received.mdx
@@ -78,7 +78,7 @@ Teable автоматично аналізує JSON і створює імено
## Тестування вебхука
-Найпростіше виконати тестування за допомогою `curl` у командному рядку. Скопіюйте справжню URL-адресу з панелі тригера, а не вводьте її вручну: вона містить ідентифікатори Бази й робочого процесу.
+Найпростіше виконати тестування за допомогою `curl` у командному рядку. Скопіюйте справжню URL-адресу з панелі тригера, а не вводьте її вручну: вона містить ідентифікатори Проєкту й робочого процесу.
**Без авторизації:**
@@ -120,7 +120,7 @@ curl -X POST https://your-teable-instance.com/api/webhook/base/bseXXXXXXXXXXXX/w
| Область | Обмеження |
|---|---|
-| На Базу | 50 запитів / секунду |
+| На Проєкт | 50 запитів / секунду |
| На робочий процес | 2 запити / секунду |
Запити, що перевищують обмеження частоти, отримають відповідь HTTP 429. Якщо зовнішня система надсилає запити сплесками, реалізуйте логіку повторних спроб з експоненційною затримкою.
diff --git a/uk/basic/base.mdx b/uk/basic/base.mdx
index 0dbacc0f..4ed99078 100644
--- a/uk/basic/base.mdx
+++ b/uk/basic/base.mdx
@@ -1,42 +1,44 @@
---
title: "Огляд"
-description: "Створюйте, керуйте, імпортуйте й експортуйте Бази. Переносьте дані між Просторами Teable Cloud або між екземплярами Cloud і Self-Hosted за допомогою файлів .tea."
+description: "Створюйте, керуйте, імпортуйте й експортуйте Проєкти. Переносьте дані між Просторами Teable Cloud або між екземплярами Cloud і Self-Hosted за допомогою файлів .tea."
---
{/* mintlify-resync: 2026-05-26 */}
-База — це засіб зберігання й обробки всієї інформації певного проєкту. Кожен Простір може містити кілька Баз, і кожна База працює незалежно, забезпечуючи зрозумілу інформаційну структуру для окремих проєктів або наборів таблиць.
+Проєкт об’єднує пов’язані таблиці, застосунки й автоматизації. Кожен Простір може містити кілька проєктів, кожен із власними ресурсами та правами спільної роботи.
-Якщо ви ще не знайомі з Базами, уявіть їх як книги Excel, кожна з яких може містити кілька аркушів.
+Проєкт — назва ресурсу `base` в інтерфейсі. В API та CLI зберігаються `base`, поля на кшталт `baseId`, префікс ідентифікатора `bse` та URL `/base/...`.
-## Створення Баз і керування ними
+Якщо ви ще не знайомі з Проєктами, уявіть їх як книги Excel, кожна з яких може містити кілька аркушів.
-### Додавання Бази
+## Створення Проєктів і керування ними {#створення-баз-і-керування-ними}
+
+### Додавання Проєкту {#додавання-бази}
1. Відкрийте Простір
-2. Натисніть «Створити Базу» у верхньому правому куті
+2. Натисніть «Створити Проєкт» у верхньому правому куті
-### Перейменування/видалення Бази
+### Перейменування/видалення Проєкту {#перейменуваннявидалення-бази}
1. Відкрийте Простір
-2. Наведіть вказівник на Базу
+2. Наведіть вказівник на Проєкт
3. Натисніть кнопку «···», щоб відкрити меню
4. Виберіть «Перейменувати» або «Видалити»
-### Упорядкування ресурсів у Базі
+### Упорядкування ресурсів у Проєкті {#упорядкування-ресурсів-у-базі}
-Після відкриття Бази на лівій бічній панелі відображаються її ресурси: таблиці, застосунки й автоматизації. Упорядковуйте їх у папках, щоб полегшити навігацію великими Базами.
+Після відкриття Проєкту на лівій бічній панелі відображаються його ресурси: таблиці, застосунки й автоматизації. Упорядковуйте їх у папках, щоб полегшити навігацію великими Проєктами.
Поширені операції:
@@ -46,40 +48,40 @@ description: "Створюйте, керуйте, імпортуйте й екс
- **Додавання описів**: для таблиць, застосунків і автоматизацій натисніть **Додати опис** під назвою ресурсу в заголовку. Записуйте призначення, відповідального, примітки щодо передавання або правила використання. Teable показує опис під час першого відкриття ресурсу та ще раз після його зміни.
- **Перевірка відомостей про вузол**: відкрийте меню ресурсу `...` й виберіть **Відомості про вузол**, щоб переглянути ідентифікатор папки, таблиці, автоматизації або застосунку, а також відомості про створення й змінення.
-### Дублювання Бази до іншого Простору {#duplicate-a-base-to-another-space}
+### Дублювання Проєкту до іншого Простору {#duplicate-a-base-to-another-space}
-Крок 1. У Просторі виберіть Базу, яку потрібно продублювати;
+Крок 1. У Просторі виберіть Проєкт, який потрібно продублювати;
-Крок 2. Натисніть піктограму меню й виберіть «Копіювати Базу»;
+Крок 2. Натисніть піктограму меню й виберіть «Копіювати Проєкт»;
Крок 3. У спливному вікні виберіть цільовий Простір. У ньому потрібні дозволи автора.
-Для великих Баз Teable показує поступ у діалоговому вікні дублювання під час копіювання структури Бази, записів і вкладень. Не закривайте вікно до завершення. Історія редакцій та учасники не копіюються.
+Для великих Проєктів Teable показує поступ у діалоговому вікні дублювання під час копіювання структури Проєкту, записів і вкладень. Не закривайте вікно до завершення. Історія редакцій та учасники не копіюються.
-Якщо База містить поля «Посилання», «Пошук», «Зведення», «Умовний пошук» або «Умовне зведення», спрямовані на інший Простір, Teable покаже ці поля перед дублюванням. Якщо продовжити, Teable перетворить їх в **Однорядковий текст** у продубльованій Базі.
+Якщо Проєкт містить поля «Посилання», «Пошук», «Зведення», «Умовний пошук» або «Умовне зведення», спрямовані на інший Простір, Teable покаже ці поля перед дублюванням. Якщо продовжити, Teable перетворить їх в **Однорядковий текст** у продубльованому Проєкті.
-### Переміщення Бази між Просторами
+### Переміщення Проєкту між Просторами {#переміщення-бази-між-просторами}
-Маючи необхідні дозволи Простору, Базу можна перемістити до іншого Простору. Якщо після переміщення поля зв’язків будуть спрямовані між Просторами, Teable попередить вас і перелічить відповідні поля. Після підтвердження ці поля буде перетворено на **Однорядковий текст**.
+Маючи необхідні дозволи Простору, Проєкт можна перемістити до іншого Простору. Якщо після переміщення поля зв’язків будуть спрямовані між Просторами, Teable попередить вас і перелічить відповідні поля. Після підтвердження ці поля буде перетворено на **Однорядковий текст**.
-## Імпорт та експорт Баз
+## Імпорт та експорт Проєктів {#імпорт-та-експорт-баз}
Використовуйте AI Chat, щоб перенести до Teable дані з Airtable, Baserow, NocoDB, SmartSuite та інших систем.
-### Імпорт Бази (перенесення даних)
+### Імпорт Проєкту (перенесення даних) {#імпорт-бази-перенесення-даних}
-Формат `.tea` імпортує повну Базу з усіма таблицями, полями, даними й налаштуваннями. Це корисно для:
-- **Перенесення даних**: переміщення Баз між екземплярами Teable (наприклад, із Cloud до Self-Hosted)
-- **Відновлення резервної копії**: відновлення раніше експортованої Бази
-- **Обміну шаблонами**: передавання повної структури Бази іншим командам
+Формат `.tea` імпортує повний Проєкт з усіма таблицями, полями, даними й налаштуваннями. Це корисно для:
+- **Перенесення даних**: переміщення Проєктів між екземплярами Teable (наприклад, із Cloud до Self-Hosted)
+- **Відновлення резервної копії**: відновлення раніше експортованого Проєкту
+- **Обміну шаблонами**: передавання повної структури Проєкту іншим командам
**Кроки:**
1. Відкрийте Простір
@@ -89,19 +91,19 @@ description: "Створюйте, керуйте, імпортуйте й екс
-Щоб створити Базу з Airtable, виберіть **Імпортувати з Airtable** в тому самому діалоговому вікні.
+Щоб створити Проєкт з Airtable, виберіть **Імпортувати з Airtable** в тому самому діалоговому вікні.
-### Експорт Бази (резервне копіювання й перенесення) {#export-base-backup-&-migration}
+### Експорт Проєкту (резервне копіювання й перенесення) {#export-base-backup-&-migration}
-Експортуйте Базу до файлу `.tea` для резервного копіювання або перенесення. Експортований файл містить усі таблиці, поля, дані, Перегляди й налаштування.
+Експортуйте Проєкт до файлу `.tea` для резервного копіювання або перенесення. Експортований файл містить усі таблиці, поля, дані, Перегляди й налаштування.
**Кроки:**
1. Відкрийте Простір
-2. Наведіть вказівник на Базу для експорту
+2. Наведіть вказівник на Проєкт для експорту
3. Натисніть кнопку 「···」, щоб відкрити меню
4. Виберіть 「Експорт」
5. Залиште **Додати записи** ввімкненим, щоб експортувати дані записів. Вимкніть, щоб експортувати лише структуру й налаштування.
@@ -110,28 +112,28 @@ description: "Створюйте, керуйте, імпортуйте й екс
-- Щоб перенести дані між екземплярами Teable, експортуйте Базу з вихідного екземпляра, а потім імпортуйте файл `.tea` до цільового. Усі дані й налаштування буде збережено.
-- Teable перетворює поля міжбазових зв’язків на поля **Однорядковий текст** в експортованому файлі.
-- Під час дублювання або переміщення Бази між Просторами поля зв’язків між Просторами перетворюються на **Однорядковий текст**.
+- Щоб перенести дані між екземплярами Teable, експортуйте Проєкт з вихідного екземпляра, а потім імпортуйте файл `.tea` до цільового. Усі дані й налаштування буде збережено.
+- Teable перетворює поля міжпроєктних зв’язків на поля **Однорядковий текст** в експортованому файлі.
+- Під час дублювання або переміщення Проєкту між Просторами поля зв’язків між Просторами перетворюються на **Однорядковий текст**.
-## Поширення Бази
+## Поширення Проєкту {#поширення-бази}
-Базами можна ділитися через загальнодоступні посилання. Область поширення може охоплювати всю Базу або вибраний елемент.
+Проєктами можна ділитися через загальнодоступні посилання. Область поширення може охоплювати весь Проєкт або вибраний елемент.
-1. Відкрийте цільову Базу
-2. Відкрийте меню поширення Бази або вибраного елемента
+1. Відкрийте цільовий Проєкт
+2. Відкрийте меню поширення Проєкту або вибраного елемента
3. Увімкніть **Опублікувати в Інтернеті**
4. Скопіюйте посилання або QR-код
@@ -139,29 +141,29 @@ description: "Створюйте, керуйте, імпортуйте й екс
| Область | Опис |
|------|------|
-| **Поширити всю Базу** | Поширює всі елементи поточної Бази. Нові таблиці й папки, додані пізніше, включаються автоматично. |
+| **Поширити весь Проєкт** | Поширює всі елементи поточного Проєкту. Нові таблиці й папки, додані пізніше, включаються автоматично. |
| **Поширити вибраний елемент** | Поширює поточний вибраний елемент. Якщо поширено папку, включаються її дочірні елементи. |
У налаштуваннях поширення можна задати дозволи посилання, **Дозволити читачам копіювати дані**, доступ за паролем, повторно згенерувати або видалити посилання й скопіювати конфігурацію вбудовування.
Якщо область поширення містить застосунок, його потрібно опублікувати, перш ніж він стане доступним за загальнодоступним посиланням.
-## Функції в Базі
+## Функції в Проєкті {#функції-в-базі}
-База може містити кілька таблиць для запису й упорядкування робочої або ділової інформації.
+Проєкт може містити кілька таблиць для запису й упорядкування робочої або ділової інформації.
-Наприклад, База керування клієнтами може мати окремі таблиці «Компанії клієнтів», «Контакти клієнтів» і «Подальша робота з клієнтами», а База керування переговорними кімнатами — таблиці «Керування переговорними кімнатами», «Обладнання переговорних кімнат» і «Бронювання переговорних кімнат».
+Наприклад, Проєкт керування клієнтами може мати окремі таблиці «Компанії клієнтів», «Контакти клієнтів» і «Подальша робота з клієнтами», а Проєкт керування переговорними кімнатами — таблиці «Керування переговорними кімнатами», «Обладнання переговорних кімнат» і «Бронювання переговорних кімнат».
-Тому більшість функцій у Базі пов’язана з таблицями:
+Тому більшість функцій у Проєкті пов’язана з таблицями:
-* **Створення таблиць**: Бази дають змогу створювати таблиці відповідно до потреб проєкту й визначати їх структуру, поля та типи даних.
-* **Редагування таблиць**: користувачі можуть редагувати наявні таблиці в Базі, зокрема додавати, видаляти й змінювати записи.
-* **Експорт та імпорт даних**: Бази підтримують експорт даних у CSV та імпорт у форматах CSV і XLSX.
+* **Створення таблиць**: Проєкти дають змогу створювати таблиці відповідно до потреб проєкту й визначати їх структуру, поля та типи даних.
+* **Редагування таблиць**: користувачі можуть редагувати наявні таблиці в Проєкті, зокрема додавати, видаляти й змінювати записи.
+* **Експорт та імпорт даних**: Проєкти підтримують експорт даних у CSV та імпорт у форматах CSV і XLSX.
Докладніше про таблиці див. у [розділі «Таблиці»](/uk/basic/table).
diff --git a/uk/basic/credential.mdx b/uk/basic/credential.mdx
index b3a30577..59befaf6 100644
--- a/uk/basic/credential.mdx
+++ b/uk/basic/credential.mdx
@@ -39,7 +39,7 @@ description: Керуйте своїми підключеннями й секр
Кожне надання потребує **Назви змінної** — псевдоніма, під яким облікові дані відомі всередині цього застосунку чи автоматизації. Правила найменування такі самі, як для ключа секрету, і саме цю назву читає код.
-У панелі також можуть бути заглушки **Не привʼязано**. Копіювання застосунку, дублювання робочого процесу, імпорт або дублювання бази переносять псевдоніми, яких очікує код, але не самі облікові дані. Натисніть **Привʼязати мої**, щоб підставити власні й застосунок або автоматизація запрацювали.
+У панелі також можуть бути заглушки **Не привʼязано**. Копіювання застосунку, дублювання робочого процесу, імпорт або дублювання проєкту переносять псевдоніми, яких очікує код, але не самі облікові дані. Натисніть **Привʼязати мої**, щоб підставити власні й застосунок або автоматизація запрацювали.
Якщо за псевдонімом стоять чужі облікові дані, кнопка **Замінити моїм** переводить його на ваші. **Лише відкликати доступ (залишити заглушку)** знімає привʼязку й лишає заглушку, тож код змінювати не потрібно.
diff --git a/uk/basic/security.mdx b/uk/basic/security.mdx
index 7d18c42e..02ad25cb 100644
--- a/uk/basic/security.mdx
+++ b/uk/basic/security.mdx
@@ -112,13 +112,13 @@ Teable пропонує кілька способів резервного ко
| Спосіб | Опис | Сценарій використання |
|--------|-------------|----------|
-| **[Експорт Бази](/uk/basic/base#export-base-backup-&-migration)** | Завантаження всієї Бази як файлу `.tea` (структура, дані, автоматизації) | Повна резервна копія, перенесення |
-| **[Дублювання Бази](/uk/basic/base#duplicate-a-base-to-another-space)** | Створення копії Бази в Teable | Швидкий знімок |
+| **[Експорт Проєкту](/uk/basic/base#export-base-backup-&-migration)** | Завантаження всього Проєкту як файлу `.tea` (структура, дані, автоматизації) | Повна резервна копія, перенесення |
+| **[Дублювання Проєкту](/uk/basic/base#duplicate-a-base-to-another-space)** | Створення копії Проєкту в Teable | Швидкий знімок |
| **[Експорт CSV](/uk/basic/table/export)** | Експорт даних окремої Таблиці | Переносимість даних |
| **[Експорт через API](/uk/api-doc/record/get)** | Програмний експорт Записів через REST API | Автоматизовані резервні копії |
-Резервні копії Баз можна створювати вручну: експортувати всю Базу як файл `.tea`, окремі Таблиці як файли CSV або отримувати дані через API Teable.
+Резервні копії Проєктів можна створювати вручну: експортувати весь Проєкт як файл `.tea`, окремі Таблиці як файли CSV або отримувати дані через API Teable.
## Єдиний вхід (SSO)
diff --git a/uk/basic/space.mdx b/uk/basic/space.mdx
index ffe76a62..d2539527 100644
--- a/uk/basic/space.mdx
+++ b/uk/basic/space.mdx
@@ -64,15 +64,15 @@ description: "Створюйте, перейменовуйте, видаляйт
## Надано мені
-Коли хтось надає вам доступ до Бази як співавтору, ця База з’являється в розділі **Надано мені** на бічній панелі Простору.
+Коли хтось надає вам доступ до Проєкту як співавтору, цей Проєкт з’являється в розділі **Надано мені** на бічній панелі Простору.
-Бази, до яких вам надали доступ, відрізняються від Баз у ваших власних Просторах:
+Проєкти, до яких вам надали доступ, відрізняються від Проєктів у ваших власних Просторах:
- Доступ контролює особа, яка його надала.
-- Доступні дії залежать від наданого вам дозволу Бази.
-- Якщо власник скасує ваш доступ, База більше не відображатиметься.
+- Доступні дії залежать від наданого вам дозволу Проєкту.
+- Якщо власник скасує ваш доступ, Проєкт більше не відображатиметься.
-Відомості про публічне поширення Бази див. у розділі [База](/uk/basic/base).
+Відомості про публічне поширення Проєкту див. у розділі [Проєкт](/uk/basic/base).
## Налаштування Простору
@@ -95,7 +95,7 @@ description: "Створюйте, перейменовуйте, видаляйт
**Чат у службі миттєвих повідомлень**
-На сторінці **Чат у службі миттєвих повідомлень** адміністратори Простору можуть створювати ботів і налаштовувати їхню модель, доступні Бази, навички, файли та інтеграцію зі службою миттєвих повідомлень.
+На сторінці **Чат у службі миттєвих повідомлень** адміністратори Простору можуть створювати ботів і налаштовувати їхню модель, доступні Проєкти, навички, файли та інтеграцію зі службою миттєвих повідомлень.
**План**
diff --git a/uk/basic/space/base-invite.mdx b/uk/basic/space/base-invite.mdx
index ac3cd566..449565aa 100644
--- a/uk/basic/space/base-invite.mdx
+++ b/uk/basic/space/base-invite.mdx
@@ -1,39 +1,39 @@
---
-title: "Запрошення до Бази"
-description: "Керуйте дозволами на рівні Бази. Запрошуйте учасників до певної Бази, не надаючи доступу до всього Простору, для детальнішої та безпечнішої співпраці з даними."
+title: "Запрошення до Проєкту"
+description: "Керуйте дозволами на рівні Проєкту. Запрошуйте учасників до певного Проєкту, не надаючи доступу до всього Простору, для детальнішої та безпечнішої співпраці з даними."
---
-## Хто такий співавтор Бази?
+## Хто такий співавтор Проєкту? {#хто-такий-співавтор-бази}
-Співавтор Бази — це учасник, запрошений лише до певної Бази. На відміну від співавторів Простору, він має доступ лише до Баз, до яких його запросили, і не бачить інші Бази в Просторі.
+Співавтор Проєкту — це учасник, запрошений лише до певного Проєкту. На відміну від співавторів Простору, він має доступ лише до Проєктів, до яких його запросили, і не бачить інші Проєкти в Просторі.
-## Додавання співавторів Бази
+## Додавання співавторів Проєкту {#додавання-співавторів-бази}
-Відкрийте будь-яку Базу й натисніть кнопку `Запросити` у верхньому правому куті. Підтримуються два способи:
+Відкрийте будь-який Проєкт й натисніть кнопку `Запросити` у верхньому правому куті. Підтримуються два способи:
-- **Запросити електронною поштою**: введіть адресу електронної пошти одержувача, задайте рівень дозволів Бази (наприклад, «Автор») і натисніть **Надіслати запрошення**.
+- **Запросити електронною поштою**: введіть адресу електронної пошти одержувача, задайте рівень дозволів Проєкту (наприклад, «Автор») і натисніть **Надіслати запрошення**.
- **Запросити за посиланням**: перейдіть на вкладку «Запросити за посиланням», щоб створити окреме посилання-запрошення. Скопіюйте й поширте його. Одержувачі зможуть приєднатися, перейшовши за посиланням.
-Після надсилання запрошення електронною поштою можна скопіювати пряме посилання на Базу, показане на панелі, і надіслати його окремо. Запрошений користувач також отримає сповіщення в застосунку, яке відкриває Базу.
+Після надсилання запрошення електронною поштою можна скопіювати пряме посилання на Проєкт, показане на панелі, і надіслати його окремо. Запрошений користувач також отримає сповіщення в застосунку, яке відкриває Проєкт.
-На панелі запрошення можна переглянути всіх користувачів, які наразі мають доступ до Бази:
+На панелі запрошення можна переглянути всіх користувачів, які наразі мають доступ до Проєкту:
-- **Співавтори Бази**: учасники, запрошені безпосередньо лише до цієї Бази.
-- **Співавтори Простору**: біля їхнього імені відображається позначка «Простір», яка вказує, що це учасники рівня Простору, котрі автоматично успадковують доступ до цієї Бази.
+- **Співавтори Проєкту**: учасники, запрошені безпосередньо лише до цього Проєкту.
+- **Співавтори Простору**: біля їхнього імені відображається позначка «Простір», яка вказує, що це учасники рівня Простору, котрі автоматично успадковують доступ до цього Проєкту.
-База пропонує чотири ролі дозволів для різних рівнів співпраці. Докладне порівняння див. у розділі [Відомості про дозволи](/uk/basic/space/space-permission).
+Проєкт пропонує чотири ролі дозволів для різних рівнів співпраці. Докладне порівняння див. у розділі [Відомості про дозволи](/uk/basic/space/space-permission).
Для детальнішого контролю на рівні таблиць, полів або записів використовуйте [Матрицю повноважень](/uk/basic/authority-matrix).
@@ -46,11 +46,11 @@ description: "Керуйте дозволами на рівні Бази. Зап
## Сценарії використання
-Запрошення до Бази призначене для зовнішніх співавторів. Наприклад, позаштатного дизайнера, найнятого для впорядкування бібліотеки ресурсів, можна запросити лише до цієї Бази з дозволом **Редактор**, не відкриваючи йому інші Бази в Просторі.
+Запрошення до Проєкту призначене для зовнішніх співавторів. Наприклад, позаштатного дизайнера, найнятого для впорядкування бібліотеки ресурсів, можна запросити лише до цього Проєкту з дозволом **Редактор**, не відкриваючи йому інші Проєкти в Просторі.
## Примітки
-- **Успадкування дозволів**: Менеджер Простору автоматично має повний доступ до всіх Баз у цьому Просторі, і його рівень не можна понизити на рівні Бази.
-- **Безпека посилання**: будь-хто, хто отримає посилання-запрошення, може спробувати приєднатися до Бази. Якщо посилання стало відомим стороннім особам, відкличте його, натиснувши X поруч із ним на панелі запрошення.
+- **Успадкування дозволів**: Менеджер Простору автоматично має повний доступ до всіх Проєктів у цьому Просторі, і його рівень не можна понизити на рівні Проєкту.
+- **Безпека посилання**: будь-хто, хто отримає посилання-запрошення, може спробувати приєднатися до Проєкту. Якщо посилання стало відомим стороннім особам, відкличте його, натиснувши X поруч із ним на панелі запрошення.
Коли [Матриця повноважень](/uk/basic/authority-matrix) використовується разом із [Відомостями про дозволи](/uk/basic/space/space-permission), лише користувачі з роллю **Менеджер** не підпадають під обмеження Матриці повноважень. До всіх інших користувачів вони застосовуються.
diff --git a/uk/basic/space/billing.mdx b/uk/basic/space/billing.mdx
index 4a1d9c35..e2e350b0 100644
--- a/uk/basic/space/billing.mdx
+++ b/uk/basic/space/billing.mdx
@@ -41,19 +41,19 @@ description: "Дізнайтеся, як керувати передплатою
| Показник | Опис |
|--------|-------------|
-| **Усього співавторів** | Кількість оплачуваних співавторів у поточному Просторі та його Базах |
+| **Усього співавторів** | Кількість оплачуваних співавторів у поточному Просторі та його Проєктах |
| **Максимум запусків автоматизації на місяць** | Місячна квота запусків автоматизації. Кожен запуск використовує 1 одиницю квоти |
| **Усього записів** | Загальна кількість рядків у всіх таблицях Простору |
| **Сховище вкладень** | Загальний обсяг сховища, використаний завантаженими вкладеннями |
| **Усього електронних листів** | Листи, надіслані автоматизаціями через службу електронної пошти Teable |
-Дані в кошику Простору й кошику Бази враховуються в загальній статистиці записів. Щоб зменшити їхню кількість, очистьте дані в розділі «Простір → Кошик» або «База → Кошик».
+Дані в кошику Простору й кошику Проєкту враховуються в загальній статистиці записів. Щоб зменшити їхню кількість, очистьте дані в розділі «Простір → Кошик» або «Проєкт → Кошик».
-Натисніть **Докладніше** на картці **Усього записів**, щоб переглянути використання записів за Базами. У діалоговому вікні показано активні записи, записи в кошику та загальну кількість записів для кожної Бази. Звідти можна відкрити сторінку кошика Бази або остаточно видалити Базу, яка вже перебуває в кошику.
+Натисніть **Докладніше** на картці **Усього записів**, щоб переглянути використання записів за Проєктами. У діалоговому вікні показано активні записи, записи в кошику та загальну кількість записів для кожного Проєкту. Звідти можна відкрити сторінку кошика Проєкту або остаточно видалити Проєкт, яка вже перебуває в кошику.
### Коли досягнуто обмеження
-Коли Простір досягає обмеження плану, Teable зупиняє дію до її виконання й відкриває діалогове вікно оновлення плану. У ньому вказано досягнуте обмеження, обсяг використання та посилання на статистику за Базами. Це стосується вставлення, заповнення, дублювання рядків, масового створення записів, імпорту й завантаження вкладень.
+Коли Простір досягає обмеження плану, Teable зупиняє дію до її виконання й відкриває діалогове вікно оновлення плану. У ньому вказано досягнуте обмеження, обсяг використання та посилання на статистику за Проєктами. Це стосується вставлення, заповнення, дублювання рядків, масового створення записів, імпорту й завантаження вкладень.
Щоб продовжити, перейдіть на вищий план або звільніть місце, видаливши записи чи вкладення.
@@ -129,9 +129,9 @@ description: "Дізнайтеся, як керувати передплатою
### Місця
-Місця купуються заздалегідь, тому їх можна придбати наперед для майбутніх учасників команди. Місце займають співавтори з роллю **Власник**, **Автор** або **Редактор** у Просторі та його Базах. Ролі **Коментатор** і **Переглядач** безкоштовні.
+Місця купуються заздалегідь, тому їх можна придбати наперед для майбутніх учасників команди. Місце займають співавтори з роллю **Власник**, **Автор** або **Редактор** у Просторі та його Проєктах. Ролі **Коментатор** і **Переглядач** безкоштовні.
-У хмарних планах кількість придбаних місць є жорстким обмеженням. Teable блокує будь-яку дію, що перевищила б його, і пропонує додати місця. Це стосується запрошень електронною поштою, створення посилання-запрошення з оплачуваною роллю або перемикання посилання на таку роль, приєднання за таким посиланням, безпосереднього додавання співавторів і підвищення користувача до оплачуваної ролі. Користувач, який уже займає місце, може приєднатися до іншої Бази або змінити роль без додаткового місця.
+У хмарних планах кількість придбаних місць є жорстким обмеженням. Teable блокує будь-яку дію, що перевищила б його, і пропонує додати місця. Це стосується запрошень електронною поштою, створення посилання-запрошення з оплачуваною роллю або перемикання посилання на таку роль, приєднання за таким посиланням, безпосереднього додавання співавторів і підвищення користувача до оплачуваної ролі. Користувач, який уже займає місце, може приєднатися до іншого Проєкту або змінити роль без додаткового місця.
Щоб продовжити, додайте місця на сторінці «План» або призначте користувачеві безкоштовну роль Коментатора чи Переглядача. Купувати місця може лише власник Простору.
diff --git a/uk/basic/space/space-invite.mdx b/uk/basic/space/space-invite.mdx
index 53ade196..a58acac0 100644
--- a/uk/basic/space/space-invite.mdx
+++ b/uk/basic/space/space-invite.mdx
@@ -5,7 +5,7 @@ description: "Запрошуйте інших стати співавторам
## Хто такий співавтор Простору?
-Коли ви надаєте іншому користувачеві доступ до Простору, він стає співавтором Простору й отримує доступ до всіх Баз у ньому.
+Коли ви надаєте іншому користувачеві доступ до Простору, він стає співавтором Простору й отримує доступ до всіх Проєктів у ньому.
## Додавання співавторів Простору
@@ -14,7 +14,7 @@ description: "Запрошуйте інших стати співавторам
1. На лівій бічній панелі виберіть Простір, до якого потрібно додати співавторів.
2. Натисніть кнопку «Запросити» у верхній частині Простору.
3. Відкриється вікно запрошення до Простору з варіантами запрошення електронною поштою або за посиланням. У відповідних розділах також будуть доступні раніше налаштовані «Посилання-запрошення» та наявні «Співавтори Простору».
-4. **Запрошення електронною поштою**: введіть одну або кілька адрес електронної пошти, розділених комами. Потім задайте рівень дозволів, який користувачі матимуть для всіх Баз у Просторі. На завершення надішліть електронний лист із запрошенням до співпраці.
+4. **Запрошення електронною поштою**: введіть одну або кілька адрес електронної пошти, розділених комами. Потім задайте рівень дозволів, який користувачі матимуть для всіх Проєктів у Просторі. На завершення надішліть електронний лист із запрошенням до співпраці.
Після надсилання запрошення електронною поштою можна скопіювати пряме посилання на Простір, показане на панелі, і надіслати його окремо. Запрошений користувач також отримає сповіщення в застосунку, яке відкриває Простір.
@@ -24,7 +24,7 @@ description: "Запрошуйте інших стати співавторам
className="docs-screenshot"
/>
-5. **Запрошення за посиланням**: виберіть «Запросити за посиланням». Потім задайте рівень дозволів, який посилання-запрошення надаватиме для всіх Баз у Просторі. На завершення створіть посилання. Тепер його можна поширити будь-яким зручним способом, натиснувши піктограму буфера обміну поруч із ним.
+5. **Запрошення за посиланням**: виберіть «Запросити за посиланням». Потім задайте рівень дозволів, який посилання-запрошення надаватиме для всіх Проєктів у Просторі. На завершення створіть посилання. Тепер його можна поширити будь-яким зручним способом, натиснувши піктограму буфера обміну поруч із ним.
-Співавтори Простору мають доступ до всіх Баз у ньому. Якщо комусь потрібно працювати лише з певними Базами, надайте йому роль [Співавтора Бази](/uk/basic/space/base-invite).
+Співавтори Простору мають доступ до всіх Проєктів у ньому. Якщо комусь потрібно працювати лише з певними Проєктами, надайте йому роль [Співавтора Проєкту](/uk/basic/space/base-invite).
## Видалення посилань-запрошень
@@ -56,7 +56,7 @@ description: "Запрошуйте інших стати співавторам
* **Обмеження дозволів**: вилучати інших співавторів можуть лише користувачі з дозволами Менеджера або Автора.
* **Самостійне вилучення**: ви можете скасувати власний доступ, якщо в Просторі є принаймні ще один Менеджер.
-* **Область дії**: вилучення користувача з Простору не скасовує дозволів, які він має в окремих Базах.
+* **Область дії**: вилучення користувача з Простору не скасовує дозволів, які він має в окремих Проєктах.
Додаючи нових користувачів до Простору, можна призначити такі ролі (див. [Відомості про дозволи](/uk/basic/space/space-permission)):
@@ -68,8 +68,8 @@ description: "Запрошуйте інших стати співавторам
| Коментатор | Може коментувати записи, але не змінювати дані. |
| Переглядач | Може переглядати, але не коментувати. |
-## Перевірка доступу до Баз
+## Перевірка доступу до Проєктів {#перевірка-доступу-до-баз}
-Кожна особа або відділ відображається в списку співавторів Простору один раз, навіть якщо також має дозволи на окремі Бази. Позначка **Дозволи Баз** поруч із роллю показує кількість Баз, до яких користувача запросили. Якщо користувача ніколи не додавали до самого Простору, він відображається як **Має доступ лише до вибраних Баз**.
+Кожна особа або відділ відображається в списку співавторів Простору один раз, навіть якщо також має дозволи на окремі Проєкти. Позначка **Дозволи Проєктів** поруч із роллю показує кількість Проєктів, до яких користувача запросили. Якщо користувача ніколи не додавали до самого Простору, він відображається як **Має доступ лише до вибраних Проєктів**.
-Розгорніть рядок, щоб переглянути ці Бази й роль користувача в кожній із них. Звідси команда **Скасувати доступ до Бази** вилучає один дозвіл Бази, а команда **Вилучити співавтора** в рядку користувача з доступом лише до Баз скасовує всі його дозволи Баз у цьому Просторі.
+Розгорніть рядок, щоб переглянути ці Проєкти й роль користувача в кожній із них. Звідси команда **Скасувати доступ до Проєкту** вилучає один дозвіл Проєкту, а команда **Вилучити співавтора** в рядку користувача з доступом лише до Проєктів скасовує всі його дозволи Проєктів у цьому Просторі.
diff --git a/uk/basic/space/space-permission.mdx b/uk/basic/space/space-permission.mdx
index 5cf599f6..bd6ac0f9 100644
--- a/uk/basic/space/space-permission.mdx
+++ b/uk/basic/space/space-permission.mdx
@@ -1,20 +1,20 @@
---
title: "Відомості про дозволи для співпраці"
-description: "У цьому розділі описано область доступних операцій для чотирьох різних рівнів дозволів у Просторах і Базах."
+description: "У цьому розділі описано область доступних операцій для чотирьох різних рівнів дозволів у Просторах і Проєктах."
---
Teable надає детальніший контроль дозволів на рівні таблиць, полів і записів. Див. розділ [Матриця повноважень](/uk/basic/authority-matrix).
-### Операції з Базою
+### Операції з Проєктом {#операції-з-базою}
| Опис | Автор/Менеджер | Редактор | Коментатор | Переглядач |
| ----------- | :------------: | :----: | :-------: | :----: |
-| Перегляд даних у Базі | ✅ | ✅ | ✅ | ✅ |
+| Перегляд даних у Проєкті | ✅ | ✅ | ✅ | ✅ |
| Запрошення користувачів із таким самим або нижчим рівнем дозволів | ✅ | ✅ | ✅ | ✅ |
| Створення або видалення посилань на поширені Перегляди | ✅ | ✅ | | |
| Створення й редагування автоматизацій | ✅ | | | |
| Увімкнення Матриці повноважень | ✅ | | | |
-| Створення або видалення посилань-запрошень для співпраці в Базі | ✅ | | | |
-| Перейменування Бази | ✅ | | | |
+| Створення або видалення посилань-запрошень для співпраці в Проєкті | ✅ | | | |
+| Перейменування Проєкту | ✅ | | | |
### Операції із записами
@@ -51,12 +51,12 @@ description: "У цьому розділі описано область дос
| Опис | Менеджер | Автор | Редактор | Коментатор | Переглядач |
| ----------- | :-----: | :-----: | :----: | :-------: | :----: |
-| Доступ до всіх Баз у Просторі | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Доступ до всіх Проєктів у Просторі | ✅ | ✅ | ✅ | ✅ | ✅ |
| Запрошення користувачів із таким самим або нижчим рівнем дозволів | ✅ | ✅ | ✅ | ✅ | ✅ |
| Перейменування Простору | ✅ | ✅ | | | |
-| Додавання й видалення Баз у Просторі | ✅ | ✅ | | | |
-| Змінення порядку Баз у Просторі | ✅ | ✅ | | | |
-| Переміщення Баз між Просторами | ✅ | ✅ | | | |
+| Додавання й видалення Проєктів у Просторі | ✅ | ✅ | | | |
+| Змінення порядку Проєктів у Просторі | ✅ | ✅ | | | |
+| Переміщення Проєктів між Просторами | ✅ | ✅ | | | |
| Змінення налаштувань оплати, оновлення плану Простору | ✅ | | | | |
| Надання дозволів Менеджера | ✅ | | | | |
diff --git a/uk/basic/table.mdx b/uk/basic/table.mdx
index e09b7e65..55fc0040 100644
--- a/uk/basic/table.mdx
+++ b/uk/basic/table.mdx
@@ -1,16 +1,16 @@
---
title: "Огляд"
-description: "Створюйте, імпортуйте, поширюйте й керуйте таблицями в Базі."
+description: "Створюйте, імпортуйте, поширюйте й керуйте таблицями в Проєкті."
---
{/* mintlify-resync: 2026-05-14 */}
-Кожна База може містити кілька таблиць для зберігання й керування пов’язаними даними. Таблиці Teable відповідають таблицям бази даних — розуміння [їх відмінностей від електронних таблиць](/uk/compare/teable-vs-excel) допоможе якнайкраще використовувати Teable.
+Кожен Проєкт може містити кілька таблиць для зберігання й керування пов’язаними даними. Таблиці Teable відповідають таблицям бази даних — розуміння [їх відмінностей від електронних таблиць](/uk/compare/teable-vs-excel) допоможе якнайкраще використовувати Teable.
## Створення таблиць і керування ними
### Додавання таблиць
-У Базі натисніть кнопку `+` у каталозі та виберіть:
+У Проєкті натисніть кнопку `+` у каталозі та виберіть:
-Якщо інші таблиці посилаються на таблицю, яку ви видаляєте, у вікні підтвердження буде перелічено відповідні поля із зазначенням їхніх Баз і таблиць. Після видалення таблиці ці поля посилань перетворюються на однорядкові текстові поля зі збереженими назвами пов’язаних записів, а побудовані на них поля пошуку або зведення перестають працювати.
+Якщо інші таблиці посилаються на таблицю, яку ви видаляєте, у вікні підтвердження буде перелічено відповідні поля із зазначенням їхніх Проєктів і таблиць. Після видалення таблиці ці поля посилань перетворюються на однорядкові текстові поля зі збереженими назвами пов’язаних записів, а побудовані на них поля пошуку або зведення перестають працювати.
### Кошик
-Натисніть піктограму кошика у верхньому лівому куті Бази, щоб керувати видаленими таблицями.
+Натисніть піктограму кошика у верхньому лівому куті Проєкту, щоб керувати видаленими таблицями.
-- **Відновити**: повертає таблицю до Бази з усіма даними
+- **Відновити**: повертає таблицю до Проєкту з усіма даними
- **Очистити кошик**: остаточно видаляє всі таблиці з кошика
Відновлення таблиці не скасовує перетворення посилань. Поля посилань в інших таблицях залишаються текстовими, тому для відновлення зв’язку створіть їх знову.
diff --git a/uk/basic/table/import.mdx b/uk/basic/table/import.mdx
index 3c5b791e..7e5467bf 100644
--- a/uk/basic/table/import.mdx
+++ b/uk/basic/table/import.mdx
@@ -4,7 +4,7 @@ description: "Імпортуйте дані CSV, Excel, Airtable або Google S
---
{/* mintlify-resync: 2026-05-14 */}
-Використовуйте імпорт, щоб ініціалізувати нову таблицю, додати дані до наявної або перенести таблиці з Airtable чи Google Sheets до Бази Teable. Airtable і Google Sheets також доступні під час імпорту цілої Бази.
+Використовуйте імпорт, щоб ініціалізувати нову таблицю, додати дані до наявної або перенести таблиці з Airtable чи Google Sheets до Проєкту Teable. Airtable і Google Sheets також доступні під час імпорту цілого Проєкту.
Використовуйте Connect Everything в AI Chat, щоб перенести до Teable дані з Airtable, Baserow, NocoDB, SmartSuite та інших систем.
@@ -72,16 +72,16 @@ description: "Імпортуйте дані CSV, Excel, Airtable або Google S
Якщо для екземпляра налаштовано інтеграцію Airtable, імпорт можна виконати двома способами:
-- Щоб створити нову Базу Teable, відкрийте меню цільового Простору, натисніть **Імпорт**, а потім виберіть **Імпортувати з Airtable**.
-- Щоб імпортувати таблиці до відкритої Бази Teable, скористайтеся меню ресурсів Бази:
+- Щоб створити новий Проєкт Teable, відкрийте меню цільового Простору, натисніть **Імпорт**, а потім виберіть **Імпортувати з Airtable**.
+- Щоб імпортувати таблиці до відкритого Проєкту Teable, скористайтеся меню ресурсів Проєкту:
-1. Відкрийте цільову Базу Teable.
+1. Відкрийте цільовий Проєкт Teable.
2. Натисніть `+` угорі лівого каталогу.
3. У розділі **Додати з інших джерел** виберіть **Airtable**.
@@ -99,8 +99,8 @@ description: "Імпортуйте дані CSV, Excel, Airtable або Google S
Почніть з одного з двох місць:
-- Щоб створити нову Базу Teable, відкрийте меню цільового Простору, натисніть **Імпорт**, а потім виберіть **Імпортувати з Google Sheets**.
-- Щоб додати таблиці до відкритої Бази, натисніть `+` угорі лівого каталогу й виберіть **Google Sheets** у розділі **Додати з інших джерел**.
+- Щоб створити новий Проєкт Teable, відкрийте меню цільового Простору, натисніть **Імпорт**, а потім виберіть **Імпортувати з Google Sheets**.
+- Щоб додати таблиці до відкритого Проєкту, натисніть `+` угорі лівого каталогу й виберіть **Google Sheets** у розділі **Додати з інших джерел**.
@@ -113,7 +113,7 @@ description: "Імпортуйте дані CSV, Excel, Airtable або Google S
Кожна вкладка відображається як картка з кількістю рядків і стовпців. Виберіть потрібні вкладки. Вимкніть **Імпортувати записи**, якщо потрібна лише структура полів без даних.
- Натисніть **Почати імпорт** і не закривайте діалогове вікно. Воно показує поступ для кожної таблиці, а після завершення — кількість записів, отриманих кожною таблицею. Після імпорту нової Бази натисніть **Відкрити Базу**, щоб одразу перейти до результату.
+ Натисніть **Почати імпорт** і не закривайте діалогове вікно. Воно показує поступ для кожної таблиці, а після завершення — кількість записів, отриманих кожною таблицею. Після імпорту нового Проєкту натисніть **Відкрити Проєкт**, щоб одразу перейти до результату.
diff --git a/uk/basic/view/toolbar.mdx b/uk/basic/view/toolbar.mdx
index e68f86f9..9de6f467 100644
--- a/uk/basic/view/toolbar.mdx
+++ b/uk/basic/view/toolbar.mdx
@@ -148,9 +148,9 @@ description: "Використовуйте фільтри, групування,
## Поширення Перегляду
-Функція **Поширити Перегляд** публікує поточний Перегляд як посилання. Відвідувачі бачать дані й макет цього Перегляду. Це не те саме, що запросити їх як співавторів Бази.
+Функція **Поширити Перегляд** публікує поточний Перегляд як посилання. Відвідувачі бачать дані й макет цього Перегляду. Це не те саме, що запросити їх як співавторів Проєкту.
-Щоб поширити всю Базу, певну таблицю або папку, скористайтеся поширенням Бази, описаним у розділі [База](/uk/basic/base).
+Щоб поширити весь Проєкт, певну таблицю або папку, скористайтеся поширенням Проєкту, описаним у розділі [Проєкт](/uk/basic/base).
| Варіант поширення | Найкраще підходить для |
| --- | --- |
@@ -240,5 +240,5 @@ description: "Використовуйте фільтри, групування,
## Примітки
- Зміна фільтрів, груп, сортування, видимих полів або висоти рядків впливає на всіх користувачів поточного Перегляду, крім випадків, коли ви працюєте в особистому режимі.
-- Поширення Перегляду публікує результат поточного Перегляду, а не повні дозволи Бази. Для постійної співпраці використовуйте дозволи учасників або поширення Бази.
+- Поширення Перегляду публікує результат поточного Перегляду, а не повні дозволи Проєкту. Для постійної співпраці використовуйте дозволи учасників або поширення Проєкту.
- В обох режимах зміни значень клітинок однаково синхронізуються для всіх.
diff --git a/uk/deploy/env.mdx b/uk/deploy/env.mdx
index f8d38b77..6c4113d4 100644
--- a/uk/deploy/env.mdx
+++ b/uk/deploy/env.mdx
@@ -71,7 +71,7 @@ mode: "wide"
| BACKEND_MAIL_AUTH_USER | Ім’я користувача для автентифікації на стандартному поштовому сервері | - | - | username |
| BACKEND_MAIL_AUTH_PASS | Пароль для автентифікації на стандартному поштовому сервері | - | - | usertoken |
| BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH | Максимальна довжина імені запрошувача в темах листів із запрошеннями. Порожнє значення або 0 вимикає скорочення | - | - | 32 |
-| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Максимальна довжина назви Простору або Бази в темах листів із запрошеннями. Порожнє значення або 0 вимикає скорочення | - | - | 32 |
+| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | Максимальна довжина назви Простору або Проєкту в темах листів із запрошеннями. Порожнє значення або 0 вимикає скорочення | - | - | 32 |
| **Налаштування сеансів/JWT** | | | | |
| BACKEND_SESSION_EXPIRES_IN | Строк дії сеансу | 7d | - | 7d |
| BACKEND_SESSION_COOKIE_SECURE | Чи захищати файл cookie сеансу | false | - | true |
@@ -93,7 +93,7 @@ mode: "wide"
| TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | Максимальна кількість записів на одну мутацію | 20000 | - | 20000 |
| TABLE_LIMIT_COMPUTED_CELL_VALUE_MAX_BYTES | Максимальний розмір обчисленого значення комірки в байтах | 262144 | - | 262144 |
| TABLE_LIMIT_FORMULA_MAX_LENGTH | Максимальна довжина формули | 8192 | - | 8192 |
-| TABLE_LIMIT_TABLES_PER_BASE_MAX | Максимальна кількість таблиць у Базі | 1000 | - | 1000 |
+| TABLE_LIMIT_TABLES_PER_BASE_MAX | Максимальна кількість таблиць у Проєкті | 1000 | - | 1000 |
| TABLE_LIMIT_FIELDS_PER_TABLE_MAX | Максимальна кількість полів у таблиці | 500 | - | 500 |
| TABLE_LIMIT_VIEWS_PER_TABLE_MAX | Максимальна кількість переглядів у таблиці | 100 | - | 100 |
| TABLE_LIMIT_CREATE_TABLE_FIELDS_MAX | Максимальна кількість полів, дозволена під час створення таблиці | 1000 | - | 1000 |
@@ -133,10 +133,10 @@ mode: "wide"
| TELEMETRY_REPORT_DISABLED | Вимикає телеметричні звіти самостійно розміщених екземплярів, зокрема звіти про дотримання ліцензійних умов із підключених екземплярів | false | - | true |
| **Налаштування бази даних** | | | | |
| PRISMA_DATABASE_URL | URL-адреса підключення до бази даних; налаштування обов’язкове | - | Так | postgresql://teable:teable@127.0.0.1:5432/teable |
-| PUBLIC_DATABASE_PROXY | Зовнішня доступна адреса бази даних (хост:порт), яка використовується в облікових даних, створених на панелі «Підключення до бази даних» Бази; задайте її, щоб увімкнути зовнішній доступ SQL лише для читання | - | - | db.example.com:42345 |
+| PUBLIC_DATABASE_PROXY | Зовнішня доступна адреса бази даних (хост:порт), яка використовується в облікових даних, створених на панелі «Підключення до бази даних» Проєкту; задайте її, щоб увімкнути зовнішній доступ SQL лише для читання | - | - | db.example.com:42345 |
| PRISMA_TRANSACTION_TIMEOUT | Максимальний час (мс), протягом якого може виконуватися транзакція до завершення за тайм-аутом. Збільште для тривалих транзакцій (наприклад, масових оновлень із багатьма зовнішніми ключами) | 5000 | - | 60000 |
| PRISMA_TRANSACTION_MAX_WAIT | Максимальний час очікування (мс) на отримання транзакції з пулу | 2000 | - | 5000 |
-| BIG_TRANSACTION_TIMEOUT | Тайм-аут (мс) для великих внутрішніх транзакцій, наприклад експорту великих Баз | 600000 | - | 1200000 |
+| BIG_TRANSACTION_TIMEOUT | Тайм-аут (мс) для великих внутрішніх транзакцій, наприклад експорту великих Проєктів | 600000 | - | 1200000 |
## Секрети та ротація {#secrets-and-rotation}
diff --git a/zh/api-doc/get-id.mdx b/zh/api-doc/get-id.mdx
index 379cd568..86d718b2 100644
--- a/zh/api-doc/get-id.mdx
+++ b/zh/api-doc/get-id.mdx
@@ -12,13 +12,13 @@ title: "获取 ID"
className="docs-screenshot"
/>
-## 数据库 ID (BaseId)
+## 项目 ID (BaseId) {#数据库-id-baseid}
-点击目标数据库,复制 URL 上以 bse 开头的字符串,示例:`bseXXXXXXXXXX`
+点击目标项目,复制 URL 上以 bse 开头的字符串,示例:`bseXXXXXXXXXX`
diff --git a/zh/api-doc/oauth.mdx b/zh/api-doc/oauth.mdx
index 6855efe6..c41c4141 100644
--- a/zh/api-doc/oauth.mdx
+++ b/zh/api-doc/oauth.mdx
@@ -33,7 +33,7 @@ Teable 支持三种 OAuth 2.0 授权模式:
| 资源 | 权限范围 |
|------|----------|
| **应用** | `app\|create`, `app\|read`, `app\|update`, `app\|delete` |
-| **数据库** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
+| **项目** | `base\|read`, `base\|read_all`, `base\|update`, `base\|table_import`, `base\|table_export`, `base\|query_data` |
| **表格** | `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` |
@@ -296,14 +296,14 @@ curl https://app.teable.ai/api/table/TABLE_ID/record \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-通常在获取令牌后,第一步是获取当前用户可访问的所有 Base 列表:
+通常在获取令牌后,第一步是获取当前用户可访问的所有项目列表:
```bash
curl https://app.teable.ai/api/base/access/all \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```
-该接口返回当前用户有权限访问的所有 Base,可从中获取 `baseId` 用于后续 API 调用。
+该接口返回当前用户有权限访问的所有项目,可从中获取 `baseId` 用于后续 API 调用。
## 刷新访问令牌
diff --git a/zh/api-doc/sql-query.mdx b/zh/api-doc/sql-query.mdx
index 4d74560c..42572700 100644
--- a/zh/api-doc/sql-query.mdx
+++ b/zh/api-doc/sql-query.mdx
@@ -11,12 +11,12 @@ Teable 允许您通过外部工具连接底层 PostgreSQL 数据库进行只读
### 创建数据库连接
-1. **进入表格**:首先,打开您想要连接的数据库中的任意一个表格。
-2. **进入设计页面**:点击右上角的 ⚙️ 图标,进入数据库设计页面。
+1. **进入表格**:首先,打开您想要连接的项目中的任意一个表格。
+2. **进入设计页面**:点击右上角的 ⚙️ 图标,进入项目设计页面。
@@ -51,35 +51,35 @@ SELECT * FROM "bseamGnQT65TVSCzIaC"."clients" LIMIT 100
编写查询语句需要知道以下三个信息:
-- **Schema 名称(数据库 ID)**:以 `bse` 开头的数据库标识符
+- **Schema 名称(项目 ID)**:以 `bse` 开头的项目标识符
- **表名**:PostgreSQL 中的物理表名
- **字段名**:数据库中的实际列名
以下章节将说明如何获取这些信息。
-### 获取数据库 ID(BaseId / Schema 名称)
+### 获取项目 ID(BaseId / Schema 名称) {#获取数据库-idbaseid--schema-名称}
-Teable 中的每个数据库(Base)对应 PostgreSQL 中的一个 **schema**。BaseId 就是 SQL 查询中使用的 schema 名称。
+Teable 中的每个项目对应 PostgreSQL 中的一个 **schema**。BaseId 就是 SQL 查询中使用的 schema 名称。
**方法一**:查看 URL,以 `bse` 开头的字符串就是 BaseId。
-**方法二**:在数据库设计界面中,显示的 schema 名就是 BaseId。
+**方法二**:在项目设计界面中,显示的 schema 名就是 BaseId。
### 获取表名
-Teable 界面上的表名不会自动同步到物理数据库表名。请在数据库设计界面中查看实际的数据库表名。
+Teable 界面上的表名不会自动同步到物理数据库表名。请在项目设计界面中查看实际的数据库表名。
diff --git a/zh/api-doc/token.mdx b/zh/api-doc/token.mdx
index 1b193faa..3b20a1b0 100644
--- a/zh/api-doc/token.mdx
+++ b/zh/api-doc/token.mdx
@@ -15,7 +15,7 @@ description: "个人访问令牌是一种用于身份验证和授权的令牌。
3. 为您的令牌添加合适的权限范围。
-4. 指定令牌可访问的数据库和空间。
+4. 指定令牌可访问的项目和空间。
一旦您的令牌创建成功,我们只会向您显示一次,我们建议您将其复制粘贴到你认为安全的地方进行存储。
diff --git a/zh/basic/admin-panel/announcements.mdx b/zh/basic/admin-panel/announcements.mdx
index 90c4cd7d..8f0aa4a8 100644
--- a/zh/basic/admin-panel/announcements.mdx
+++ b/zh/basic/admin-panel/announcements.mdx
@@ -15,7 +15,7 @@ description: "向全员、指定空间或指定用户发布站内公告,并在
| 配置项 | 作用 |
| --- | --- |
-| **形态** | 公告出现的位置:**横幅** 显示在应用顶部,**提示** 作为短暂通知出现,**弹窗** 以对话框打断操作,**侧栏卡片** 出现在空间和 Base 侧边栏。|
+| **形态** | 公告出现的位置:**横幅** 显示在应用顶部,**提示** 作为短暂通知出现,**弹窗** 以对话框打断操作,**侧栏卡片** 出现在空间和项目侧边栏。|
| **等级** | 用户看到的语气:**信息**、**维护**、**紧急** 或 **恢复**。|
| 标题与 **正文** | 公告内容。|
| **开始时间** / **结束时间** | 投放的时间窗,结束时间必须晚于开始时间。|
diff --git a/zh/basic/admin-panel/audit-log.mdx b/zh/basic/admin-panel/audit-log.mdx
index 5271a5c4..2be3dfec 100644
--- a/zh/basic/admin-panel/audit-log.mdx
+++ b/zh/basic/admin-panel/audit-log.mdx
@@ -11,9 +11,9 @@ description: "在管理员后台查看实例范围内的活动记录,筛选操
## 可查看的操作
-审计日志覆盖常见的管理和协作操作,包括空间、数据库、表格、视图、字段、记录、分享、邀请、访问令牌和权限矩阵相关活动。
+审计日志覆盖常见的管理和协作操作,包括空间、项目、表格、视图、字段、记录、分享、邀请、访问令牌和权限矩阵相关活动。
-每条日志会显示操作时间、操作者、操作类型、关联的数据库或空间,以及请求来源信息。打开日志后,可以查看这次操作的详情。
+每条日志会显示操作时间、操作者、操作类型、关联的项目或空间,以及请求来源信息。打开日志后,可以查看这次操作的详情。
## 处理操作者账户
@@ -30,10 +30,10 @@ description: "在管理员后台查看实例范围内的活动记录,筛选操
- **选择操作者**:查看某个用户执行的操作。
- **选择空间**:查看某个空间内的活动。
-- **选择数据库**:查看某个数据库相关的活动。
-- **选择操作类型**:按记录、字段、视图、表格、数据库、分享、权限矩阵、权限矩阵角色、空间、邀请、用户和访问令牌等类型筛选。
+- **选择项目**:查看某个项目相关的活动。
+- **选择操作类型**:按记录、字段、视图、表格、项目、分享、权限矩阵、权限矩阵角色、空间、邀请、用户和访问令牌等类型筛选。
-如果用户、数据库或空间已被删除,审计记录仍会保留,并标记该资源已删除。
+如果用户、项目或空间已被删除,审计记录仍会保留,并标记该资源已删除。
## 浏览大量日志
diff --git a/zh/basic/admin-panel/computed-outbox.mdx b/zh/basic/admin-panel/computed-outbox.mdx
index e8944cf5..5e40acb0 100644
--- a/zh/basic/admin-panel/computed-outbox.mdx
+++ b/zh/basic/admin-panel/computed-outbox.mdx
@@ -30,7 +30,7 @@ description: "在管理面板中监控 BullMQ 投递和计算任务积压。"
缩小范围的方式:
- 点击表格上方的状态卡片(**等待中**、**执行中**、**延迟任务**、**失败**、**已完成(保留)** 等)按状态筛选,可以多选;悬停卡片会说明该状态的含义。
-- 按 **Space**、**Base**、**触发原因**、**执行结果** 筛选,搜索任务、Base、Space 或错误,也可以设置最短处理耗时来找出慢任务。
+- 按 **Space**、**项目**、**触发原因**、**执行结果** 筛选,搜索任务、项目、Space 或错误,也可以设置最短处理耗时来找出慢任务。
- 点击某一行会打开 **计算血缘**:入队和投递时间、投递延迟、处理耗时;失败的投递还会给出完整失败原因和脱敏后的 SQL,以及下文介绍的传播信息。
**已完成** 不代表任务真的做了事情。执行结果徽章说明这次投递的实际结果:**已执行** 表示执行了计算任务,**无操作** 表示已无事可做,**已推迟** 表示改到稍后重试,**已挂起** 表示所在范围被暂停。**执行结果** 筛选器可以按这些结果筛选,并显示每种结果各有多少条;把 **已完成(保留)** 和 **已执行** 一起选上,剩下的就是真正执行过计算任务的投递。
@@ -48,7 +48,7 @@ description: "在管理面板中监控 BullMQ 投递和计算任务积压。"
| 板块 | 能回答什么 |
| --- | --- |
| 概要 | 端到端延迟、源头修改时间、收敛时间,以及触发这次计算的表和字段。带 **计算中** 徽章说明链路还在跑。|
-| **时间线** | 三条并排的时间轴:**端到端** 是源头改完到写入收敛,**本次执行** 是这个任务从领取到入库,**唤醒处理** 是执行它的那次唤醒。执行轴还会分段标出排队等待、领取准备、计算写入。唤醒处理会顺带清掉同一个数据库中其他到期任务,所以它比端到端长属于正常现象。|
+| **时间线** | 三条并排的时间轴:**端到端** 是源头改完到写入收敛,**本次执行** 是这个任务从领取到入库,**唤醒处理** 是执行它的那次唤醒。执行轴还会分段标出排队等待、领取准备、计算写入。唤醒处理会顺带清掉同一个项目中其他到期任务,所以它比端到端长属于正常现象。|
| **任务链** | 级联中的每个任务,按入队它的上游任务缩进排列,可以看出某条分支从何而来。同一阶段拆出的分批是一条串行队列,会平铺在同一层,不再逐级缩进。每行包含状态、计划步骤、**写入目标**(该任务更新的表和字段)、**预估复杂度**、级联深度、入队时间和执行耗时。|
| **字段传播图** | 这次运行读取和写入了哪些字段,以及改动如何在字段之间传播。浅蓝虚线是导向本次写入的源头字段,灰色是本次没有写入的输入字段,绿色是本次写入的字段;箭头表示字段依赖或沿链接传播,而不是执行顺序。图中只画出真正影响到本次写入的源头。传播链较长、在弹窗里看不清时,点击 **放大** 可以全屏查看。|
@@ -58,7 +58,7 @@ description: "在管理面板中监控 BullMQ 投递和计算任务积压。"
**失败** 与 **异常任务维护** 显示的是不同类型的问题,因此数量可能不一致。
-**异常任务维护** 会按 Base、来源表和错误把异常合并成问题组,便于定位同一根因。恢复之前,请先查看失败原因并修复问题。展开问题组可以查看具体错误和组内任务,这些行仅供排查,恢复始终以整个问题组为单位。
+**异常任务维护** 会按项目、来源表和错误把异常合并成问题组,便于定位同一根因。恢复之前,请先查看失败原因并修复问题。展开问题组可以查看具体错误和组内任务,这些行仅供排查,恢复始终以整个问题组为单位。
问题组可用的操作取决于它的类型:
@@ -70,7 +70,7 @@ description: "在管理面板中监控 BullMQ 投递和计算任务积压。"
恢复完成后,Teable 会给出恢复条数、新入队与已在队列的条数,以及已投递和延迟投递的条数。随后 Worker 会按现有的并发和任务分片限制逐步消费这一组任务。
-标记为 **Base 已删除** 的问题组,对应的 Base 已经不存在,恢复后会立即再次失败,因此只提供 **丢弃问题组**。
+标记为 **项目已删除** 的问题组,对应的项目已经不存在,恢复后会立即再次失败,因此只提供 **丢弃问题组**。
把表移入回收站不会再产生异常任务。计算任务遇到已在回收站的表时,会跳过读取这张表的步骤,照常完成指向其他表的步骤,然后结束任务。
@@ -101,8 +101,8 @@ description: "在管理面板中监控 BullMQ 投递和计算任务积压。"
| 控件 | 限制的内容 |
| --- | --- |
| **每进程并发** | 每个 Worker 进程同时处理多少个计算任务。|
-| **每 Base claim 上限** | 同一个 Base(**每 Base**)以及其中同一张来源表(**每种子表**)同时处理多少个计算任务。两者默认都是 2,可填 1 到 16。|
+| **每项目 claim 上限** | 同一个项目(**每项目**)以及其中同一张来源表(**每种子表**)同时处理多少个计算任务。两者默认都是 2,可填 1 到 16。|
-单个 Base 成为瓶颈时,调大 claim 上限;多个 Base 同时排队时,调大每进程并发。
+单个项目成为瓶颈时,调大 claim 上限;多个项目同时排队时,调大每进程并发。
并发调高会增加数据库压力。使用[数据库租户](/zh/basic/admin-panel/database-tenant)存储数据的空间,claim 上限始终使用环境变量默认值,因为其连接池是按默认值配置的。
diff --git a/zh/basic/admin-panel/database-tenant.mdx b/zh/basic/admin-panel/database-tenant.mdx
index db342771..28338f7f 100644
--- a/zh/basic/admin-panel/database-tenant.mdx
+++ b/zh/basic/admin-panel/database-tenant.mdx
@@ -26,6 +26,6 @@ description: "将 Teable 空间数据托管在客户自管的 PostgreSQL 数据
不是。这里的“租户”指使用该数据库存储数据的 Teable 空间。
- 不是。数据库租户改变的是 Teable 空间数据的托管位置。你需要提供托管在其他位置的 PostgreSQL 数据库,Teable 会在其中创建并管理自己的数据。目标数据库中已有的表和记录不会接入 Teable,也不会自动导入为 Base。
+ 不是。数据库租户改变的是 Teable 空间数据的托管位置。你需要提供托管在其他位置的 PostgreSQL 数据库,Teable 会在其中创建并管理自己的数据。目标数据库中已有的表和记录不会接入 Teable,也不会自动导入为项目。
diff --git a/zh/basic/admin-panel/multitenancy.mdx b/zh/basic/admin-panel/multitenancy.mdx
index 9a564f48..eebf7dd5 100644
--- a/zh/basic/admin-panel/multitenancy.mdx
+++ b/zh/basic/admin-panel/multitenancy.mdx
@@ -16,10 +16,10 @@ noindex: true
Teable 实例
├── 组织租户 A
│ ├── 组织管理员、成员和部门
-│ └── 空间、Teable 数据库和组织级设置
+│ └── 空间、Teable 项目和组织级设置
├── 组织租户 B
│ ├── 组织管理员、成员和部门
-│ └── 空间、Teable 数据库和组织级设置
+│ └── 空间、Teable 项目和组织级设置
└── 组织租户 C
```
@@ -107,7 +107,7 @@ Teable 实例
| --- | --- |
| **用户管理** | 查看和管理当前组织的用户 |
| **组织** | 创建、移动、重命名和删除部门,并管理部门成员 |
-| **空间管理** | 将空间加入当前组织或从组织移除,查看空间和数据库数量 |
+| **空间管理** | 将空间加入当前组织或从组织移除,查看空间和项目数量 |
| **认证设置** | 配置当前组织使用的第三方认证提供商 |
| **安全设置** | 验证邮箱域名,让使用该域名注册的新用户自动加入组织 |
| **实例设置** | 修改组织名称、自动加入空间和部门查看范围 |
diff --git a/zh/basic/admin-panel/skills.mdx b/zh/basic/admin-panel/skills.mdx
index 773a1650..0d375989 100644
--- a/zh/basic/admin-panel/skills.mdx
+++ b/zh/basic/admin-panel/skills.mdx
@@ -9,7 +9,7 @@ description: "发布实例内所有 AI agent 都可使用的技能。"
通过 **技能管理**,可以为整个实例发布技能。在这里添加的技能,会出现在所有 AI 对话、App Builder 和 Bot 会话中,适合放置组织内需要统一遵循的做法,例如统一的写作风格、报表口径或对接流程。
-用户在其他位置添加的技能仍然只在各自作用域内生效。个人、数据库和空间技能请参阅 [AI 对话](/zh/basic/ai/ai-chat)。
+用户在其他位置添加的技能仍然只在各自作用域内生效。个人、项目和空间技能请参阅 [AI 对话](/zh/basic/ai/ai-chat)。
## 添加技能
@@ -34,4 +34,4 @@ description: "发布实例内所有 AI agent 都可使用的技能。"
## 出现同名技能时
-在这里发布的技能是实例默认值。如果数据库、空间、个人、App 或 Bot 中存在同名技能,则在对应会话中以范围更小的技能为准,实例技能不再生效。
+在这里发布的技能是实例默认值。如果项目、空间、个人、App 或 Bot 中存在同名技能,则在对应会话中以范围更小的技能为准,实例技能不再生效。
diff --git a/zh/basic/admin-panel/spaces.mdx b/zh/basic/admin-panel/spaces.mdx
index 87555881..99df4ab0 100644
--- a/zh/basic/admin-panel/spaces.mdx
+++ b/zh/basic/admin-panel/spaces.mdx
@@ -8,7 +8,7 @@ description: "在管理员后台管理实例下的所有空间,包括查看空
### 空间信息
* **空间名称**:空间的显示名称
-* **数据库数量**:该空间下包含的数据库(Base)总数
+* **项目数量**:该空间下包含的项目总数
* **协作者数量**:在该空间中拥有访问权限的用户总数
* **创建时间**:空间的创建时间
* **自动加入**:该空间是否启用了新用户自动加入功能
@@ -26,7 +26,7 @@ description: "在管理员后台管理实例下的所有空间,包括查看空
从管理后台删除空间时:
* 空间立即被标记为已删除
-* 空间内的所有数据库和数据变为不可访问
+* 空间内的所有项目和数据变为不可访问
* 协作者失去对空间的访问权限
* 此操作无法撤销
diff --git a/zh/basic/admin-panel/table-query-ops.mdx b/zh/basic/admin-panel/table-query-ops.mdx
index 9f5a0dc3..a07b209a 100644
--- a/zh/basic/admin-panel/table-query-ops.mdx
+++ b/zh/basic/admin-panel/table-query-ops.mdx
@@ -9,7 +9,7 @@ description: "按表查看搜索覆盖和索引现状,配置搜索、创建索
当大表中的视图、筛选、关联或搜索变慢时,可以使用 **表搜索与索引**。后台会持续观测查询负载,页面按表汇总现状:这张表现在用什么方式搜索、覆盖了哪些字段、有哪些物理索引、近期有多少慢查询。实例管理员可以在这里配置搜索覆盖、创建索引,并跟进执行结果。
-页面只提交任务,不直接改数据库。所有变更都由后台任务异步执行,需要到 **任务 / 历史** 中确认结果。
+页面只提交任务,不直接改项目。所有变更都由后台任务异步执行,需要到 **任务 / 历史** 中确认结果。
表格查询运维默认关闭。需要在后端把 `V2_TABLE_QUERY_OPS_ENABLED` 设为 `true` 并重启,页面才会开始积累观测数据。
@@ -26,7 +26,7 @@ description: "按表查看搜索覆盖和索引现状,配置搜索、创建索
| **未配置** | 还没有配置搜索覆盖的表。|
| **不可用** | 当前无法使用索引搜索的表,行内会给出原因。|
-搜索框支持表、数据库和空间的名称或 ID。排序可选 **慢查询最多** 或 **表名称**。**观测窗口** 可选最近 1 小时或 24 小时,列表中的观测数据都按这个窗口统计。观测记录保留 2 天,更早的数据不会出现在列表里。
+搜索框支持表、项目和空间的名称或 ID。排序可选 **慢查询最多** 或 **表名称**。**观测窗口** 可选最近 1 小时或 24 小时,列表中的观测数据都按这个窗口统计。观测记录保留 2 天,更早的数据不会出现在列表里。
列表每行给出这张表的估算行数和体积、窗口内的请求数与慢查询数、当前搜索方式和字段覆盖情况、筛选 / 排序索引数量,以及待处理的建议数和活动任务数。点击表名进入详情。
@@ -57,7 +57,7 @@ description: "按表查看搜索覆盖和索引现状,配置搜索、创建索
| 项 | 说明 |
| --- | --- |
-| **搜索提供程序** | `pg_bigm` 或 `pg_trgm`。数据库没有装对应扩展时,弹窗会说明缺什么、该找谁处理。|
+| **搜索提供程序** | `pg_bigm` 或 `pg_trgm`。项目没有装对应扩展时,弹窗会说明缺什么、该找谁处理。|
| **代表性搜索词** | 填一个用户真会搜的词,用于校验子串语义并采集执行计划证据,不会被保存。太短时弹窗会提示所需的最小字符数。|
| **字段** | 勾选用户真正会搜的字段。宽表不要全选,为所有字段建搜索文档代价很高。|
@@ -71,7 +71,7 @@ description: "按表查看搜索覆盖和索引现状,配置搜索、创建索
**筛选 / 排序索引** 标签列出这张表上服务于筛选条件和排序的物理索引,每条标明有效性、是否由 Teable 托管,以及索引大小和定义。这类索引与子串搜索索引分开管理。
-下方的 **待处理操作** 是系统给出的索引建议,并标明是否已有执行计划证据。点 **审查索引创建** 查看建议的索引、执行所在的数据库和依据,确认后 Teable 会异步执行 `CREATE INDEX CONCURRENTLY`。大表或规模未知的表同样需要先勾选维护窗口确认项。
+下方的 **待处理操作** 是系统给出的索引建议,并标明是否已有执行计划证据。点 **审查索引创建** 查看建议的索引、执行所在的项目和依据,确认后 Teable 会异步执行 `CREATE INDEX CONCURRENTLY`。大表或规模未知的表同样需要先勾选维护窗口确认项。
此页面不支持删除索引。非托管索引和系统索引可能用于约束或其他查询,不会在这里被删掉。
diff --git a/zh/basic/admin-panel/template-admin.mdx b/zh/basic/admin-panel/template-admin.mdx
index 5d29d762..c5e736a5 100644
--- a/zh/basic/admin-panel/template-admin.mdx
+++ b/zh/basic/admin-panel/template-admin.mdx
@@ -1,6 +1,6 @@
---
title: "模板管理"
-description: "管理组织的业务模版,帮助成员快速应用预配置的数据库场景。"
+description: "管理组织的业务模版,帮助成员快速应用预配置的项目场景。"
---
私有化部署商业版及以上适用
@@ -16,12 +16,12 @@ description: "管理组织的业务模版,帮助成员快速应用预配置的
* **Markdown 描述**:支持富文本格式的详细介绍
* **分类**:按业务场景对模板进行分组(如:人力资源、销售、研发等)
* **系统模板**:标识是否为官方系统模板
-* **来源**:创建此模板所使用的原始数据库
+* **来源**:创建此模板所使用的原始项目
#### 模板操作
* **新建模板**:创建新的模板配置
-* **发布快照**:捕获源数据库的当前状态。必须先发布快照才能上架模板。
+* **发布快照**:捕获源项目的当前状态。必须先发布快照才能上架模板。
* **状态(上架)**:控制模板是否在模板中心可见。上架前需要填写名称、描述并发布快照。
* **置顶**:将重要模板固定在列表顶部
* **删除**:移除模板配置
@@ -31,7 +31,7 @@ description: "管理组织的业务模版,帮助成员快速应用预配置的
私有化部署用户可以导入 Teable 官方云端的模板:
1. **下载**:从 [官方模板中心](https://teable.cn/templates) 下载 `.tea` 文件
-2. **导入**:将 `.tea` 文件作为新数据库导入到您的空间中
+2. **导入**:将 `.tea` 文件作为新项目导入到您的空间中
3. **新建模板**:进入 管理后台 > 模板管理 > 新建模板
-4. **选择来源**:在来源字段选择刚才导入的数据库
+4. **选择来源**:在来源字段选择刚才导入的项目
5. **上架**:配置详情,发布快照,并开启上架状态
\ No newline at end of file
diff --git a/zh/basic/ai/ai-chat.mdx b/zh/basic/ai/ai-chat.mdx
index b2fd5978..29eda1bb 100644
--- a/zh/basic/ai/ai-chat.mdx
+++ b/zh/basic/ai/ai-chat.mdx
@@ -35,7 +35,7 @@ AI 会优先参考你当前页面中的信息:
- **我的 Secret**:打开 **+** → **更多** → **我的 Secret**,在 **设置** → **集成** 中保存 API Key 或其他凭证。这些值属于你个人,AI 对话运行时可通过环境变量读取,也可以按需授权给某个应用或自动化使用,详见 [凭据与集成](/zh/basic/credential)。
- **凭据请求**:当 AI 需要访问第三方账号或某个 Secret 时,会在对话中固定一张凭据请求卡片。可以 **连接我的账号** 走一次 OAuth,或直接授权你已有的凭据;点击 **跳过** 则不提供这份凭据,AI 会在不使用它的情况下继续处理可完成的部分。
- **网页抓取**:打开 **+** 菜单,选择 **网页抓取**,按平台和数据类型挑一项。条目分两类:一类贴链接就抓,比如 LinkedIn 的 **个人资料**、Amazon 的 **商品评论**;一类按关键词、话题或姓名去搜,比如 TikTok 的 **视频搜索**、Reddit 的 **板块的帖子**。挑好之后 Teable 会把抓取指令预填到输入框,末尾留出需要你补充的部分。也可以选 **任意网页**,直接粘贴链接抓取。
-- **技能**:打开 **+** 菜单,选择 **技能**,可以在当前对话中导入、启用、停用或试用技能。导入时需要选择谁能用这个技能:选 **个人** 只有自己能用,选 **数据库** 则当前数据库的协作者都能用,选 **空间** 则当前空间的所有成员都能用。在输入框中输入 `/`,可以选择已启用的技能。需要连接或迁移外部系统时,请参阅 [Connect & Migrate Everything](/zh/basic/ai/connect-everything)。
+- **技能**:打开 **+** 菜单,选择 **技能**,可以在当前对话中导入、启用、停用或试用技能。导入时需要选择谁能用这个技能:选 **个人** 只有自己能用,选 **项目** 则当前项目的协作者都能用,选 **空间** 则当前空间的所有成员都能用。在输入框中输入 `/`,可以选择已启用的技能。需要连接或迁移外部系统时,请参阅 [Connect & Migrate Everything](/zh/basic/ai/connect-everything)。
- **上下文用量**:输入框旁的圆环显示当前对话占用了多少模型上下文窗口,点击可查看百分比和 token 数量。上下文接近用满时,Teable 会压缩对话内容;如果希望从干净的上下文开始,可以新建对话。
- **文件管理**:打开 **+** → **更多** → **文件管理**,可以查看当前对话沙箱中的文件。可以预览支持的文件类型、下载文件,也可以删除不再需要的文件或文件夹。需要先开始一段对话,才会有对应文件可管理。
- **消息队列**:AI 还在工作时继续发消息不会打断它,消息会排进输入框上方的队列,等这一轮结束后一起发出。排队项和输入框一样保留表格、视图、附件和选区标签,可以 **移除**,也可以用 **...** → **编辑消息** 放回输入框;纯文本消息还能点 **调整方向**,不等这一轮结束就把这段话交给它。
@@ -44,7 +44,7 @@ AI 会优先参考你当前页面中的信息:
- 规划业务数据库,创建表格、视图、应用、自动化,或更新已有记录。
+ 规划业务项目,创建表格、视图、应用、自动化,或更新已有记录。
统计当前表格或视图中的数据,也可以结合多个相关节点分析。
@@ -71,7 +71,7 @@ AI 不只回答问题,也可以协助创建、更新或整理数据。对于
- 基于这个客户表创建一个 CRM 应用,包含客户列表、客户详情和跟进记录页面。
- 当新订单创建时,自动通知负责人,并包含订单号、客户名称和金额。
-如果你要搭建完整业务数据库,可以先让 AI 规划表结构,再继续让它根据计划创建表格、视图、应用和自动化。
+如果你要搭建完整业务项目,可以先让 AI 规划表结构,再继续让它根据计划创建表格、视图、应用和自动化。
@@ -129,9 +129,9 @@ Artifact 保存的是 AI 生成它时写入的数据,不会自动刷新。如
### 记忆
-记忆用于保存你明确要求 Cuppy 记住的信息。记忆会按用户和数据库隔离:每个用户在每个数据库中都有独立的记忆,保存在其他数据库中的记忆不会自动出现在当前数据库。
+记忆用于保存你明确要求 Cuppy 记住的信息。记忆会按用户和项目隔离:每个用户在每个项目中都有独立的记忆,保存在其他项目中的记忆不会自动出现在当前项目。
-- 记住当前数据库的信息
+- 记住当前项目的信息
在对话中直接说明要记住的内容:
@@ -139,12 +139,12 @@ Artifact 保存的是 AI 生成它时写入的数据,不会自动刷新。如
请记住 xxx。
```
-- 复用其他数据库的记忆
+- 复用其他项目的记忆
-让 Cuppy 读取指定数据库,并把相关内容保存到当前数据库:
+让 Cuppy 读取指定项目,并把相关内容保存到当前项目:
```text
-Cuppy,请读取数据库 ID bsexxxxxxxxxxxx 的记忆,并把相关记忆保存到当前数据库。
+Cuppy,请读取项目 ID bsexxxxxxxxxxxx 的记忆,并把相关记忆保存到当前项目。
```
### 处理长任务
@@ -228,8 +228,8 @@ Artifact 默认只有创建者本人能打开,要让别人查看,需要开
在输入框中输入 `@`,选择需要参考的节点。如果是在表格视图中,也可以先选中行、列、单个单元格或单元格区域,再从右键菜单选择 **添加到 AI 对话**。
-
- 可以。AI 不局限于当前对话所属的 Base,能查找你有权限访问的其他 Base 并在其中操作。直接在需求里说出 Base 名称即可,例如「把这张表和销售 Base 里的订单表做个对比」。`@` 只能选择当前 Base 中的节点;没有特别指明时,AI 仍在当前对话所属的 Base 中执行。
+
+ 可以。AI 不局限于当前对话所属的项目,能查找你有权限访问的其他项目并在其中操作。直接在需求里说出项目名称即可,例如「把这张表和销售项目里的订单表做个对比」。`@` 只能选择当前项目中的节点;没有特别指明时,AI 仍在当前对话所属的项目中执行。
@@ -239,8 +239,8 @@ Artifact 默认只有创建者本人能打开,要让别人查看,需要开
默认不能,Artifact 只有创建者本人可以打开。在查看器中开启 **开启分享** 并把链接发给对方即可;如果内容不应流出空间,把可见范围设为 **空间成员**。
-
- 不会。记忆会按用户和数据库隔离。如果你想复用其他数据库的记忆,需要让 Cuppy 读取那个数据库的记忆,并把相关内容保存到当前数据库。
+
+ 不会。记忆会按用户和项目隔离。如果你想复用其他项目的记忆,需要让 Cuppy 读取那个项目的记忆,并把相关内容保存到当前项目。
@@ -268,11 +268,11 @@ Artifact 默认只有创建者本人能打开,要让别人查看,需要开
- 打开 **+** 菜单并选择 **技能**,可以导入或管理技能;也可以在输入框中输入 `/` 选择已启用的技能。导入时按使用范围选择:只有自己用,选个人;同一个数据库的协作者都要用,选数据库;整个空间都要用,选空间。拥有数据库管理权限的用户可以添加数据库技能,空间的所有者和创建者可以添加空间技能。如果 AI 对话生成了 `.skill` 文件,可以在文件卡片上点击 **安装** 来添加。
+ 打开 **+** 菜单并选择 **技能**,可以导入或管理技能;也可以在输入框中输入 `/` 选择已启用的技能。导入时按使用范围选择:只有自己用,选个人;同一个项目的协作者都要用,选项目;整个空间都要用,选空间。拥有项目管理权限的用户可以添加项目技能,空间的所有者和创建者可以添加空间技能。如果 AI 对话生成了 `.skill` 文件,可以在文件卡片上点击 **安装** 来添加。
- 同名技能只会生效一个,团队共用的版本优先于个人版本:数据库技能优先于空间技能,空间技能优先于个人技能;在 App 或 Bot 的对话中,为它单独添加的技能最优先。想让所有人换用新版本,就更新数据库或空间中的那一份。
+ 同名技能只会生效一个,团队共用的版本优先于个人版本:项目技能优先于空间技能,空间技能优先于个人技能;在 App 或 Bot 的对话中,为它单独添加的技能最优先。想让所有人换用新版本,就更新项目或空间中的那一份。
diff --git a/zh/basic/ai/app-builder.mdx b/zh/basic/ai/app-builder.mdx
index b5f6507a..c4734774 100644
--- a/zh/basic/ai/app-builder.mdx
+++ b/zh/basic/ai/app-builder.mdx
@@ -5,21 +5,21 @@ description: 利用 AI 将您的数据转化为定制化的网络应用。
云端版本所有方案可用;私有部署版本需要商业版及以上方案。
-Teable 应用构建器 (App Builder) 允许您在不编写代码的情况下,将数据库转化为功能齐全、定制化的 Web 应用程序。结合数据结构的力量和 AI 驱动的设计,您可以在几分钟内发布内部工具、客户门户和数据仪表板。
+Teable 应用构建器 (App Builder) 允许您在不编写代码的情况下,将项目转化为功能齐全、定制化的 Web 应用程序。结合数据结构的力量和 AI 驱动的设计,您可以在几分钟内发布内部工具、客户门户和数据仪表板。
## 概览
应用构建器(App Builder)遵循 "Prompt to App"(提示词即应用)的工作流。您描述想要的内容,AI 为您构建应用结构、页面和逻辑。然后,您可以使用可视化编辑器或代码微调每一个细节。
-应用构建器用于创建自定义界面和独立应用。如果需要在数据库内部进行交互式数据分析和临时提问,请使用 [AI 对话](/zh/basic/ai/ai-chat)。
+应用构建器用于创建自定义界面和独立应用。如果需要在项目内部进行交互式数据分析和临时提问,请使用 [AI 对话](/zh/basic/ai/ai-chat)。
## 创建应用
主要有两种创建应用的方式:
-1. **从数据库创建**:在数据库中,点击 "+ 创建" 选择 "新应用" 生成一个链接到当前数据的应用。
+1. **从项目创建**:在项目中,点击 "+ 创建" 选择 "新应用" 生成一个链接到当前数据的应用。
2. **从对话创建**:打开 AI Chat 并说 "为这个客户表创建一个 CRM 应用"。
## 应用编辑器界面
@@ -38,7 +38,7 @@ Teable 应用构建器 (App Builder) 允许您在不编写代码的情况下,
- **自然语言编辑**:描述您想做的更改,如 *"把标题改成蓝色"* 或 *"添加一个新记录提交表单"*。
- **智能路由**:AI 能够理解您指的是哪个组件或页面,并直接对其进行修改。
- **集成连接**:当应用任务需要访问第三方账号时,应用构建器会在对话面板中显示类似 **连接 Slack** 的卡片。点击 **连接** 可通过 OAuth 授权;点击 **跳过** 会取消本次授权,AI 会在不使用该连接的情况下继续处理可完成的部分。
-- **技能**:打开 **+** 菜单,选择 **技能**,可以管理当前应用对话可用的技能。这里添加的 App 技能只在当前应用中可用;应用所属数据库和空间中共用的技能,在这里也能直接使用。在输入框中输入 `/`,可以选择已启用的技能。
+- **技能**:打开 **+** 菜单,选择 **技能**,可以管理当前应用对话可用的技能。这里添加的 App 技能只在当前应用中可用;应用所属项目和空间中共用的技能,在这里也能直接使用。在输入框中输入 `/`,可以选择已启用的技能。
- **文件管理**:打开 **+** → **更多** → **文件管理**,可以查看当前应用沙箱中的文件,用于预览支持的文件类型、下载生成文件,或删除不再需要的文件和文件夹。
- **清除对话历史**:如果当前对话已经跑偏,可点击面板右下角的 **清除对话**,重新开始一个新的会话。这样会丢失当前对话的历史上下文,但不会删除应用本身。首次使用会弹出确认,并可选择下次不再提示。
diff --git a/zh/basic/ai/connect-everything/migrate-airtable.mdx b/zh/basic/ai/connect-everything/migrate-airtable.mdx
index 0926b090..4d27ae1d 100644
--- a/zh/basic/ai/connect-everything/migrate-airtable.mdx
+++ b/zh/basic/ai/connect-everything/migrate-airtable.mdx
@@ -13,7 +13,7 @@ keywords:
## 开始迁移
1. 创建 [Airtable Personal Access Token](https://airtable.com/create/tokens),并授予需要迁移的 Base 访问权限。
-2. 打开目标 Teable 数据库并启动 AI 对话。
+2. 打开目标 Teable 项目并启动 AI 对话。
3. 输入 `/`,选择 **Connect Everything**,然后提供 Token。
4. 让 Teable AI 迁移 Airtable Base,并检查迁移结果。
@@ -23,4 +23,4 @@ keywords:
## 比较并继续
-[比较 Teable 与 Airtable](https://teable.ai/zh/compare/airtable-alternative),然后了解迁移后的项目 Base 如何在 [AI 项目管理](https://teable.ai/zh/ai-project-management) 中变成实时计划、最新状态、提前风险信号和自动跟进。
+[比较 Teable 与 Airtable](https://teable.ai/zh/compare/airtable-alternative),然后了解迁移后的项目 如何在 [AI 项目管理](https://teable.ai/zh/ai-project-management) 中变成实时计划、最新状态、提前风险信号和自动跟进。
diff --git a/zh/basic/ai/connect-everything/migrate-baserow.mdx b/zh/basic/ai/connect-everything/migrate-baserow.mdx
index 930725d6..7363ac74 100644
--- a/zh/basic/ai/connect-everything/migrate-baserow.mdx
+++ b/zh/basic/ai/connect-everything/migrate-baserow.mdx
@@ -13,7 +13,7 @@ keywords:
## 开始迁移
1. 复制 Baserow 实例地址,并创建对源表格具有读取权限的 [Baserow Database Token](https://baserow.io/user-docs/personal-api-tokens)。
-2. 打开目标 Teable 数据库并启动 AI 对话。
+2. 打开目标 Teable 项目并启动 AI 对话。
3. 输入 `/`,选择 **Connect Everything**,然后提供实例地址和 Database Token。
4. 让 Teable AI 迁移 Baserow 数据库,并检查迁移结果。
diff --git a/zh/basic/ai/connect-everything/migrate-clickup.mdx b/zh/basic/ai/connect-everything/migrate-clickup.mdx
index 13264d10..fbcc963f 100644
--- a/zh/basic/ai/connect-everything/migrate-clickup.mdx
+++ b/zh/basic/ai/connect-everything/migrate-clickup.mdx
@@ -17,7 +17,7 @@ keywords:
## 开始迁移
1. 在 ClickUp 中打开 **Settings → Apps**,复制 Personal API Token。授权方式参见 ClickUp 的 [Authentication 文档](https://developer.clickup.com/docs/authentication)。
-2. 打开目标 Teable Base,并启动 AI 对话。
+2. 打开目标 Teable 项目,并启动 AI 对话。
3. 输入 `/`,选择 **Connect Everything**,提供 Personal API Token。
4. 让 Teable AI 迁移可访问的 ClickUp Workspace,并创建团队需要的项目视图、仪表盘和自动化。
diff --git a/zh/basic/ai/connect-everything/migrate-jira.mdx b/zh/basic/ai/connect-everything/migrate-jira.mdx
index 66b0fe2e..4a2891f2 100644
--- a/zh/basic/ai/connect-everything/migrate-jira.mdx
+++ b/zh/basic/ai/connect-everything/migrate-jira.mdx
@@ -17,7 +17,7 @@ keywords:
## 开始迁移
1. 使用有权访问目标 Jira 项目的账户创建 [Atlassian API Token](https://id.atlassian.com/manage-profile/security/api-tokens)。授权方式参见 Atlassian 的 [REST API Basic Auth 文档](https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/)。
-2. 打开目标 Teable Base,并启动 AI 对话。
+2. 打开目标 Teable 项目,并启动 AI 对话。
3. 输入 `/`,选择 **Connect Everything**,提供 Jira Cloud 站点 URL、账户邮箱和 API Token。
4. 让 Teable AI 迁移可访问的 Jira 项目,并创建团队需要的项目视图、仪表盘和自动化。
diff --git a/zh/basic/ai/connect-everything/migrate-monday.mdx b/zh/basic/ai/connect-everything/migrate-monday.mdx
index fa2e5428..09e48eac 100644
--- a/zh/basic/ai/connect-everything/migrate-monday.mdx
+++ b/zh/basic/ai/connect-everything/migrate-monday.mdx
@@ -17,7 +17,7 @@ keywords:
## 开始迁移
1. 在 monday.com 中打开个人资料菜单,选择 **Developers**,复制 Personal API Token。授权方式参见 monday.com 的 [API Authentication 文档](https://developer.monday.com/api-reference/docs/authentication)。
-2. 打开目标 Teable Base,并启动 AI 对话。
+2. 打开目标 Teable 项目,并启动 AI 对话。
3. 输入 `/`,选择 **Connect Everything**,提供 Personal API Token。
4. 让 Teable AI 迁移可访问的 monday.com Workspace,并创建团队需要的项目视图、仪表盘和自动化。
diff --git a/zh/basic/ai/connect-everything/migrate-nocodb.mdx b/zh/basic/ai/connect-everything/migrate-nocodb.mdx
index 42b97ce9..697f90a6 100644
--- a/zh/basic/ai/connect-everything/migrate-nocodb.mdx
+++ b/zh/basic/ai/connect-everything/migrate-nocodb.mdx
@@ -13,7 +13,7 @@ keywords:
## 开始迁移
1. 复制 NocoDB 实例地址,并创建可以访问源 Base 的 [NocoDB API Token](https://nocodb.com/docs/product-docs/account-settings/api-tokens)。
-2. 打开目标 Teable 数据库并启动 AI 对话。
+2. 打开目标 Teable 项目并启动 AI 对话。
3. 输入 `/`,选择 **Connect Everything**,然后提供实例地址和 API Token。
4. 让 Teable AI 迁移 NocoDB Base,并检查迁移结果。
diff --git a/zh/basic/ai/connect-everything/migrate-smartsheet.mdx b/zh/basic/ai/connect-everything/migrate-smartsheet.mdx
index 1fecd899..aada94cd 100644
--- a/zh/basic/ai/connect-everything/migrate-smartsheet.mdx
+++ b/zh/basic/ai/connect-everything/migrate-smartsheet.mdx
@@ -17,7 +17,7 @@ keywords:
## 开始迁移
1. 在 Smartsheet 中打开 **Account → Personal Settings → API Access**,生成 Access Token。授权方式参见 Smartsheet 的 [API Getting Started 文档](https://developers.smartsheet.com/api/smartsheet/guides/getting-started)。
-2. 打开目标 Teable Base,并启动 AI 对话。
+2. 打开目标 Teable 项目,并启动 AI 对话。
3. 输入 `/`,选择 **Connect Everything**,提供 Access Token 和账户环境:Standard、Regions Europe 或 Gov。
4. 让 Teable AI 迁移可访问的 Smartsheet Workspace,并创建团队需要的项目视图、仪表盘和自动化。
diff --git a/zh/basic/ai/connect-everything/migrate-smartsuite.mdx b/zh/basic/ai/connect-everything/migrate-smartsuite.mdx
index 381b4bd4..4af3dfea 100644
--- a/zh/basic/ai/connect-everything/migrate-smartsuite.mdx
+++ b/zh/basic/ai/connect-everything/migrate-smartsuite.mdx
@@ -13,7 +13,7 @@ keywords:
## 开始迁移
1. 获取 [SmartSuite API Key 和 Workspace ID](https://help.smartsuite.com/en/articles/6096587-retrieving-your-api-key-and-workspace-id)。
-2. 打开目标 Teable 数据库并启动 AI 对话。
+2. 打开目标 Teable 项目并启动 AI 对话。
3. 输入 `/`,选择 **Connect Everything**,然后提供 API Key 和 Workspace ID。
4. 让 Teable AI 迁移 SmartSuite Solution,并检查迁移结果。
diff --git a/zh/basic/ai/overview.mdx b/zh/basic/ai/overview.mdx
index 74251ec5..c4e66da8 100644
--- a/zh/basic/ai/overview.mdx
+++ b/zh/basic/ai/overview.mdx
@@ -45,6 +45,6 @@ Teable 在整个平台中集成了强大的 AI 能力,帮助您更智能地处
1. **启用 AI**(仅限私有部署)- Teable 内置 AI 可直接使用。私有部署用户需先完成 [AI 配置](/zh/basic/admin-panel/ai-setting);如需接入自己的模型,可继续参考 [自定义 AI 模型](/zh/basic/ai/custom-model)。
2. **使用 AI Chat** - 询问有关数据的问题或生成图表
-3. **构建应用** - 通过简单的提示词将数据库转化为 Web 应用
+3. **构建应用** - 通过简单的提示词将项目转化为 Web 应用
4. **创建 AI 字段** - 添加 AI 驱动的字段来自动处理数据
5. **构建自动化** - 在工作流中使用 AI 生成和运行脚本操作
diff --git a/zh/basic/ai/teable-skill.mdx b/zh/basic/ai/teable-skill.mdx
index 52fed4d7..fc790201 100644
--- a/zh/basic/ai/teable-skill.mdx
+++ b/zh/basic/ai/teable-skill.mdx
@@ -24,7 +24,7 @@ npx skills add https://github.com/teableio/agent-skills
```text 简单入门提示词 wrap
-在当前 {粘贴 base URL} 中创建一个简单的 CRM 表。
+在当前 <项目> {粘贴项目 URL} 中创建一个简单的 CRM 表。
```
```text 本地文件 → Teable wrap
diff --git a/zh/basic/authority-matrix.mdx b/zh/basic/authority-matrix.mdx
index 6809ead2..2b9ca438 100644
--- a/zh/basic/authority-matrix.mdx
+++ b/zh/basic/authority-matrix.mdx
@@ -1,12 +1,12 @@
---
title: "概览"
-description: "在同一个数据库中为不同团队设置访问范围,让成员只看到、修改或导出自己需要的数据。"
+description: "在同一个项目中为不同团队设置访问范围,让成员只看到、修改或导出自己需要的数据。"
---
{/* mintlify-resync: 2026-05-28 */}
商业版及以上适用
-当销售、财务、运营和管理层共用同一个数据库时,权限不只是决定谁能进入数据库,还关系到谁能看哪些数据、改哪些内容,以及是否可以导入或导出。权限矩阵适合把数据集中管理,同时按职责隔离访问范围的团队。
+当销售、财务、运营和管理层共用同一个项目时,权限不只是决定谁能进入项目,还关系到谁能看哪些数据、改哪些内容,以及是否可以导入或导出。权限矩阵适合把数据集中管理,同时按职责隔离访问范围的团队。
你可以为成员或部门分配自定义角色,让不同角色只访问需要的表格、应用和工作流。对表格,还可以继续限制可见视图、可见记录、可编辑字段,以及导入/导出权限。比如销售只维护自己的客户,财务只查看账单字段,管理层查看完整数据。
@@ -17,7 +17,7 @@ description: "在同一个数据库中为不同团队设置访问范围,让成
| 按部门分配访问范围 | 销售团队可以维护客户记录,财务团队只能查看账单相关字段。|
| 按负责人限制记录 | 销售代表只能查看和更新负责人是自己的记录。|
| 限制数据录入权限 | 成员可以创建新记录,但不能编辑或删除已有记录。|
-| 在共享数据库中保护敏感字段 | 成员可以查看订单记录,但看不到支付方式或成本字段。|
+| 在共享项目中保护敏感字段 | 成员可以查看订单记录,但看不到支付方式或成本字段。|
| 控制应用和工作流入口 | 角色只能打开指定应用或工作流,未授权节点不会显示。|
## 权限如何生效
@@ -34,7 +34,7 @@ description: "在同一个数据库中为不同团队设置访问范围,让成
className="docs-screenshot"
/>
-点击 `添加角色` 创建自定义角色。进入角色详情后,可以分配协作者、填写角色说明,并为数据库中的每个节点配置访问权限:
+点击 `添加角色` 创建自定义角色。进入角色详情后,可以分配协作者、填写角色说明,并为项目中的每个节点配置访问权限:
了解 **空间** 和 **数据库** 的基础权限级别,请查看[协作权限](/zh/basic/space/space-permission)。
+了解 **空间** 和 **项目** 的基础权限级别,请查看[协作权限](/zh/basic/space/space-permission)。
diff --git a/zh/basic/authority-matrix/authority-matrix-practical-guide.mdx b/zh/basic/authority-matrix/authority-matrix-practical-guide.mdx
index 28f3177d..fc17c400 100644
--- a/zh/basic/authority-matrix/authority-matrix-practical-guide.mdx
+++ b/zh/basic/authority-matrix/authority-matrix-practical-guide.mdx
@@ -4,8 +4,8 @@ description: "为销售团队配置权限矩阵角色,处理共享数据、按
---
{/* mintlify-resync: 2026-05-28 */}
-这个示例使用一个销售数据库,包含三张表:`客户信息`、`销售订单` 和
-`产品信息`。目标是让每个角色只访问自己需要的数据,而不是开放整个数据库。
+这个示例使用一个销售项目,包含三张表:`客户信息`、`销售订单` 和
+`产品信息`。目标是让每个角色只访问自己需要的数据,而不是开放整个项目。
| 角色 | 权限目标 |
| --- | --- |
@@ -25,7 +25,7 @@ description: "为销售团队配置权限矩阵角色,处理共享数据、按
- 在数据库中打开权限矩阵页面,开启主开关。开启权限矩阵的用户会被加入管理员。
+ 在项目中打开权限矩阵页面,开启主开关。开启权限矩阵的用户会被加入管理员。
点击 `添加角色`,创建 `销售总监`、`销售代表` 和 `数据录入员` 三个角色。
diff --git a/zh/basic/automation.mdx b/zh/basic/automation.mdx
index d1308c79..11d42d31 100644
--- a/zh/basic/automation.mdx
+++ b/zh/basic/automation.mdx
@@ -65,8 +65,8 @@ AI 会为你创建并测试完整自动化,包括触发器、操作和字段
| 项目 | 限制 |
|---|---|
-| 邮件发送速率 | 5 封 / 秒 / Base |
-| Webhook 接收速率 | 50 次 / 秒 / Base,2 次 / 秒 / 工作流 |
+| 邮件发送速率 | 5 封 / 秒 / 项目 |
+| Webhook 接收速率 | 50 次 / 秒 / 项目,2 次 / 秒 / 工作流 |
| Webhook 请求体大小 | 4 MB |
| 运行配额与历史保留 | 按套餐不同 |
@@ -82,7 +82,7 @@ AI 会为你创建并测试完整自动化,包括触发器、操作和字段
Teable Cloud 也可能因为异常用量发送关键通知,比如单日运行次数明显增加,或短时间内突然运行很多次。系统会参考近期的日级和小时级运行模式,具体触发阈值可能调整。
- 通知会打开**空间设置** → **计费**。如果能识别主要来源,通知会显示哪个工作流和 Base 贡献了最多运行次数。配额提醒基于计入套餐额度的运行次数;异常用量检测也可能参考近期状态为**成功**、**失败**或**等待中**的运行。
+ 通知会打开**空间设置** → **计费**。如果能识别主要来源,通知会显示哪个工作流和项目贡献了最多运行次数。配额提醒基于计入套餐额度的运行次数;异常用量检测也可能参考近期状态为**成功**、**失败**或**等待中**的运行。
如果这些用量符合预期,可以考虑购买额外自动化额度或调整订阅计划。如果用量不符合预期,请查看主要工作流,并调整或暂停相关自动化。
diff --git a/zh/basic/automation/actions/communication/send-email-overview.mdx b/zh/basic/automation/actions/communication/send-email-overview.mdx
index 96592dbd..ec0a3752 100644
--- a/zh/basic/automation/actions/communication/send-email-overview.mdx
+++ b/zh/basic/automation/actions/communication/send-email-overview.mdx
@@ -37,7 +37,7 @@ AI 会为你处理一切:选择合适的触发器和操作,映射字段,
\* **收件人**和**密送**至少填写一项。
-**速率限制:** 每个 Base 每秒 5 封邮件。
+**速率限制:** 每个项目每秒 5 封邮件。
## 如何设置
diff --git a/zh/basic/automation/actions/logic/loop-run.mdx b/zh/basic/automation/actions/logic/loop-run.mdx
index 144ad68a..9218cb62 100644
--- a/zh/basic/automation/actions/logic/loop-run.mdx
+++ b/zh/basic/automation/actions/logic/loop-run.mdx
@@ -100,7 +100,7 @@ description: "通过遍历数组在一个操作中批量处理多个项目"
## 适用场景
- **批量通知发送**:定时查询所有逾期任务,为每位负责人发送个性化的提醒邮件。
-- **数据批量迁移**:从一个表查询记录,批量创建到另一个表或另一个 Base 中。
+- **数据批量迁移**:从一个表查询记录,批量创建到另一个表或另一个项目中。
- **批量 API 同步**:将多条产品数据逐条推送到电商平台的 API。
- **批量 AI 处理**:对一批记录逐条调用 AI 生成操作,进行分类、摘要或数据提取。
diff --git a/zh/basic/automation/actions/records/create-record.mdx b/zh/basic/automation/actions/records/create-record.mdx
index 126f5cca..fce5a392 100644
--- a/zh/basic/automation/actions/records/create-record.mdx
+++ b/zh/basic/automation/actions/records/create-record.mdx
@@ -70,12 +70,12 @@ AI 会为你处理一切:选择合适的触发器和操作,映射字段,
- **表单数据转存**:表单提交后,将数据自动写入另一个表格(如归档表或统计表),保持原表结构不变的同时实现数据分发。
- **自动创建关联任务**:在项目管理中,当新项目创建时,自动在任务表中创建多条初始任务(需求分析、设计评审、开发排期等),配合循环执行实现批量创建。
-- **跨表数据复制**:当一个表中的记录满足特定条件时,自动在另一个表(甚至另一个 Base)中创建对应记录,实现跨团队的数据共享。
+- **跨表数据复制**:当一个表中的记录满足特定条件时,自动在另一个表(甚至另一个项目)中创建对应记录,实现跨团队的数据共享。
- **邮件内容归档**:收到邮件后,自动将发件人、主题、正文等信息创建为一条记录,方便团队集中管理和后续跟进。
## 注意事项
-- 支持[跨 Base 访问](/zh/basic/automation/actions/records/cross-base),可以在其他 Base 的表格中创建记录。
+- 支持[跨项目访问](/zh/basic/automation/actions/records/cross-base),可以在其他项目的表格中创建记录。
- 支持[循环执行](../logic/loop-run),可以批量创建多条记录。
- 通过该操作创建的记录会触发同一表格上的"记录创建时"触发器。如果两个工作流互相创建记录,可能导致无限循环,请务必注意。
- 如果字段映射中引用了前序步骤的变量,但该变量在运行时为空值,则对应字段会留空(非必填字段不会报错)。
@@ -86,5 +86,5 @@ AI 会为你处理一切:选择合适的触发器和操作,映射字段,
- [更新记录](/zh/basic/automation/actions/records/update-record)
- [查询记录](/zh/basic/automation/actions/records/get-records)
-- [跨 Base 访问](/zh/basic/automation/actions/records/cross-base)
+- [跨项目访问](/zh/basic/automation/actions/records/cross-base)
- [循环执行](/zh/basic/automation/actions/logic/loop-run)
diff --git a/zh/basic/automation/actions/records/cross-base.mdx b/zh/basic/automation/actions/records/cross-base.mdx
index b2f0f695..ce99f609 100644
--- a/zh/basic/automation/actions/records/cross-base.mdx
+++ b/zh/basic/automation/actions/records/cross-base.mdx
@@ -1,6 +1,6 @@
---
-title: "跨 Base 访问"
-description: "在单个工作流中读写不同 Base 的数据"
+title: "跨项目访问"
+description: "在单个工作流中读写不同项目的数据"
---
{/* mintlify-resync: 2026-05-26 */}
@@ -10,11 +10,11 @@ description: "在单个工作流中读写不同 Base 的数据"
请注意:如果你手动添加操作,AI 后续将无法识别或修改它们。
-默认情况下,工作流中的操作只能访问当前 Base 内的表格。开启跨 Base 访问后,工作流可以读取和写入其他 Base 中的表格数据,用于跨团队、跨项目的数据流转。
+默认情况下,工作流中的操作只能访问当前项目内的表格。开启跨项目访问后,工作流可以读取和写入其他项目中的表格数据,用于跨团队、跨项目的数据流转。
## 支持的操作
-| 操作 | 支持跨 Base |
+| 操作 | 支持跨项目 |
|---|---|
| 创建记录 | 是 |
| 更新记录 | 是 |
@@ -23,74 +23,74 @@ description: "在单个工作流中读写不同 Base 的数据"
## 如何设置
1. 在工作流中添加一个支持的操作(创建记录、更新记录或查询记录)。
-2. 点击表格选择器旁边的**跨 Base 访问**开关。
+2. 点击表格选择器旁边的**跨项目访问**开关。
3. 在弹出的选择器中,依次选择:
- - **目标空间**:目标 Base 所在的空间
- - **目标 Base**:要操作的 Base
-4. 选择目标 Base 中的表格(以及视图,如适用)。
+ - **目标空间**:目标项目所在的空间
+ - **目标项目**:要操作的项目
+4. 选择目标项目中的表格(以及视图,如适用)。
5. 按正常流程配置字段映射或筛选条件。
-6. 点击**测试**验证跨 Base 操作是否成功。
+6. 点击**测试**验证跨项目操作是否成功。
## 具体示例
-### 示例一:销售数据同步到财务 Base
+### 示例一:销售数据同步到财务项目 {#示例一销售数据同步到财务-base}
-场景:销售团队在"销售 Base"中管理订单,财务团队在"财务 Base"中管理应收账款。
+场景:销售团队在"销售项目"中管理订单,财务团队在"财务项目"中管理应收账款。
-1. 触发器:销售 Base 中"订单表"的记录状态更新为"已确认"。
-2. 操作:使用跨 Base 访问,在财务 Base 的"应收账款表"中创建一条新记录,映射订单号、客户名称、金额等字段。
+1. 触发器:销售项目中"订单表"的记录状态更新为"已确认"。
+2. 操作:使用跨项目访问,在财务项目的"应收账款表"中创建一条新记录,映射订单号、客户名称、金额等字段。
-### 示例二:从共享数据库查询参考数据
+### 示例二:从共享项目查询参考数据 {#示例二从共享数据库查询参考数据}
-场景:公司有一个"公共数据 Base"存放产品目录,各部门的 Base 需要查询产品信息。
+场景:公司有一个"公共数据项目"存放产品目录,各部门的项目需要查询产品信息。
-1. 触发器:某个 Base 中有新订单创建。
-2. 操作一:使用跨 Base 访问,在"公共数据 Base"的产品表中查询产品详情。
-3. 操作二:将查询到的产品名称和价格更新到当前 Base 的订单记录中。
+1. 触发器:某个项目中有新订单创建。
+2. 操作一:使用跨项目访问,在"公共数据项目"的产品表中查询产品详情。
+3. 操作二:将查询到的产品名称和价格更新到当前项目的订单记录中。
## 权限模型详解
-创建、编辑或应用工作流更新时,Teable 会按当前编辑者的权限检查每个跨 Base 操作:
+创建、编辑或应用工作流更新时,Teable 会按当前编辑者的权限检查每个跨项目操作:
-| 操作 | 目标 Base 所需权限 |
+| 操作 | 目标项目所需权限 |
|---|---|
| 查询记录 | 读取字段和记录 |
| 创建记录 | 读取字段和记录,以及创建记录 |
| 更新记录 | 读取字段和记录,以及更新记录 |
-跨 Base 操作运行时会使用 Teable 的自动化运行身份访问目标 Base。由跨 Base 操作创建或更新的记录,在记录元信息和审计信息中会显示为 **Automation Robot**。
+跨项目操作运行时会使用 Teable 的自动化运行身份访问目标项目。由跨项目操作创建或更新的记录,在记录元信息和审计信息中会显示为 **Automation Robot**。
### 权限变化时会怎样
-如果当前编辑者没有目标 Base 的所需权限,Teable 会阻止他新增或修改指向该目标 Base 的跨 Base 操作。如果草稿中已经包含他无权访问的跨 Base 操作,他也无法应用这份草稿。已经启用的旧版本不会因为这次编辑者没有权限而失效;下次编辑或应用更新时,Teable 会再次按当前编辑者的权限检查。
+如果当前编辑者没有目标项目的所需权限,Teable 会阻止他新增或修改指向该目标项目的跨项目操作。如果草稿中已经包含他无权访问的跨项目操作,他也无法应用这份草稿。已经启用的旧版本不会因为这次编辑者没有权限而失效;下次编辑或应用更新时,Teable 会再次按当前编辑者的权限检查。
如果编辑或应用工作流时遇到权限错误:
-1. 让同时拥有当前 Base 和目标 Base 权限的成员编辑并应用工作流。
-2. 或恢复目标 Base 所需权限后,再重新应用工作流。
+1. 让同时拥有当前项目和目标项目权限的成员编辑并应用工作流。
+2. 或恢复目标项目所需权限后,再重新应用工作流。
## 故障排除
| 问题 | 原因和解决方法 |
|---|---|
-| 看不到目标 Base | 确认当前编辑者拥有目标 Base 的访问权限。如果 Base 在其他空间,需要先被邀请为该空间或 Base 的协作者 |
-| 无法保存或应用工作流 | 检查当前编辑者是否拥有目标 Base 的对应权限。创建/更新操作需要写入权限,查询操作需要读取权限 |
+| 看不到目标项目 | 确认当前编辑者拥有目标项目的访问权限。如果项目在其他空间,需要先被邀请为该空间或项目的协作者 |
+| 无法保存或应用工作流 | 检查当前编辑者是否拥有目标项目的对应权限。创建/更新操作需要写入权限,查询操作需要读取权限 |
| 操作执行失败 | 检查目标表格、字段、记录或筛选条件是否仍然存在,并查看运行历史里的错误信息 |
| 字段映射不匹配 | 目标表格的字段结构可能已变更。重新编辑操作步骤,更新字段映射 |
-| 找不到目标表格 | 目标 Base 中的表格可能已被删除或重命名。检查目标 Base 的当前结构 |
+| 找不到目标表格 | 目标项目中的表格可能已被删除或重命名。检查目标项目的当前结构 |
## 适用场景
-- **跨部门数据同步**:销售团队确认订单后,自动在仓储 Base 中创建发货任务记录,实现销售与物流的数据联动。
-- **集中化数据汇总**:多个项目团队各自维护项目 Base,通过跨 Base 查询将关键指标汇总到管理层的仪表盘 Base 中。
-- **共享数据引用**:公司维护一个公共客户库 Base,各业务 Base 的工作流通过跨 Base 查询获取客户信息,避免数据重复录入。
-- **审计与合规**:当敏感数据 Base 中的记录被修改时,自动在独立的审计 Base 中创建变更日志记录。
+- **跨部门数据同步**:销售团队确认订单后,自动在仓储项目中创建发货任务记录,实现销售与物流的数据联动。
+- **集中化数据汇总**:多个项目团队各自维护项目项目,通过跨项目查询将关键指标汇总到管理层的仪表盘项目中。
+- **共享数据引用**:公司维护一个公共客户库项目,各业务项目的工作流通过跨项目查询获取客户信息,避免数据重复录入。
+- **审计与合规**:当敏感数据项目中的记录被修改时,自动在独立的审计项目中创建变更日志记录。
## 注意事项
-- 跨 Base 操作的响应时间可能略长于同 Base 操作,因为涉及跨库查询。
-- 跨 Base 创建的记录同样会触发目标 Base 中的自动化工作流。请确认不会导致意外的连锁触发。
-- 建议在工作流描述中注明跨 Base 操作的目标,方便团队成员理解数据流向。
+- 跨项目操作的响应时间可能略长于同项目操作,因为涉及跨库查询。
+- 跨项目创建的记录同样会触发目标项目中的自动化工作流。请确认不会导致意外的连锁触发。
+- 建议在工作流描述中注明跨项目操作的目标,方便团队成员理解数据流向。
## 相关文档
diff --git a/zh/basic/automation/actions/records/get-records.mdx b/zh/basic/automation/actions/records/get-records.mdx
index 9da775d8..12187044 100644
--- a/zh/basic/automation/actions/records/get-records.mdx
+++ b/zh/basic/automation/actions/records/get-records.mdx
@@ -76,7 +76,7 @@ AI 会为你处理一切:选择合适的触发器和操作,映射字段,
- **使用视图**:如果目标视图已经配置了筛选和排序,直接选择视图比手动重复配置更方便。
- **避免频繁全表扫描**:在定时触发的工作流中,每次运行都全表扫描会给系统带来不必要的负担。
- 查询结果是操作执行时的快照。如果在后续步骤执行过程中其他用户修改了数据,查询结果不会自动更新。
-- 支持[跨 Base 访问](/zh/basic/automation/actions/records/cross-base),可以查询其他 Base 中的表格。使用跨 Base 查询时,查询以工作流创建者的权限执行。如果创建者失去对目标 Base 的访问权限,该步骤将失败。
+- 支持[跨项目访问](/zh/basic/automation/actions/records/cross-base),可以查询其他项目中的表格。使用跨项目查询时,查询以工作流创建者的权限执行。如果创建者失去对目标项目的访问权限,该步骤将失败。
- 查询结果可以直接作为[循环执行](../logic/loop-run)的数据源。
- 如果查询结果为空(没有匹配的记录),后续引用该结果的步骤仍会执行,但获取到的值为空。
@@ -85,4 +85,4 @@ AI 会为你处理一切:选择合适的触发器和操作,映射字段,
- [循环执行](/zh/basic/automation/actions/logic/loop-run)
- [创建记录](/zh/basic/automation/actions/records/create-record)
- [更新记录](/zh/basic/automation/actions/records/update-record)
-- [跨 Base 访问](/zh/basic/automation/actions/records/cross-base)
+- [跨项目访问](/zh/basic/automation/actions/records/cross-base)
diff --git a/zh/basic/automation/actions/records/update-record.mdx b/zh/basic/automation/actions/records/update-record.mdx
index 74568e93..ebfec229 100644
--- a/zh/basic/automation/actions/records/update-record.mdx
+++ b/zh/basic/automation/actions/records/update-record.mdx
@@ -75,7 +75,7 @@ AI 会为你处理一切:选择合适的触发器和操作,映射字段,
## 注意事项
- 更新操作会触发同一表格上的"记录更新时"触发器,请注意避免循环。
-- 支持[跨 Base 访问](/zh/basic/automation/actions/records/cross-base),可以更新其他 Base 中的记录。
+- 支持[跨项目访问](/zh/basic/automation/actions/records/cross-base),可以更新其他项目中的记录。
- 支持[循环执行](../logic/loop-run),可以批量更新多条记录。
- 使用逗号分隔的多个记录 ID 时,所有记录会收到相同的字段值。如需为不同记录设置不同值,请使用[循环执行](../logic/loop-run)。
- 如果指定的记录 ID 不存在,操作会执行失败。建议在前序步骤中验证记录是否存在。
@@ -84,5 +84,5 @@ AI 会为你处理一切:选择合适的触发器和操作,映射字段,
- [创建记录](/zh/basic/automation/actions/records/create-record)
- [查询记录](/zh/basic/automation/actions/records/get-records)
-- [跨 Base 访问](/zh/basic/automation/actions/records/cross-base)
+- [跨项目访问](/zh/basic/automation/actions/records/cross-base)
- [记录更新时(触发器)](/zh/basic/automation/trigger/records/record-updated)
diff --git a/zh/basic/automation/ai/scripting/runscript.mdx b/zh/basic/automation/ai/scripting/runscript.mdx
index a5fb410e..2efe7cf4 100644
--- a/zh/basic/automation/ai/scripting/runscript.mdx
+++ b/zh/basic/automation/ai/scripting/runscript.mdx
@@ -125,7 +125,7 @@ output.set("records", data);
## 在脚本中调用 AI
-用 `POST /api/automation/runtime/ai` 把提示词交给当前 Base 的 AI 模型。Base 由自动化上下文决定,不需要传 Base ID。请求体必填 `prompt`,可选 `attachments`、`modelKey`、`temperature` 和 `outputType`,响应为 `{ "message": ... }`。
+用 `POST /api/automation/runtime/ai` 把提示词交给当前项目的 AI 模型。项目由自动化上下文决定,不需要传项目 ID。请求体必填 `prompt`,可选 `attachments`、`modelKey`、`temperature` 和 `outputType`,响应为 `{ "message": ... }`。
附件按 `{ url, mimetype, name }` 传,最多 10 项,单个文件需在 20MB、30 秒内下载完成,支持图片、PDF 和 Office 文档。默认对话模型未必能读取图片这类附件,发送文件时建议用 `modelKey` 指定合适的模型。每次调用都会消耗算力。
diff --git a/zh/basic/automation/examples/api-automation.mdx b/zh/basic/automation/examples/api-automation.mdx
index 6e08a34d..46bac234 100644
--- a/zh/basic/automation/examples/api-automation.mdx
+++ b/zh/basic/automation/examples/api-automation.mdx
@@ -17,7 +17,7 @@ AI 会自动创建完整的工作流。你可以查看生成的脚本,用真
## 前提条件
- 一个个人访问令牌(PAT)。参见[访问令牌](/zh/api-doc/token)。
-- 你的 Base ID、表格 ID 和字段 ID。参见[获取 ID](/zh/api-doc/get-id)。
+- 你的项目 ID、表格 ID 和字段 ID。参见[获取 ID](/zh/api-doc/get-id)。
## 辅助函数
@@ -74,7 +74,7 @@ await api("PUT", `/base/${baseId}/workflow/${wf.id}/active`, {
## 最佳实践
-- 使用最小权限的 PAT——仅授权其所需的空间/Base。
+- 使用最小权限的 PAT——仅授权其所需的空间/项目。
- 将令牌存储在环境变量中,切勿硬编码。
- 在启用之前使用**测试节点**进行验证。
- 参见完整的[自动化 API 参考文档](/zh/api-reference/automation/put-base-workflow-action)。
diff --git a/zh/basic/automation/examples/cross-base-sync.mdx b/zh/basic/automation/examples/cross-base-sync.mdx
index 5db193d8..fa2a7ff3 100644
--- a/zh/basic/automation/examples/cross-base-sync.mdx
+++ b/zh/basic/automation/examples/cross-base-sync.mdx
@@ -1,6 +1,6 @@
---
-title: "跨 Base 自动同步记录"
-description: "使用跨 Base 访问自动将新记录或更新的记录复制到另一个 Base"
+title: "跨项目自动同步记录"
+description: "使用跨项目访问自动将新记录或更新的记录复制到另一个项目"
---
我们推荐直接在 AI 对话中构建自动化示例。只需描述你想要的工作流,AI 会为你完成全部设置,包括触发器、操作、脚本和配置。
@@ -9,18 +9,18 @@ description: "使用跨 Base 访问自动将新记录或更新的记录复制到
打开表格右侧边栏的 AI 对话,告诉 AI 你想要什么。例如:
-*"销售 Base 中新建订单时,在履约 Base 中创建对应记录,包含订单号、客户名、金额,状态设为待履约"*
+*"销售项目中新建订单时,在履约项目中创建对应记录,包含订单号、客户名、金额,状态设为待履约"*
AI 会自动创建完整的工作流。你可以查看生成的脚本,用真实数据测试,确认无误后启用。
## 手动设置
-1. 在**销售** Base 中**创建工作流**,触发器选择 **记录创建时**。
+1. 在**销售** 项目中**创建工作流**,触发器选择 **记录创建时**。
2. 选择你的**订单**表。
3. 点击**测试**。
4. **添加操作** → **创建记录**。
-5. 点击表格选择器旁的**跨 Base 访问**。
-6. 切换到**履约** Base,选择**订单**表。
+5. 点击表格选择器旁的**跨项目访问**。
+6. 切换到**履约** 项目,选择**订单**表。
7. 映射字段:
- 订单号 → 触发器的订单号(通过 **+** 插入)
- 客户 → 触发器的客户
@@ -31,6 +31,6 @@ AI 会自动创建完整的工作流。你可以查看生成的脚本,用真
## 双向同步
要实现双向更新同步:
-1. 在**履约** Base 中创建第二个工作流。
-2. 使用**记录更新时** → **更新记录**,通过跨 Base 访问指向销售 Base。
+1. 在**履约** 项目中创建第二个工作流。
+2. 使用**记录更新时** → **更新记录**,通过跨项目访问指向销售项目。
3. 使用筛选条件避免无限循环——例如仅在特定字段变更时触发,并在更新前检查值是否确实不同。
diff --git a/zh/basic/automation/trigger/external/webhook-received.mdx b/zh/basic/automation/trigger/external/webhook-received.mdx
index cb9a3495..ad4605e1 100644
--- a/zh/basic/automation/trigger/external/webhook-received.mdx
+++ b/zh/basic/automation/trigger/external/webhook-received.mdx
@@ -36,7 +36,7 @@ AI 会为你处理一切:选择合适的触发器,映射相关字段,自
## 测试 Webhook
-使用 `curl` 发送测试请求。URL 中包含 Base 和工作流的 ID,请直接从触发器面板复制,不要手写:
+使用 `curl` 发送测试请求。URL 中包含项目和工作流的 ID,请直接从触发器面板复制,不要手写:
```bash
# 不带鉴权
@@ -106,7 +106,7 @@ curl -X POST https://your-teable-instance.com/api/webhook/base/bseXXXXXXXXXXXX/w
| 范围 | 限制 |
|---|---|
-| 每个 Base | 50 请求/秒 |
+| 每个项目 | 50 请求/秒 |
| 每个工作流 | 2 请求/秒 |
超过限制的请求会返回 HTTP 429 错误。如果外部系统发送频率较高,建议在发送端实现重试和退避机制。
diff --git a/zh/basic/base.mdx b/zh/basic/base.mdx
index 050e84a3..ff030b8d 100644
--- a/zh/basic/base.mdx
+++ b/zh/basic/base.mdx
@@ -1,42 +1,44 @@
---
title: "概览"
-description: "创建、管理、导入导出数据库。通过 .tea 文件在 Teable Cloud 空间之间迁移,或在 Cloud 与私有化部署之间迁移数据。"
+description: "创建、管理、导入导出项目。通过 .tea 文件在 Teable Cloud 空间之间迁移,或在 Cloud 与私有化部署之间迁移数据。"
---
{/* mintlify-resync: 2026-05-26 */}
-数据库是组织和管理相关表格的容器。每个空间可包含多个数据库,每个数据库可包含多个表格。而每个数据库都可以独立工作,为特定项目或表格集合提供清晰的信息结构。
+项目是组织和管理相关表格、应用和自动化的容器。每个空间可包含多个项目,每个项目都有独立的资源和协作权限。
-对于不熟悉数据库的用户来说,可以将数据库类比为 Excel 中的工作簿,每个工作簿可以有多张表。
+界面中的“项目”对应 API 和 CLI 中的 `base` 资源。`baseId` 等 API 字段、`bse` ID 前缀和 `/base/...` URL 保持不变。
-## 创建和管理数据库
+对于不熟悉项目的用户来说,可以将项目类比为 Excel 中的工作簿,每个工作簿可以有多张表。
-### 添加数据库
+## 创建和管理项目 {#创建和管理数据库}
+
+### 添加项目 {#添加数据库}
1. 进入空间
-2. 点击右上角`创建数据库`
+2. 点击右上角`创建项目`
-### 重命名/删除数据库
+### 重命名/删除项目 {#重命名删除数据库}
1. 进入空间
-2. 将鼠标悬停在目标数据库上
+2. 将鼠标悬停在目标项目上
3. 点击`···`按钮打开菜单
4. 点击`重命名`或`删除`
-### 整理数据库中的资源
+### 整理项目中的资源 {#整理数据库中的资源}
-进入数据库后,左侧目录栏会显示当前数据库内的资源,例如表格、应用和自动化。你可以使用文件夹整理这些资源,让大型数据库更容易浏览。
+进入项目后,左侧目录栏会显示当前项目内的资源,例如表格、应用和自动化。你可以使用文件夹整理这些资源,让大型项目更容易浏览。
常见操作包括:
@@ -46,40 +48,40 @@ description: "创建、管理、导入导出数据库。通过 .tea 文件在 Te
- **添加描述**:表格、应用和自动化打开后,资源名称下方会显示 **添加描述**。点击后可以记录用途、负责人、交接说明或使用规则。首次打开带有描述的资源时,会自动展开;描述更新后,下次打开会再展开一次。
- **查看节点信息**:打开资源的 `...` 菜单,选择 **节点信息**,可查看文件夹、表格、自动化或应用 ID,以及创建和修改信息。
-### 复制数据库到另一个空间
+### 复制项目到另一个空间 {#复制数据库到另一个空间}
-第一步:在当前空间中选择要复制的数据库
+第一步:在当前空间中选择要复制的项目
-第二步:点击数据库菜单图标并选择`复制数据库`
+第二步:点击项目菜单图标并选择`复制项目`
第三步:在弹出的窗口中选择目标空间,需拥有目标空间的`可搭建`权限才能完成复制
-如果数据库较大,复制窗口会显示复制进度。请等复制完成后再关闭窗口。记录修改历史和协作者不会被复制。
+如果项目较大,复制窗口会显示复制进度。请等复制完成后再关闭窗口。记录修改历史和协作者不会被复制。
-如果数据库中包含指向其他空间的关联、查找、汇总、条件查找或条件汇总字段,Teable 会在复制前显示受影响字段。继续复制后,Teable 会在新数据库中把这些字段转换为单行文本。
+如果项目中包含指向其他空间的关联、查找、汇总、条件查找或条件汇总字段,Teable 会在复制前显示受影响字段。继续复制后,Teable 会在新项目中把这些字段转换为单行文本。
-### 将数据库移动到其他空间
+### 将项目移动到其他空间 {#将数据库移动到其他空间}
-拥有相应空间权限的用户可以把数据库移动到其他空间。如果移动后会让关联类字段跨空间引用,Teable 会先提示并列出受影响字段。确认后,Teable 会在移动过程中把这些字段转换为单行文本。
+拥有相应空间权限的用户可以把项目移动到其他空间。如果移动后会让关联类字段跨空间引用,Teable 会先提示并列出受影响字段。确认后,Teable 会在移动过程中把这些字段转换为单行文本。
-## 导入和导出数据库
+## 导入和导出项目 {#导入和导出数据库}
使用 AI 对话,将 Airtable、Baserow、NocoDB、SmartSuite 等系统迁移到 Teable。
-### 导入数据库(数据迁移)
+### 导入项目(数据迁移) {#导入数据库数据迁移}
-`.tea` 文件格式支持导入完整的数据库,包括所有表格、字段、数据和配置。适用于以下场景:
-- **数据迁移**:在不同 Teable 实例之间迁移数据库(如从 Teable Cloud 迁移到私有化部署)
-- **备份恢复**:恢复之前导出的数据库
-- **模板共享**:与其他团队共享完整的数据库结构
+`.tea` 文件格式支持导入完整的项目,包括所有表格、字段、数据和配置。适用于以下场景:
+- **数据迁移**:在不同 Teable 实例之间迁移项目(如从 Teable Cloud 迁移到私有化部署)
+- **备份恢复**:恢复之前导出的项目
+- **模板共享**:与其他团队共享完整的项目结构
**操作步骤:**
1. 进入空间
@@ -89,19 +91,19 @@ description: "创建、管理、导入导出数据库。通过 .tea 文件在 Te
-如果要从 Airtable 创建数据库,可以在同一导入窗口中选择 **从 Airtable 导入**。
+如果要从 Airtable 创建项目,可以在同一导入窗口中选择 **从 Airtable 导入**。
-### 导出数据库(备份与迁移)
+### 导出项目(备份与迁移) {#导出数据库备份与迁移}
-将数据库导出为 `.tea` 文件,用于备份或迁移。导出文件包含所有表格、字段、数据、视图和配置。
+将项目导出为 `.tea` 文件,用于备份或迁移。导出文件包含所有表格、字段、数据、视图和配置。
**操作步骤:**
1. 进入空间
-2. 鼠标悬浮在需要导出的数据库上
+2. 鼠标悬浮在需要导出的项目上
3. 点击`···`按钮打开菜单
4. 点击`导出`
5. 如需包含记录数据,保持 **包含记录** 开启;关闭后只会导出结构和配置
@@ -110,28 +112,28 @@ description: "创建、管理、导入导出数据库。通过 .tea 文件在 Te
-- 要在 Teable 实例之间迁移数据,从源实例导出数据库,然后将 `.tea` 文件导入到目标实例。所有数据和配置都会保留。
-- 跨数据库关联字段会在导出文件中转换为单行文本。
-- 跨空间复制或移动数据库时,跨空间关联类字段会转换为单行文本。
+- 要在 Teable 实例之间迁移数据,从源实例导出项目,然后将 `.tea` 文件导入到目标实例。所有数据和配置都会保留。
+- 跨项目关联字段会在导出文件中转换为单行文本。
+- 跨空间复制或移动项目时,跨空间关联类字段会转换为单行文本。
-## 分享数据库
+## 分享项目 {#分享数据库}
-数据库可以通过公开链接分享。分享范围可以是整个数据库,也可以是当前选中的某个节点。
+项目可以通过公开链接分享。分享范围可以是整个项目,也可以是当前选中的某个节点。
-1. 进入目标数据库
-2. 打开数据库或节点的分享入口
+1. 进入目标项目
+2. 打开项目或节点的分享入口
3. 开启 **公开分享到网络**
4. 复制分享链接或二维码
@@ -139,26 +141,26 @@ description: "创建、管理、导入导出数据库。通过 .tea 文件在 Te
| 范围 | 说明 |
|------|------|
-| **分享整个数据库** | 分享当前数据库中的全部节点。之后新增的数据表和文件夹也会自动包含在分享范围内。|
+| **分享整个项目** | 分享当前项目中的全部节点。之后新增的数据表和文件夹也会自动包含在分享范围内。|
| **分享选定的节点** | 分享当前选中的节点。分享文件夹时,会同时包含该文件夹下的子节点。|
分享设置中可以配置链接权限、允许查看者复制数据、访问密码,也可以重新生成链接、删除分享链接或复制嵌入配置。
如果分享范围中包含应用节点,应用需要先发布后才能通过公开链接访问。
-## 数据库内的功能
+## 项目内的功能 {#数据库内的功能}
-数据库可包含多个表格,用于组织和管理工作相关的各类信息。
+项目可包含多个表格,用于组织和管理工作相关的各类信息。
-例如,客户管理数据库可包含"客户公司"、"客户联系人"、"客户跟进记录"等表格;会议室管理数据库则可包含"会议室信息"、"设备管理"、"预约记录"等表格。
+例如,客户管理项目可包含"客户公司"、"客户联系人"、"客户跟进记录"等表格;会议室管理项目则可包含"会议室信息"、"设备管理"、"预约记录"等表格。
-因此,数据库的主要功能都围绕表格展开
+因此,项目的主要功能都围绕表格展开
- **创建表格**:可根据项目需求创建新表格,自定义表格结构、字段类型和数据格式
diff --git a/zh/basic/credential.mdx b/zh/basic/credential.mdx
index 2017a14e..a58ab1fd 100644
--- a/zh/basic/credential.mdx
+++ b/zh/basic/credential.mdx
@@ -39,7 +39,7 @@ description: 管理你的连接和 Secret,并把它们授权给应用和自动
授权时需要填 **变量名称**,也就是这份凭据在这个应用或自动化里的别名,命名规则和 Secret 的 Key 一致,代码里读取的就是这个别名。
-面板里可能出现 **尚未授权** 的占位项:复制应用、复制工作流、导入或复制数据库时,凭据不会跟着复制过来,只保留了代码需要的别名。点击 **绑定我的** 补上你自己的凭据,这个应用或自动化才能正常运行。
+面板里可能出现 **尚未授权** 的占位项:复制应用、复制工作流、导入或复制项目时,凭据不会跟着复制过来,只保留了代码需要的别名。点击 **绑定我的** 补上你自己的凭据,这个应用或自动化才能正常运行。
某个别名当前绑定的是别人的凭据时,可以点 **换成我的** 替换;点 **仅移除授权** 只解除绑定、保留占位项,代码不用改。
diff --git a/zh/basic/security.mdx b/zh/basic/security.mdx
index ead795d2..4b695338 100644
--- a/zh/basic/security.mdx
+++ b/zh/basic/security.mdx
@@ -114,13 +114,13 @@ Teable 提供多种数据备份方式:
| 方式 | 说明 | 适用场景 |
|------|------|----------|
-| **[Base 导出](/zh/basic/base#导出数据库(备份与迁移))** | 将整个数据库下载为 `.tea` 文件(包含结构、数据、自动化) | 完整备份、迁移 |
-| **[Base 复制](/zh/basic/base#duplicate-a-base-to-another-space)** | 在 Teable 内创建数据库副本 | 快速快照 |
+| **[项目导出](/zh/basic/base#导出数据库(备份与迁移))** | 将整个项目下载为 `.tea` 文件(包含结构、数据、自动化) | 完整备份、迁移 |
+| **[项目复制](/zh/basic/base#duplicate-a-base-to-another-space)** | 在 Teable 内创建项目副本 | 快速快照 |
| **[CSV 导出](/zh/basic/table/export)** | 导出单个表格数据 | 数据迁移 |
| **[API 导出](/zh/api-doc/record/get)** | 通过 REST API 程序化导出记录 | 自动化备份 |
- 您可以通过导出整个数据库为 `.tea` 文件、导出单个表格为 CSV 文件,或通过 Teable API 获取数据来手动备份您的数据库。
+ 您可以通过导出整个项目为 `.tea` 文件、导出单个表格为 CSV 文件,或通过 Teable API 获取数据来手动备份您的项目。
## 单点登录 (SSO)
diff --git a/zh/basic/space.mdx b/zh/basic/space.mdx
index 209baf43..bffa893d 100644
--- a/zh/basic/space.mdx
+++ b/zh/basic/space.mdx
@@ -63,17 +63,17 @@ description: "创建、重命名、删除和管理 Teable 空间。"
className="docs-screenshot"
/>
-## 分享给我的数据库
+## 分享给我的项目 {#分享给我的数据库}
-当别人把数据库作为协作者分享给你时,该数据库会显示在空间侧边栏的 **分享给我的** 中。
+当别人把项目作为协作者分享给你时,该项目会显示在空间侧边栏的 **分享给我的** 中。
-分享给你的数据库和自己空间中的数据库不同:
+分享给你的项目和自己空间中的项目不同:
- 访问权限由分享方控制
-- 可执行的操作取决于你被授予的数据库权限
-- 如果分享方移除你的访问权限,该数据库将不再显示
+- 可执行的操作取决于你被授予的项目权限
+- 如果分享方移除你的访问权限,该项目将不再显示
-关于数据库公开分享,请参阅 [数据库](/zh/basic/base)。
+关于项目公开分享,请参阅 [项目](/zh/basic/base)。
## 空间设置
@@ -96,7 +96,7 @@ description: "创建、重命名、删除和管理 Teable 空间。"
**在 IM 中聊天**
-空间管理员可以在**在 IM 中聊天**页面创建机器人,并配置模型、可访问的数据库、技能、文件和 IM 集成。
+空间管理员可以在**在 IM 中聊天**页面创建机器人,并配置模型、可访问的项目、技能、文件和 IM 集成。
**IM 集成**
diff --git a/zh/basic/space/base-invite.mdx b/zh/basic/space/base-invite.mdx
index 273e0543..f6875910 100644
--- a/zh/basic/space/base-invite.mdx
+++ b/zh/basic/space/base-invite.mdx
@@ -1,39 +1,39 @@
---
-title: "数据库邀请"
-description: '允许您以"数据库"为最小单位进行权限管控,您可以将成员仅邀请到特定的数据库中,而无需开放整个空间的访问权限,从而实现更精细、更安全的数据协作。'
+title: "项目邀请"
+description: "允许您以\"项目\"为最小单位进行权限管控,您可以将成员仅邀请到特定的项目中,而无需开放整个空间的访问权限,从而实现更精细、更安全的数据协作。"
---
-## 什么是数据库协作者?
+## 什么是项目协作者? {#什么是数据库协作者}
-数据库协作者是仅被邀请到特定数据库的成员,与空间协作者不同,他们只能访问被邀请的数据库,无法看到空间内的其他数据库。
+项目协作者是仅被邀请到特定项目的成员,与空间协作者不同,他们只能访问被邀请的项目,无法看到空间内的其他项目。
-## 添加数据库协作者
+## 添加项目协作者 {#添加数据库协作者}
-进入任意数据库,点击右上角的 `邀请` 按钮。支持两种添加方式:
+进入任意项目,点击右上角的 `邀请` 按钮。支持两种添加方式:
-- **通过电子邮件邀请**:直接输入对方的邮箱地址,设置好数据库权限(如"可搭建"),点击 **发送邀请** 即可。
+- **通过电子邮件邀请**:直接输入对方的邮箱地址,设置好项目权限(如"可搭建"),点击 **发送邀请** 即可。
- **通过链接邀请**:点击切换至"通过链接邀请"标签页,生成一个专属邀请链接。将此链接复制发送给对方,他们点击即可加入。
-邮件邀请发送后,面板会显示数据库直达链接,可复制后发给受邀者。受邀者也会收到站内通知,点击通知即可打开该数据库。
+邮件邀请发送后,面板会显示项目直达链接,可复制后发给受邀者。受邀者也会收到站内通知,点击通知即可打开该项目。
-在邀请界面中,您可以查看当前能访问该数据库的所有协作者名单:
+在邀请界面中,您可以查看当前能访问该项目的所有协作者名单:
-- **数据库协作者**:仅被邀请到当前数据库的人员。
-- **空间协作者**:名字旁带有"空间"标识,表示该成员是整个空间的协作者,自动继承了访问该数据库的权限。
+- **项目协作者**:仅被邀请到当前项目的人员。
+- **空间协作者**:名字旁带有"空间"标识,表示该成员是整个空间的协作者,自动继承了访问该项目的权限。
-数据库提供四种层级的权限角色,以满足不同的协作深度。更详细的权限对比请参阅[协作权限](/zh/basic/space/space-permission)。
+项目提供四种层级的权限角色,以满足不同的协作深度。更详细的权限对比请参阅[协作权限](/zh/basic/space/space-permission)。
如需实现更精细的表格、字段及记录级别的权限管控,请使用[权限矩阵](/zh/basic/authority-matrix)功能。
@@ -46,11 +46,11 @@ description: '允许您以"数据库"为最小单位进行权限管控,您可
## 使用场景
-数据库邀请适用于外部协作,例如,聘请外部设计师整理素材库时,只需将其邀请进入"素材管理"数据库并赋予**可编辑**权限,设计师无法看到空间内的任何其他数据库。
+项目邀请适用于外部协作,例如,聘请外部设计师整理素材库时,只需将其邀请进入"素材管理"项目并赋予**可编辑**权限,设计师无法看到空间内的任何其他项目。
## 注意事项
-- **权限继承**:空间"可管理"成员自动拥有该空间下所有数据库的最高权限,无法在数据库层级将其降级。
-- **链接安全**:任何获得邀请链接的人都可以尝试加入数据库。如果链接泄露,可点击链接右侧的 X 将其删除。
+- **权限继承**:空间"可管理"成员自动拥有该空间下所有项目的最高权限,无法在项目层级将其降级。
+- **链接安全**:任何获得邀请链接的人都可以尝试加入项目。如果链接泄露,可点击链接右侧的 X 将其删除。
[权限矩阵](/zh/basic/authority-matrix)和[协作权限](/zh/basic/space/space-permission)并存时,仅**可管理**用户不受权限矩阵限制,其他用户均受权限矩阵管控。
diff --git a/zh/basic/space/billing.mdx b/zh/basic/space/billing.mdx
index e6e89d42..f40ab97d 100644
--- a/zh/basic/space/billing.mdx
+++ b/zh/basic/space/billing.mdx
@@ -41,19 +41,19 @@ description: "了解如何管理订阅、查看账单详情、监控用量以及
| 指标 | 描述 |
|------|------|
-| **协作者总数** | 当前空间及其数据库中可计费的协作者数量 |
+| **协作者总数** | 当前空间及其项目中可计费的协作者数量 |
| **自动化每月最大运行次数** | 每月自动化运行次数额度。每次自动化运行会消耗 1 次运行次数 |
| **记录总数** | 空间内所有表格的总行数 |
| **附件容量** | 上传附件使用的总存储空间 |
| **邮件总数** | 通过自动化使用 Teable 邮件服务发送的邮件数量 |
-空间回收站和数据库回收站中的数据也会计入记录总数统计。如需减少记录总数,请清理「空间 → 回收站」或「数据库 → 回收站」中的数据。
+空间回收站和项目回收站中的数据也会计入记录总数统计。如需减少记录总数,请清理「空间 → 回收站」或「项目 → 回收站」中的数据。
-在 **记录总数** 卡片中点击**详情**,可以按数据库查看记录用量。详情弹窗会展示每个数据库的活跃记录、回收站记录和总记录数。你也可以从弹窗前往数据库回收站,或彻底删除已经在回收站中的数据库。
+在 **记录总数** 卡片中点击**详情**,可以按项目查看记录用量。详情弹窗会展示每个项目的活跃记录、回收站记录和总记录数。你也可以从弹窗前往项目回收站,或彻底删除已经在回收站中的项目。
### 达到额度上限时
-空间触及套餐额度后,Teable 会在操作执行前拦截,并弹出升级弹窗,说明触及的是哪一项额度、已经用掉多少,并提供按数据库查看用量的入口。粘贴、填充、复制行、批量新建记录、导入和上传附件都适用。
+空间触及套餐额度后,Teable 会在操作执行前拦截,并弹出升级弹窗,说明触及的是哪一项额度、已经用掉多少,并提供按项目查看用量的入口。粘贴、填充、复制行、批量新建记录、导入和上传附件都适用。
要继续操作,可以升级套餐,或删除记录、附件腾出空间。
@@ -129,9 +129,9 @@ description: "了解如何管理订阅、查看账单详情、监控用量以及
### 席位
-席位需要提前购买,按团队的预期规模多买一些也没问题。空间及其数据库中**所有者**、**可搭建**、**可编辑**角色的协作者会占用席位,**可评论**和**可查看**免费。
+席位需要提前购买,按团队的预期规模多买一些也没问题。空间及其项目中**所有者**、**可搭建**、**可编辑**角色的协作者会占用席位,**可评论**和**可查看**免费。
-在云版中,已购席位是硬性上限。超出席位的操作会被拒绝,并弹出增购席位的窗口,包括邮件邀请、创建计费角色的邀请链接或把链接改成计费角色、通过这类链接加入、直接添加协作者,以及把成员提升为计费角色。已经占用席位的成员加入其他数据库或调整角色,不会额外占用席位。
+在云版中,已购席位是硬性上限。超出席位的操作会被拒绝,并弹出增购席位的窗口,包括邮件邀请、创建计费角色的邀请链接或把链接改成计费角色、通过这类链接加入、直接添加协作者,以及把成员提升为计费角色。已经占用席位的成员加入其他项目或调整角色,不会额外占用席位。
要继续操作,可以在订阅计划页增购席位,或改用免费的可评论、可查看角色。只有空间所有者可以购买席位。
diff --git a/zh/basic/space/space-invite.mdx b/zh/basic/space/space-invite.mdx
index fff6889d..ebe65742 100644
--- a/zh/basic/space/space-invite.mdx
+++ b/zh/basic/space/space-invite.mdx
@@ -5,7 +5,7 @@ description: "通过邮箱或者链接来邀请他人成为空间协作者"
## 什么是空间协作者?
-当您邀请另一用户进入空间时,该用户将成为空间协作者,能够访问该空间中的所有数据库。
+当您邀请另一用户进入空间时,该用户将成为空间协作者,能够访问该空间中的所有项目。
## 添加空间协作者
@@ -38,7 +38,7 @@ description: "通过邮箱或者链接来邀请他人成为空间协作者"
className="docs-screenshot"
/>
-空间协作者可访问空间内所有数据库,如果某用户只需要访问空间中的部分数据库,建议将其设置为[数据库协作者](/zh/basic/space/base-invite)。
+空间协作者可访问空间内所有项目,如果某用户只需要访问空间中的部分项目,建议将其设置为[项目协作者](/zh/basic/space/base-invite)。
## 删除邀请链接
@@ -62,7 +62,7 @@ description: "通过邮箱或者链接来邀请他人成为空间协作者"
* **权限限制**:只有`可管理`或`可搭建`的用户才能移除其他协作者
* **自我移除**:当空间中还有其他`可管理`用户时,可以移除自己的访问权限
-* **权限范围**:移除空间协作者,不会影响其单独获得的数据库权限
+* **权限范围**:移除空间协作者,不会影响其单独获得的项目权限
添加新用户到空间时,你可以分配以下角色(详见[协作权限明细](/zh/basic/space/space-permission)):
@@ -74,8 +74,8 @@ description: "通过邮箱或者链接来邀请他人成为空间协作者"
| 可评论 | 可以对记录进行评论,不能修改数据。|
| 可查看 | 可以查看,不可评论。|
-## 查看数据库权限
+## 查看项目权限 {#查看数据库权限}
-在空间协作者列表中,每个成员或部门只占一行,即使还单独拥有某些数据库的权限也是如此。角色旁的 **数据库权限** 标记会显示被邀请进入了几个数据库;从未加入空间的人,则显示为 **仅拥有部分数据库的访问权限**。
+在空间协作者列表中,每个成员或部门只占一行,即使还单独拥有某些项目的权限也是如此。角色旁的 **项目权限** 标记会显示被邀请进入了几个项目;从未加入空间的人,则显示为 **仅拥有部分项目的访问权限**。
-展开该行可以看到这些数据库,以及在每个数据库中的角色。在这里点击 **移除数据库权限** 可以收回其中一个数据库的权限;在仅有数据库权限的行上点击 **移除协作者**,会一次性收回该成员在本空间内的全部数据库权限。
+展开该行可以看到这些项目,以及在每个项目中的角色。在这里点击 **移除项目权限** 可以收回其中一个项目的权限;在仅有项目权限的行上点击 **移除协作者**,会一次性收回该成员在本空间内的全部项目权限。
diff --git a/zh/basic/space/space-permission.mdx b/zh/basic/space/space-permission.mdx
index 9da3ecf7..3a1a9197 100644
--- a/zh/basic/space/space-permission.mdx
+++ b/zh/basic/space/space-permission.mdx
@@ -1,20 +1,20 @@
---
title: "协作权限明细"
-description: "空间和数据库中各权限级别的操作范围说明。"
+description: "空间和项目中各权限级别的操作范围说明。"
---
Teable 提供更细粒度的表格、字段、记录级别权限的控制能力,请查看[权限矩阵](/zh/basic/authority-matrix)
-### 数据库操作
+### 项目操作 {#数据库操作}
| 描述 | 可管理/可搭建 | 可编辑 | 可评论 | 可查看 |
| --------------------- | :-----: | :-: | :-: | :-: |
-| 查看数据库内数据 | ✅ | ✅ | ✅ | ✅ |
+| 查看项目内数据 | ✅ | ✅ | ✅ | ✅ |
| 邀请与您权限等级相同或以下的用户 | ✅ | ✅ | ✅ | ✅ |
| 创建或删除视图分享链接 | ✅ | ✅ | | |
| 创建、编辑自动化 | ✅ | | | |
| 开启权限矩阵 | ✅ | | | |
-| 创建或删除数据库协作者邀请链接 | ✅ | | | |
-| 重命名数据库 | ✅ | | | |
+| 创建或删除项目协作者邀请链接 | ✅ | | | |
+| 重命名项目 | ✅ | | | |
### 记录操作
@@ -52,12 +52,12 @@ description: "空间和数据库中各权限级别的操作范围说明。"
| 描述 | 可管理 | 可搭建 | 可编辑 | 可评论 | 可查看 |
| ---------------------- | :-: | :-: | :-: | :-: | :-: |
-| 访问空间内的所有数据库 | ✅ | ✅ | ✅ | ✅ | ✅ |
+| 访问空间内的所有项目 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 邀请与你权限等级相同或以下的用户 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 重命名空间 | ✅ | ✅ | | | |
-| 在空间中添加和删除数据库 | ✅ | ✅ | | | |
-| 在空间内重新排列数据库 | ✅ | ✅ | | | |
-| 将数据库从一个空间移动到另一个空间 | ✅ | ✅ | | | |
+| 在空间中添加和删除项目 | ✅ | ✅ | | | |
+| 在空间内重新排列项目 | ✅ | ✅ | | | |
+| 将项目从一个空间移动到另一个空间 | ✅ | ✅ | | | |
| 调整账单设置,升级空间 | ✅ | | | | |
| 授予可管理权限 | ✅ | | | | |
diff --git a/zh/basic/table.mdx b/zh/basic/table.mdx
index 93d1bf4a..5e973afb 100644
--- a/zh/basic/table.mdx
+++ b/zh/basic/table.mdx
@@ -1,16 +1,16 @@
---
title: "表格"
-description: "在数据库中创建、导入、分享和管理表格。"
+description: "在项目中创建、导入、分享和管理表格。"
---
{/* mintlify-resync: 2026-05-14 */}
-每个数据库可以包含多个表格,用于收集、存储和处理相关数据。Teable 的表格等同于关系数据库中的表,与 Excel 工作表有所不同——了解[两者的区别](/zh/compare/teable-vs-excel)有助于更好地掌握 Teable。
+每个项目可以包含多个表格,用于收集、存储和处理相关数据。Teable 的表格等同于关系数据库中的表,与 Excel 工作表有所不同——了解[两者的区别](/zh/compare/teable-vs-excel)有助于更好地掌握 Teable。
## 创建和管理表格
### 新建表格
-在数据库中点击左侧目录顶部的 `+` 按钮,可选择:
+在项目中点击左侧目录顶部的 `+` 按钮,可选择:
-- **恢复**:将表格还原到数据库
+- **恢复**:将表格还原到项目
- **清空**:永久删除,无法恢复
恢复表格不会还原已转换的关联字段,其他表格中的字段仍然是文本。如果需要恢复关联关系,请重新创建关联字段。
diff --git a/zh/basic/table/import.mdx b/zh/basic/table/import.mdx
index 6155462b..5d91e08b 100644
--- a/zh/basic/table/import.mdx
+++ b/zh/basic/table/import.mdx
@@ -4,7 +4,7 @@ description: "将 CSV、Excel、Airtable 或 Google Sheets 数据导入 Teable
---
{/* mintlify-resync: 2026-05-14 */}
-导入可用于快速初始化新表格,将新数据追加到已有表格,也可以把 Airtable 或 Google Sheets 中的表导入到 Teable 数据库。导入整个数据库时,同样可以选择 Airtable 和 Google Sheets 作为来源。
+导入可用于快速初始化新表格,将新数据追加到已有表格,也可以把 Airtable 或 Google Sheets 中的表导入到 Teable 项目。导入整个项目时,同样可以选择 Airtable 和 Google Sheets 作为来源。
在 AI 对话中使用 Connect Everything,将 Airtable、Baserow、NocoDB、SmartSuite 等系统迁移到 Teable。
@@ -72,16 +72,16 @@ Excel 文件大小限制为 **5MB**。如果您需要导入更大规模的数据
如果当前实例已配置 Airtable 集成,可以通过两种方式使用 Airtable 导入:
-- 要创建新的 Teable 数据库,打开目标空间菜单,点击 **导入**,然后选择 **从 Airtable 导入**。
-- 要把 Airtable 中的表导入到正在查看的 Teable 数据库中,使用数据库内的资源菜单:
+- 要创建新的 Teable 项目,打开目标空间菜单,点击 **导入**,然后选择 **从 Airtable 导入**。
+- 要把 Airtable 中的表导入到正在查看的 Teable 项目中,使用项目内的资源菜单:
-1. 打开目标 Teable 数据库。
+1. 打开目标 Teable 项目。
2. 点击左侧目录栏顶部的 `+`。
3. 在 **从第三方资源导入** 下选择 **Airtable**。
@@ -99,8 +99,8 @@ Excel 文件大小限制为 **5MB**。如果您需要导入更大规模的数据
两个入口都可以发起导入:
-- 要创建新的 Teable 数据库,打开目标空间菜单,点击 **导入**,然后选择 **从 Google Sheets 导入**。
-- 要把工作表导入到正在查看的数据库,点击左侧目录栏顶部的 `+`,在 **从第三方资源导入** 下选择 **Google Sheets**。
+- 要创建新的 Teable 项目,打开目标空间菜单,点击 **导入**,然后选择 **从 Google Sheets 导入**。
+- 要把工作表导入到正在查看的项目,点击左侧目录栏顶部的 `+`,在 **从第三方资源导入** 下选择 **Google Sheets**。
@@ -113,7 +113,7 @@ Excel 文件大小限制为 **5MB**。如果您需要导入更大规模的数据
每张工作表以卡片形式列出,并标注行数和列数。选中要导入的工作表;如果只需要字段结构、不需要数据,取消勾选 **导入记录数据**。
- 点击 **开始导入**,并保持弹窗打开。弹窗会按表显示进度,结束后列出每张表导入了多少条记录。新建数据库的导入完成后,可以直接点 **打开 base** 查看结果。
+ 点击 **开始导入**,并保持弹窗打开。弹窗会按表显示进度,结束后列出每张表导入了多少条记录。新建项目的导入完成后,可以直接点 **打开项目** 查看结果。
diff --git a/zh/basic/view/toolbar.mdx b/zh/basic/view/toolbar.mdx
index 47a7ddc0..3011ed25 100644
--- a/zh/basic/view/toolbar.mdx
+++ b/zh/basic/view/toolbar.mdx
@@ -148,9 +148,9 @@ description: "使用筛选、分组、排序、分享和视图协作配置当前
## 分享视图
-**分享视图**用于把当前视图发布成链接。访问者看到的是这个视图中的数据和布局,不等同于被邀请成为数据库协作者。
+**分享视图**用于把当前视图发布成链接。访问者看到的是这个视图中的数据和布局,不等同于被邀请成为项目协作者。
-如果需要分享整个数据库、指定表格或文件夹,请在 [数据库](/zh/basic/base) 中使用数据库分享。
+如果需要分享整个项目、指定表格或文件夹,请在 [项目](/zh/basic/base) 中使用项目分享。
| 分享方式 | 适合场景 |
| --- | --- |
@@ -240,5 +240,5 @@ description: "使用筛选、分组、排序、分享和视图协作配置当前
## 注意事项
- 修改筛选、分组、排序、字段显示或行高会影响当前视图中所有使用该视图的协作者,除非你正在使用个人模式。
-- 分享视图公开的是当前视图结果,不是完整数据库权限。需要长期协作时,请使用成员权限或数据库分享。
+- 分享视图公开的是当前视图结果,不是完整项目权限。需要长期协作时,请使用成员权限或项目分享。
- 在任何模式下,修改单元格内容都会同步给所有人。
diff --git a/zh/deploy/env.mdx b/zh/deploy/env.mdx
index ac60568d..13760e8d 100644
--- a/zh/deploy/env.mdx
+++ b/zh/deploy/env.mdx
@@ -71,7 +71,7 @@ mode: "wide"
| BACKEND_MAIL_AUTH_USER | 默认邮件服务器认证用户名 | - | - | username |
| BACKEND_MAIL_AUTH_PASS | 默认邮件服务器认证密码 | - | - | usertoken |
| BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH | 邀请邮件主题中邀请人名称的最大长度。为空或 0 时不截断 | - | - | 32 |
-| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | 邀请邮件主题中空间或数据库名称的最大长度。为空或 0 时不截断 | - | - | 32 |
+| BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | 邀请邮件主题中空间或项目名称的最大长度。为空或 0 时不截断 | - | - | 32 |
| **会话/JWT 配置** | | | | |
| BACKEND_SESSION_EXPIRES_IN | 会话过期时间 | 7d | - | 7d |
| BACKEND_SESSION_COOKIE_SECURE | 是否启用会话 Cookie 安全保护,默认为 false | false | - | true |
@@ -93,7 +93,7 @@ mode: "wide"
| TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | 单次变更最大记录数 | 20000 | - | 20000 |
| TABLE_LIMIT_COMPUTED_CELL_VALUE_MAX_BYTES | 计算字段单元格值最大字节数 | 262144 | - | 262144 |
| TABLE_LIMIT_FORMULA_MAX_LENGTH | 公式最大长度 | 8192 | - | 8192 |
-| TABLE_LIMIT_TABLES_PER_BASE_MAX | 每个数据库(Base)最大表数量 | 1000 | - | 1000 |
+| TABLE_LIMIT_TABLES_PER_BASE_MAX | 每个项目最大表数量 | 1000 | - | 1000 |
| TABLE_LIMIT_FIELDS_PER_TABLE_MAX | 每张表最大字段数 | 500 | - | 500 |
| TABLE_LIMIT_VIEWS_PER_TABLE_MAX | 每张表最大视图数 | 100 | - | 100 |
| TABLE_LIMIT_CREATE_TABLE_FIELDS_MAX | 创建表时允许的最大字段数 | 1000 | - | 1000 |
@@ -133,10 +133,10 @@ mode: "wide"
| TELEMETRY_REPORT_DISABLED | 禁用自托管遥测上报,包括联网实例的许可合规上报 | false | - | true |
| **数据库配置** | | | | |
| PRISMA_DATABASE_URL | 数据库连接 URL,必须配置 | - | 是 | postgresql://teable:teable@127.0.0.1:5432/teable |
-| PUBLIC_DATABASE_PROXY | 对外可达的数据库地址(host:port),Base「数据库连接」面板生成的连接凭据会使用该地址;配置后即可从外部进行只读 SQL 访问 | - | - | db.example.com:42345 |
+| PUBLIC_DATABASE_PROXY | 对外可达的数据库地址(host:port),项目「数据库连接」面板生成的连接凭据会使用该地址;配置后即可从外部进行只读 SQL 访问 | - | - | db.example.com:42345 |
| PRISMA_TRANSACTION_TIMEOUT | 事务运行超时时间(毫秒),对于长时间运行的事务(如包含多个外键的批量更新)可以增加此值 | 5000 | - | 60000 |
| PRISMA_TRANSACTION_MAX_WAIT | 从连接池获取事务的最大等待时间(毫秒) | 2000 | - | 5000 |
-| BIG_TRANSACTION_TIMEOUT | 大型内部事务的超时时间(毫秒),例如导出大型数据库 | 600000 | - | 1200000 |
+| BIG_TRANSACTION_TIMEOUT | 大型内部事务的超时时间(毫秒),例如导出大型项目 | 600000 | - | 1200000 |
## 密钥与轮换