Read with SQL
Runs one SELECT as you and returns rows and columns.
POST/v1/sql/query
Fast for questions a filter cannot ask: aggregates, GROUP BY, CASE, functions. The dialect: SELECT <columns or aggregates> FROM <table> [WHERE …] [GROUP BY …] [ORDER BY …] [LIMIT n OFFSET m]; UPDATE <table> SET col = expr [WHERE …]; DELETE FROM <table> [WHERE …]. One table per statement; field names or ids (double-quote names with spaces); ‘text’, numbers, TRUE, FALSE, NULL, CURRENT_DATE; AND OR NOT, = <> < <= > >=, [NOT] LIKE, [NOT] IN (…), IS [NOT] NULL, [NOT] BETWEEN, CASE WHEN cond THEN v … [ELSE v] END and CASE expr WHEN value THEN v … [ELSE v] END; a select takes its choice’s label (any case) or id; functions LENGTH LOWER UPPER TRIM ABS ROUND COALESCE SUBSTR DATE STRFTIME IFNULL INSTR REPLACE; link columns: col HAS ANY (‘id’, …), col HAS ALL (…), col IS EMPTY. Your text is never executed: it is compiled against your own permissions, and a column you may not read is simply an unknown column. At most 1000 rows; add LIMIT.
Requires the records:read scope. Operation sql.query. MCP tool sql_query. CLI, once published: gtable sql query.
Headers
| Name | Type | Required | Description |
|---|---|---|---|
Idempotency-Key | string | no | Any unique string. Sending the same key with the same request again returns the first response (marked Idempotency-Replayed: true) instead of running it twice. Reusing it for a different request is refused with 409. Kept for 24 hours. Up to 255 characters. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
sql | string | yes | Up to 20000 characters. |
Response
Success
dataobjectrequiredRefused
errorobjectrequired