Query SeaTable with SQL

This is the recommended endpoint for reading and modifying data in SeaTable. It supports SELECT, INSERT, UPDATE, and DELETE — giving you full access to filter, sort, group, join, and aggregate data in a single request. It works seamlessly across both normal and big data storage and returns column metadata alongside the results.

SQL syntax is case insensitive and most common functions work as expected — including now(), round(), upper(), trim(), abs(), and many more. Some functions use SeaTable-specific names (e.g. mid() instead of SUBSTR(), concatenate() instead of CONCAT()). See the function reference for the complete list and a MySQL/MariaDB equivalents table.

Example queries for a table Contacts with columns Name, Age, City:

  • SELECT * FROM Contacts WHERE Age >= 18 ORDER BY Name LIMIT 100
  • SELECT City, COUNT(*), AVG(Age) FROM Contacts GROUP BY City
  • SELECT DISTINCT City FROM Contacts
  • UPDATE Contacts SET City = 'Berlin' WHERE Name = 'Alice'
  • DELETE FROM Contacts WHERE Age < 18
  • SELECT * FROM Contacts WHERE Name = ? AND Age = ? (parameterized query)

For the complete SQL reference, see the SeaTable Developer Manual:

  • SELECT — retrieve, filter, sort, group, and join rows
  • INSERT — append rows (big data storage only)
  • UPDATE — modify rows
  • DELETE — remove rows
  • Functions — all supported functions and MySQL/MariaDB equivalents
  • Limitations — column writability, NULL handling, list types

📘

Avoid SQL injection

Use ? placeholders in your SQL statement and pass the actual values via the parameters array. This protects against SQL injection. Example: SELECT * FROM T WHERE Name = ? AND Age = ? with parameters: ["Alice", 30].

Limits

  • Default: 100 rows. Maximum: 10,000 rows. Use LIMIT and OFFSET to paginate.
  • Link columns return a maximum of 50 linked records per row.
  • INSERT only works with bases that have big data storage enabled.

🚧

Key restrictions

  • Functions and expressions are not supported in UPDATE SET or INSERT VALUES — only constant values are allowed.
  • JOIN keyword is not supported — use implicit joins: SELECT ... FROM T1, T2 WHERE T1.col = T2.col.
  • Subqueries and UNION are not supported.
  • SELECT uses column names by default. Set convert_keys to false to get column keys instead.
Path Params
string
required

The unique identifier of a base. Sometimes also called dtable_uuid.

Body Params
string
required

SQL-Query to get rows from base.

boolean

Determines if the columns are returned as their keys (false by default) or their names (true).

parameters
array

Parameters in SQL clause to avoid sql injection. Only needed, if you use ? in the SQL statement. The parameters will replace the ? according to their order in the array.

parameters
boolean

Show rows from normal and Big Data backend (false by default) or limit the output only to the normal backend (true).

Responses

Language
Credentials
Bearer
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json