# Backend (console) Backend projects, tables, columns, rows, keys and logs, as the console and personal tokens use them. 19 routes, from the API’s own OpenAPI document. URL: https://docs.qaldy.com/reference/api/backend/ 19 routes. Every path starts at `https://cloud-api.qaldy.com`. Sign-in, tokens, errors and limits are on the [overview](https://docs.qaldy.com/reference/api/). ## Routes | Method | Path | What it does | |---|---|---| | [[GET]] | [`/​v1/​backend/​projects/​{projectId}`](#get-v1-backend-projects-projectid) | One backend: tables, settings, counts and what you may change | | [[GET]] | [`/​v1/​backend/​projects/​{projectId}/​keys`](#get-v1-backend-projects-projectid-keys) | Keys of a backend (prefixes only; owner) | | [[POST]] | [`/​v1/​backend/​projects/​{projectId}/​keys`](#post-v1-backend-projects-projectid-keys) | Create a key; its value is in this answer only (owner) | | [[DELETE]] | [`/​v1/​backend/​projects/​{projectId}/​keys/​{keyId}`](#delete-v1-backend-projects-projectid-keys-keyid) | Revoke a key at once (owner) | | [[GET]] | [`/​v1/​backend/​projects/​{projectId}/​logs`](#get-v1-backend-projects-projectid-logs) | Recent data API requests and the last hour of load | | [[PATCH]] | [`/​v1/​backend/​projects/​{projectId}/​settings`](#patch-v1-backend-projects-projectid-settings) | Rate limit, allowed browser origins and public-read tables (owner) | | [[POST]] | [`/​v1/​backend/​projects/​{projectId}/​tables`](#post-v1-backend-projects-projectid-tables) | Create a table with typed columns (id and created_at are added) | | [[DELETE]] | [`/​v1/​backend/​projects/​{projectId}/​tables/​{table}`](#delete-v1-backend-projects-projectid-tables-table) | Drop a table and its rows (the table's name typed back) | | [[POST]] | [`/​v1/​backend/​projects/​{projectId}/​tables/​{table}/​columns`](#post-v1-backend-projects-projectid-tables-table-columns) | Add a column | | [[GET]] | [`/​v1/​backend/​projects/​{projectId}/​tables/​{table}/​export`](#get-v1-backend-projects-projectid-tables-table-export) | Every row as CSV or JSON (up to 5,000) | | [[POST]] | [`/​v1/​backend/​projects/​{projectId}/​tables/​{table}/​import`](#post-v1-backend-projects-projectid-tables-table-import) | Append rows from CSV (header row = column names; all or nothing per check) | | [[PUT]] | [`/​v1/​backend/​projects/​{projectId}/​tables/​{table}/​policy`](#put-v1-backend-projects-projectid-tables-table-policy) | Set the rules of a table from their sentences (owner) | | [[POST]] | [`/​v1/​backend/​projects/​{projectId}/​tables/​{table}/​policy/​test`](#post-v1-backend-projects-projectid-tables-table-policy-test) | Try the rules as a visitor, a signed-in person or a key; nothing is written (owner) | | [[GET]] | [`/​v1/​backend/​projects/​{projectId}/​tables/​{table}/​rows`](#get-v1-backend-projects-projectid-tables-table-rows) | A page of rows (same filters as the data API) | | [[POST]] | [`/​v1/​backend/​projects/​{projectId}/​tables/​{table}/​rows`](#post-v1-backend-projects-projectid-tables-table-rows) | Insert rows | | [[PATCH]] | [`/​v1/​backend/​projects/​{projectId}/​tables/​{table}/​rows/​{id}`](#patch-v1-backend-projects-projectid-tables-table-rows-id) | Change one row | | [[DELETE]] | [`/​v1/​backend/​projects/​{projectId}/​tables/​{table}/​rows/​{id}`](#delete-v1-backend-projects-projectid-tables-table-rows-id) | Delete one row | | [[GET]] | [`/​v1/​workspaces/​{ws}/​backend/​projects`](#get-v1-workspaces-ws-backend-projects) | Backend projects you can see | | [[POST]] | [`/​v1/​workspaces/​{ws}/​backend/​projects`](#post-v1-workspaces-ws-backend-projects) | New backend: a datacenter on the island, a sample table, no keys yet | ## Reference ### [[GET]] `/v1/backend/projects/{projectId}` One backend: tables, settings, counts and what you may change. - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `read` scope. | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `id` | string | yes | at least 1 characters | | `name` | string | yes | at least 1 characters | | `slug` | string | yes | at least 1 characters | | `description` | string | yes | | | `createdAt` | string (date-time) | yes | | | `url` | string | yes | at least 1 characters | | `tableCount` | integer | yes | at least 0 | | `keyCount` | integer | yes | at least 0 | | `rowCount` | integer | yes | at least 0 | | `requestsPerMin` | number | yes | at least 0 | | `workspaceId` | string | yes | at least 1 characters | | `createdBy` | string | yes | at least 1 characters | | `settings` | object | yes | | | `settings.rateLimitPerMin` | integer | yes | 10 to 100000 | | `settings.ipRatePerMin` | integer | yes | 10 to 100000 | | `settings.maxBodyKb` | integer | yes | 1 to 1024 | | `settings.allowedOrigins` | string[] | yes | up to 20 items | | `settings.identity` | object or null | yes | | | `tables` | object[] | yes | | | `tables[].name` | string | yes | | | `tables[].columns` | object[] | yes | up to 66 items | | `tables[].publicRead` | boolean | yes | | | `tables[].rules` | object[] | yes | up to 16 items | | `tables[].rowCount` | integer or null | yes | at least 0 | | `tables[].createdAt` | string (date-time) | yes | | | `canEdit` | boolean | yes | | | `canAdmin` | boolean | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[GET]] `/v1/backend/projects/{projectId}/keys` Keys of a backend (prefixes only; owner). - **Authentication:** the console’s session cookie. - **Token:** not available. This route is for a signed-in person in the console (`403 console_only` for a token). | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `id` | string | yes | at least 1 characters | | `name` | string | yes | 1 to 60 characters | | `kind` | "publishable" · "secret" | yes | | | `prefix` | string | yes | at least 1 characters | | `last4` | string | yes | 4 to 4 characters | | `scopes` | "rows:read" · "rows:write" · "schema:write"[] | yes | up to 3 items | | `tables` | string[] or null | yes | up to 64 items | | `createdAt` | string (date-time) | yes | | | `createdBy` | string | yes | at least 1 characters | | `lastUsedAt` | string (date-time) or null | yes | | | `revokedAt` | string (date-time) or null | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[POST]] `/v1/backend/projects/{projectId}/keys` Create a key; its value is in this answer only (owner). - **Authentication:** the console’s session cookie. - **Token:** not available. This route is for a signed-in person in the console (`403 console_only` for a token). | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | **Request body** (`application/json`) | Field | Type | Required | Notes | |---|---|---|---| | `kind` | "publishable" · "secret" | yes | | | `name` | string | yes | 1 to 60 characters | | `scopes` | "rows:read" · "rows:write" · "schema:write"[] | | up to 3 items | | `tables` | string[] or null | | up to 64 items | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `key` | object | yes | | | `key.id` | string | yes | at least 1 characters | | `key.name` | string | yes | 1 to 60 characters | | `key.kind` | "publishable" · "secret" | yes | | | `key.prefix` | string | yes | at least 1 characters | | `key.last4` | string | yes | 4 to 4 characters | | `key.scopes` | "rows:read" · "rows:write" · "schema:write"[] | yes | up to 3 items | | `key.tables` | string[] or null | yes | up to 64 items | | `key.createdAt` | string (date-time) | yes | | | `key.createdBy` | string | yes | at least 1 characters | | `key.lastUsedAt` | string (date-time) or null | yes | | | `key.revokedAt` | string (date-time) or null | yes | | | `secret` | string | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[DELETE]] `/v1/backend/projects/{projectId}/keys/{keyId}` Revoke a key at once (owner). - **Authentication:** the console’s session cookie. - **Token:** not available. This route is for a signed-in person in the console (`403 console_only` for a token). | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `keyId` | path | string | yes | 1 to 64 characters | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `ok` | true | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[GET]] `/v1/backend/projects/{projectId}/logs` Recent data API requests and the last hour of load. - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `read` scope. | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `limit` | query | integer | | 1 to 200. default 50 | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `logs` | object[] | yes | | | `logs[].id` | string | yes | at least 1 characters | | `logs[].at` | string (date-time) | yes | | | `logs[].method` | string | yes | 1 to 10 characters | | `logs[].path` | string | yes | up to 300 characters | | `logs[].table` | string or null | yes | | | `logs[].status` | integer | yes | 100 to 599 | | `logs[].durationMs` | integer | yes | at least 0 | | `logs[].keyPrefix` | string or null | yes | | | `logs[].keyName` | string or null | yes | up to 60 characters | | `logs[].keyKind` | "publishable" · "secret" · null or null | yes | | | `logs[].rows` | integer or null | yes | at least 0 | | `logs[].errorCode` | string or null | yes | | | `metrics` | object | yes | | | `metrics.windowMinutes` | integer | yes | at least 1 | | `metrics.perMinute` | integer[] | yes | up to 120 items | | `metrics.requestsPerMin` | number | yes | at least 0 | | `metrics.total` | integer | yes | at least 0 | | `metrics.errors` | integer | yes | at least 0 | | `metrics.p50Ms` | number or null | yes | at least 0 | | `metrics.p95Ms` | number or null | yes | at least 0 | | `metrics.lastRequestAt` | string (date-time) or null | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[PATCH]] `/v1/backend/projects/{projectId}/settings` Rate limit, allowed browser origins and public-read tables (owner). - **Authentication:** the console’s session cookie. - **Token:** not available. This route is for a signed-in person in the console (`403 console_only` for a token). | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | **Request body** (`application/json`) | Field | Type | Required | Notes | |---|---|---|---| | `rateLimitPerMin` | integer | | 10 to 100000 | | `ipRatePerMin` | integer | | 10 to 100000 | | `maxBodyKb` | integer | | 1 to 1024 | | `allowedOrigins` | string[] | | up to 20 items | | `identity` | object or null | | | | `identity.issuer` | string | yes | 1 to 200 characters | | `identity.audience` | string | yes | 1 to 200 characters | | `identity.roleClaim` | string | | default "role" | | `identity.keys` | object[] | yes | up to 8 items | | `publicReadTables` | string[] | | up to 64 items | | `confirmPublicRead` | string[] | | up to 64 items | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `id` | string | yes | at least 1 characters | | `name` | string | yes | at least 1 characters | | `slug` | string | yes | at least 1 characters | | `description` | string | yes | | | `createdAt` | string (date-time) | yes | | | `url` | string | yes | at least 1 characters | | `tableCount` | integer | yes | at least 0 | | `keyCount` | integer | yes | at least 0 | | `rowCount` | integer | yes | at least 0 | | `requestsPerMin` | number | yes | at least 0 | | `workspaceId` | string | yes | at least 1 characters | | `createdBy` | string | yes | at least 1 characters | | `settings` | object | yes | | | `settings.rateLimitPerMin` | integer | yes | 10 to 100000 | | `settings.ipRatePerMin` | integer | yes | 10 to 100000 | | `settings.maxBodyKb` | integer | yes | 1 to 1024 | | `settings.allowedOrigins` | string[] | yes | up to 20 items | | `settings.identity` | object or null | yes | | | `tables` | object[] | yes | | | `tables[].name` | string | yes | | | `tables[].columns` | object[] | yes | up to 66 items | | `tables[].publicRead` | boolean | yes | | | `tables[].rules` | object[] | yes | up to 16 items | | `tables[].rowCount` | integer or null | yes | at least 0 | | `tables[].createdAt` | string (date-time) | yes | | | `canEdit` | boolean | yes | | | `canAdmin` | boolean | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[POST]] `/v1/backend/projects/{projectId}/tables` Create a table with typed columns (id and created_at are added). - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `write` scope. | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | **Request body** (`application/json`) | Field | Type | Required | Notes | |---|---|---|---| | `name` | string | yes | | | `columns` | object[] | | up to 64 items. default | | `columns[].name` | string | yes | | | `columns[].type` | "text" · "integer" · "real" · "boolean" · "timestamp" · "json" | yes | | | `columns[].nullable` | boolean | | default true | | `publicRead` | boolean | | default false | | `confirmPublic` | string | | | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `name` | string | yes | | | `columns` | object[] | yes | up to 66 items | | `columns[].name` | string | yes | | | `columns[].type` | "text" · "integer" · "real" · "boolean" · "timestamp" · "json" | yes | | | `columns[].nullable` | boolean | yes | | | `columns[].system` | boolean | yes | | | `publicRead` | boolean | yes | | | `rules` | object[] | yes | up to 16 items | | `rules[].id` | string | yes | | | `rules[].audience` | object | yes | | | `rules[].actions` | "read" · "insert" · "update" · "delete"[] | yes | up to 4 items | | `rules[].where` | object | yes | | | `rules[].columns` | string[] or null | yes | up to 66 items | | `rules[].migrated` | boolean | | | | `rules[].sentence` | string | yes | up to 400 characters | | `rowCount` | integer or null | yes | at least 0 | | `createdAt` | string (date-time) | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[DELETE]] `/v1/backend/projects/{projectId}/tables/{table}` Drop a table and its rows (the table's name typed back). - **Authentication:** the console’s session cookie. - **Token:** not available. This route is for a signed-in person in the console (`403 console_only` for a token). | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `table` | path | string | yes | 1 to 48 characters | **Request body** (`application/json`) | Field | Type | Required | Notes | |---|---|---|---| | `confirm` | string | yes | | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `ok` | true | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[POST]] `/v1/backend/projects/{projectId}/tables/{table}/columns` Add a column. - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `write` scope. | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `table` | path | string | yes | 1 to 48 characters | **Request body** (`application/json`) | Field | Type | Required | Notes | |---|---|---|---| | `name` | string | yes | | | `type` | "text" · "integer" · "real" · "boolean" · "timestamp" · "json" | yes | | | `nullable` | boolean | | default true | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `name` | string | yes | | | `columns` | object[] | yes | up to 66 items | | `columns[].name` | string | yes | | | `columns[].type` | "text" · "integer" · "real" · "boolean" · "timestamp" · "json" | yes | | | `columns[].nullable` | boolean | yes | | | `columns[].system` | boolean | yes | | | `publicRead` | boolean | yes | | | `rules` | object[] | yes | up to 16 items | | `rules[].id` | string | yes | | | `rules[].audience` | object | yes | | | `rules[].actions` | "read" · "insert" · "update" · "delete"[] | yes | up to 4 items | | `rules[].where` | object | yes | | | `rules[].columns` | string[] or null | yes | up to 66 items | | `rules[].migrated` | boolean | | | | `rules[].sentence` | string | yes | up to 400 characters | | `rowCount` | integer or null | yes | at least 0 | | `createdAt` | string (date-time) | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[GET]] `/v1/backend/projects/{projectId}/tables/{table}/export` Every row as CSV or JSON (up to 5,000). - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `read` scope. | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `table` | path | string | yes | 1 to 48 characters | | `format` | query | "csv" · "json" | | default "csv" | **Response 200**: The file A string. ### [[POST]] `/v1/backend/projects/{projectId}/tables/{table}/import` Append rows from CSV (header row = column names; all or nothing per check). - **Authentication:** the console’s session cookie. - **Token:** not available. This route is for a signed-in person in the console (`403 console_only` for a token). | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `table` | path | string | yes | 1 to 48 characters | **Request body** (`application/json`) | Field | Type | Required | Notes | |---|---|---|---| | `csv` | string | yes | 1 to 1000000 characters | | `importId` | string | | | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `inserted` | integer | yes | at least 0 | | `errors` | object[] | yes | up to 20 items | | `errors[].line` | integer | yes | at least 1 | | `errors[].message` | string | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[PUT]] `/v1/backend/projects/{projectId}/tables/{table}/policy` Set the rules of a table from their sentences (owner). - **Authentication:** the console’s session cookie. - **Token:** not available. This route is for a signed-in person in the console (`403 console_only` for a token). | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `table` | path | string | yes | 1 to 48 characters | **Request body** (`application/json`) | Field | Type | Required | Notes | |---|---|---|---| | `sentences` | string[] | yes | up to 16 items | | `confirmPublic` | string | | | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `table` | object | yes | | | `table.name` | string | yes | | | `table.columns` | object[] | yes | up to 66 items | | `table.publicRead` | boolean | yes | | | `table.rules` | object[] | yes | up to 16 items | | `table.rowCount` | integer or null | yes | at least 0 | | `table.createdAt` | string (date-time) | yes | | | `warnings` | string[] | yes | up to 20 items | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[POST]] `/v1/backend/projects/{projectId}/tables/{table}/policy/test` Try the rules as a visitor, a signed-in person or a key; nothing is written (owner). - **Authentication:** the console’s session cookie. - **Token:** not available. This route is for a signed-in person in the console (`403 console_only` for a token). | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `table` | path | string | yes | 1 to 48 characters | **Request body** (`application/json`) | Field | Type | Required | Notes | |---|---|---|---| | `principal` | object | yes | | | `action` | "read" · "insert" · "update" · "delete" | | default "read" | | `query` | string | | up to 500 characters. default "" | | `row` | map of any or null | | | | `rowId` | integer | | at least 1 | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `who` | string | yes | | | `action` | "read" · "insert" · "update" · "delete" | yes | | | `allowed` | boolean | yes | | | `reason` | string or null | yes | | | `hint` | string or null | yes | | | `matched` | object[] | yes | | | `matched[].id` | string | yes | | | `matched[].sentence` | string | yes | | | `readableColumns` | string[] | yes | | | `hiddenColumns` | string[] | yes | | | `rows` | map of any or null[] | yes | up to 20 items | | `hiddenPerRow` | string[][] | yes | up to 20 items | | `totalRows` | integer or null | yes | at least 0 | | `visibleRows` | integer or null | yes | at least 0 | | `rowPasses` | boolean or null | yes | | | `stamps` | map of string or number or boolean | yes | | | `queryError` | object or null | yes | | | `queryError.code` | string | yes | | | `queryError.message` | string | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[GET]] `/v1/backend/projects/{projectId}/tables/{table}/rows` A page of rows (same filters as the data API). - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `read` scope. | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `table` | path | string | yes | 1 to 48 characters | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `rows` | map of any or null[] | yes | | | `total` | integer | yes | | | `limit` | integer | yes | | | `offset` | integer | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[POST]] `/v1/backend/projects/{projectId}/tables/{table}/rows` Insert rows. - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `write` scope. | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `table` | path | string | yes | 1 to 48 characters | **Request body** (`application/json`) An empty object: `{}`. **Response 200** A map of any or null[]. Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[PATCH]] `/v1/backend/projects/{projectId}/tables/{table}/rows/{id}` Change one row. - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `write` scope. | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `table` | path | string | yes | 1 to 48 characters | | `id` | path | string | yes | 1 to 20 characters | **Request body** (`application/json`) An empty object: `{}`. **Response 200** A map of any or null. Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[DELETE]] `/v1/backend/projects/{projectId}/tables/{table}/rows/{id}` Delete one row. - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `write` scope. | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `projectId` | path | string | yes | 1 to 128 characters | | `table` | path | string | yes | 1 to 48 characters | | `id` | path | string | yes | 1 to 20 characters | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `ok` | true | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[GET]] `/v1/workspaces/{ws}/backend/projects` Backend projects you can see. - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `read` scope. | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `ws` | path | string | yes | 1 to 128 characters | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `id` | string | yes | at least 1 characters | | `name` | string | yes | at least 1 characters | | `slug` | string | yes | at least 1 characters | | `description` | string | yes | | | `createdAt` | string (date-time) | yes | | | `url` | string | yes | at least 1 characters | | `tableCount` | integer | yes | at least 0 | | `keyCount` | integer | yes | at least 0 | | `rowCount` | integer | yes | at least 0 | | `requestsPerMin` | number | yes | at least 0 | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[POST]] `/v1/workspaces/{ws}/backend/projects` New backend: a datacenter on the island, a sample table, no keys yet. - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `write` scope. | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `ws` | path | string | yes | 1 to 128 characters | **Request body** (`application/json`) | Field | Type | Required | Notes | |---|---|---|---| | `name` | string | yes | 2 to 60 characters | | `description` | string | | up to 280 characters. default "" | | `starter` | "orders" · "waitlist" · "blank" | | default "orders" | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `id` | string | yes | at least 1 characters | | `name` | string | yes | at least 1 characters | | `slug` | string | yes | at least 1 characters | | `description` | string | yes | | | `createdAt` | string (date-time) | yes | | | `url` | string | yes | at least 1 characters | | `tableCount` | integer | yes | at least 0 | | `keyCount` | integer | yes | at least 0 | | `rowCount` | integer | yes | at least 0 | | `requestsPerMin` | number | yes | at least 0 | | `workspaceId` | string | yes | at least 1 characters | | `createdBy` | string | yes | at least 1 characters | | `settings` | object | yes | | | `settings.rateLimitPerMin` | integer | yes | 10 to 100000 | | `settings.ipRatePerMin` | integer | yes | 10 to 100000 | | `settings.maxBodyKb` | integer | yes | 1 to 1024 | | `settings.allowedOrigins` | string[] | yes | up to 20 items | | `settings.identity` | object or null | yes | | | `tables` | object[] | yes | | | `tables[].name` | string | yes | | | `tables[].columns` | object[] | yes | up to 66 items | | `tables[].publicRead` | boolean | yes | | | `tables[].rules` | object[] | yes | up to 16 items | | `tables[].rowCount` | integer or null | yes | at least 0 | | `tables[].createdAt` | string (date-time) | yes | | | `canEdit` | boolean | yes | | | `canAdmin` | boolean | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)).