{"id":44621178,"url":"https://github.com/stagware/nocodb-cli","last_synced_at":"2026-02-21T14:12:05.223Z","repository":{"id":336873061,"uuid":"1151088342","full_name":"stagware/nocodb-cli","owner":"stagware","description":"Open-source CLI and TypeScript SDK for NocoDB","archived":false,"fork":false,"pushed_at":"2026-02-14T13:38:33.000Z","size":986,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-14T21:05:57.908Z","etag":null,"topics":["cli","nocodb"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stagware.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-06T03:22:11.000Z","updated_at":"2026-02-14T13:38:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stagware/nocodb-cli","commit_stats":null,"previous_names":["bstag/nocodb-cli","stagware/nocodb-cli"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/stagware/nocodb-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stagware%2Fnocodb-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stagware%2Fnocodb-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stagware%2Fnocodb-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stagware%2Fnocodb-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stagware","download_url":"https://codeload.github.com/stagware/nocodb-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stagware%2Fnocodb-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29682763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T13:29:26.630Z","status":"ssl_error","status_checked_at":"2026-02-21T13:26:50.125Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","nocodb"],"created_at":"2026-02-14T14:11:35.177Z","updated_at":"2026-02-21T14:12:05.199Z","avatar_url":"https://github.com/stagware.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nocodb-cli\n\nA Node.js + TypeScript SDK and CLI for NocoDB v2 APIs.\n\n## Setup\n\n```sh\nnpm install\n```\n\nBuild packages before running the CLI locally:\n\n```sh\nnpm run build\n```\n\n## Workspaces (Multi-Account Support)\n\nWorkspaces allow you to manage multiple NocoDB instances or bases with distinct URLs, tokens, and default Base IDs.\n\n```sh\n# Add a workspace\nnocodb workspace add work https://noco.company.com \u003ctoken\u003e --base \u003cbaseId\u003e\nnocodb workspace add personal https://noco.me.com \u003ctoken\u003e\n\n# Switch context\nnocodb workspace use work\nnocodb workspace list     # show all workspaces, active marked with *\nnocodb workspace show     # show current workspace config\n```\n\n## Cloud Workspaces (☁ NocoDB Cloud Only)\n\nManage workspaces on NocoDB Cloud (`app.nocodb.com`). These commands are nested under `workspace cloud` to avoid collision with local workspace management above.\n\n```sh\n# List / get\nnocodb workspace cloud list\nnocodb workspace cloud get \u003cworkspaceId\u003e\n\n# Create / update / delete\nnocodb workspace cloud create -d '{\"title\":\"My Workspace\"}'\nnocodb workspace cloud update \u003cworkspaceId\u003e -d '{\"title\":\"Renamed\"}'\nnocodb workspace cloud delete \u003cworkspaceId\u003e\n\n# Workspace users\nnocodb workspace cloud users \u003cworkspaceId\u003e\nnocodb workspace cloud user-get \u003cworkspaceId\u003e \u003cuserId\u003e\nnocodb workspace cloud invite \u003cworkspaceId\u003e -d '{\"email\":\"bob@test.com\",\"roles\":\"viewer\"}'\nnocodb workspace cloud user-update \u003cworkspaceId\u003e \u003cuserId\u003e -d '{\"roles\":\"editor\"}'\nnocodb workspace cloud user-remove \u003cworkspaceId\u003e \u003cuserId\u003e\n\n# Workspace bases\nnocodb workspace cloud bases \u003cworkspaceId\u003e\nnocodb workspace cloud create-base \u003cworkspaceId\u003e -d '{\"title\":\"New Base\"}'\n```\n\n\u003e **Note:** These endpoints only work when connected to NocoDB Cloud. Self-hosted NocoDB does not have workspace APIs.\n\n## Aliases (Namespaced IDs)\n\nAliases allow you to use friendly names instead of UUIDs. They are namespaced by workspace.\n\n```sh\n# Set aliases in the active workspace\nnocodb alias set tasks \u003ctableId\u003e\nnocodb alias set prayer \u003ctableId\u003e\n\n# Usage (Current Workspace)\nnocodb rows list tasks\n\n# Usage (Cross-Workspace / Explicit)\nnocodb rows list work.tasks\nnocodb rows list personal.tasks\n\n# Base Resolution\n# If a workspace name is used where a Base ID is expected, it resolves to that workspace's default base.\nnocodb tables list personal\n\n# Management\nnocodb alias list         # list aliases for active workspace\nnocodb alias list personal # list aliases for specific workspace\nnocodb alias delete tasks\nnocodb alias clear        # clear all aliases for active workspace\n```\n\n## Environment Variables\n\nFor CI/CD pipelines or ephemeral environments, you can configure the CLI entirely via environment variables. These override workspace config but are overridden by CLI flags.\n\n| Variable | Description |\n|----------|-------------|\n| `NOCO_BASE_URL` | NocoDB instance URL (e.g., `https://app.nocodb.com`) |\n| `NOCO_TOKEN` | API token (sets the `xc-token` header) |\n| `NOCO_BASE_ID` | Default base ID |\n\n```sh\n# Bash\nexport NOCO_BASE_URL=https://app.nocodb.com\nexport NOCO_TOKEN=your-api-token\nexport NOCO_BASE_ID=p_abc123\nnocodb bases list\n\n# PowerShell\n$env:NOCO_BASE_URL=\"https://app.nocodb.com\"\n$env:NOCO_TOKEN=\"your-api-token\"\n$env:NOCO_BASE_ID=\"p_abc123\"\nnocodb bases list\n```\n\nIf no workspace is configured, the CLI creates an ephemeral workspace from env vars (requires at minimum `NOCO_BASE_URL`).\n\n## Configure (Legacy/Global)\n\nThese settings act as fallbacks if no workspace is active.\n\n```sh\nnocodb config set baseUrl http://localhost:8080\nnocodb config set baseId \u003cbaseId\u003e\nnocodb header set xc-token \u003ctoken\u003e\n```\n\n## Auth Check\n\nQuickly verify your authentication and see the current user:\n\n```sh\nnocodb me\nnocodb me --pretty\nnocodb me --select email,display_name\n```\n\n## Bases\n\n```sh\nnocodb bases list\nnocodb bases get \u003cbaseId\u003e\nnocodb bases info \u003cbaseId\u003e\nnocodb bases create --data '{\"title\":\"My Base\"}'\nnocodb bases update \u003cbaseId\u003e --data '{\"title\":\"New Name\"}'\nnocodb bases delete \u003cbaseId\u003e\n```\n\n## Tables\n\n```sh\nnocodb tables list \u003cbaseId\u003e\nnocodb tables get \u003ctableId\u003e\nnocodb tables create \u003cbaseId\u003e --data '{\"table_name\":\"MyTable\"}'\nnocodb tables update \u003ctableId\u003e --data '{\"table_name\":\"NewName\"}'\nnocodb tables delete \u003ctableId\u003e\n```\n\n## Views\n\n```sh\nnocodb views list \u003ctableId\u003e\nnocodb views get \u003ctableId\u003e \u003cviewId\u003e\nnocodb views create \u003ctableId\u003e --data '{\"title\":\"Grid\"}'\nnocodb views create \u003ctableId\u003e --type form --data '{\"title\":\"My Form\"}'\nnocodb views update \u003cviewId\u003e --data '{\"title\":\"New View\"}'\nnocodb views delete \u003cviewId\u003e\n```\n\nSupported `--type` values: `grid` (default), `form`, `gallery`, `kanban`.\n\n### View Config\n\nGet or update view-type-specific configuration (form settings, gallery cover image, kanban grouping, grid row height):\n\n```sh\nnocodb views config get \u003cviewId\u003e --view-type form --pretty\nnocodb views config update \u003cviewId\u003e --view-type form -d '{\"heading\":\"My Form\"}'\nnocodb views config get \u003cviewId\u003e --view-type gallery\nnocodb views config update \u003cviewId\u003e --view-type grid -d '{\"row_height\":2}'\n```\n\nSupported `--view-type` values: `form`, `gallery`, `kanban` (for get), `grid`, `form`, `gallery`, `kanban` (for update).\n\n### View Columns\n\nList field visibility and order settings for a view:\n\n```sh\nnocodb views columns list \u003cviewId\u003e --pretty\n```\n\n## Comments\n\nManage row comments:\n\n```sh\nnocodb comments list --table-id \u003ctableId\u003e --row-id \u003crowId\u003e\nnocodb comments create -d '{\"fk_model_id\":\"\u003ctableId\u003e\",\"row_id\":\"1\",\"comment\":\"Looks good!\"}'\nnocodb comments update \u003ccommentId\u003e -d '{\"comment\":\"Updated text\"}'\nnocodb comments delete \u003ccommentId\u003e\n```\n\n## Shared Views\n\nManage public view links:\n\n```sh\nnocodb shared-views list \u003ctableId\u003e\nnocodb shared-views create \u003cviewId\u003e\nnocodb shared-views create \u003cviewId\u003e -d '{\"password\":\"secret\"}'\nnocodb shared-views update \u003cviewId\u003e -d '{\"password\":\"new-secret\"}'\nnocodb shared-views delete \u003cviewId\u003e\n```\n\n## Shared Base\n\nManage public base sharing:\n\n```sh\nnocodb shared-base get \u003cbaseId\u003e\nnocodb shared-base create \u003cbaseId\u003e\nnocodb shared-base create \u003cbaseId\u003e -d '{\"roles\":\"viewer\",\"password\":\"secret\"}'\nnocodb shared-base update \u003cbaseId\u003e -d '{\"roles\":\"editor\"}'\nnocodb shared-base delete \u003cbaseId\u003e\n```\n\n## Filters\n\n```sh\nnocodb filters list \u003cviewId\u003e\nnocodb filters get \u003cfilterId\u003e\nnocodb filters create \u003cviewId\u003e --data '{\"field\":\"Name\",\"op\":\"eq\",\"value\":\"A\"}'\nnocodb filters update \u003cfilterId\u003e --data '{\"value\":\"B\"}'\nnocodb filters delete \u003cfilterId\u003e\n```\n\n## Sorts\n\n```sh\nnocodb sorts list \u003cviewId\u003e\nnocodb sorts get \u003csortId\u003e\nnocodb sorts create \u003cviewId\u003e --data '{\"field\":\"Name\",\"direction\":\"asc\"}'\nnocodb sorts update \u003csortId\u003e --data '{\"direction\":\"desc\"}'\nnocodb sorts delete \u003csortId\u003e\n```\n\n## Columns\n\n```sh\nnocodb columns list \u003ctableId\u003e\nnocodb columns get \u003ccolumnId\u003e\nnocodb columns create \u003ctableId\u003e --data '{\"title\":\"Status\",\"column_name\":\"Status\",\"uidt\":\"SingleSelect\",\"colOptions\":{\"options\":[{\"title\":\"Open\"},{\"title\":\"Done\"}]}}'\nnocodb columns update \u003ccolumnId\u003e --data '{\"title\":\"State\"}'\nnocodb columns delete \u003ccolumnId\u003e\n```\n\n## Schema Introspection\n\nDiscover table structures including columns, primary keys, display values, and relations:\n\n```sh\nnocodb schema introspect \u003ctableId\u003e\nnocodb schema introspect \u003ctableId\u003e --pretty\nnocodb schema introspect \u003ctableId\u003e --format table\n```\n\nThe output includes:\n- Table `id`, `title`, `table_name`\n- `primaryKey` and `displayValue` column names\n- Full column list with `id`, `title`, `column_name`, `uidt`, `primaryKey`, `required`, `unique`\n- `relation` object on link columns (`type` and `targetTableId`)\n\n## Settings\n\nTimeout and retry behavior can be configured via `~/.nocodb-cli/settings.json`. Override the directory with `NOCODB_SETTINGS_DIR` env var.\n\n```sh\nnocodb settings show           # print current effective settings\nnocodb settings path           # print the settings file path\nnocodb settings set timeoutMs 5000\nnocodb settings set retryCount 5\nnocodb settings set retryDelay 500\nnocodb settings set retryStatusCodes '[429,500,502,503]'\nnocodb settings reset          # restore defaults\n```\n\nDefault values:\n\n| Key | Default | Description |\n|-----|---------|-------------|\n| `timeoutMs` | `30000` | Request timeout in milliseconds |\n| `retryCount` | `3` | Number of retries (0 to disable) |\n| `retryDelay` | `300` | Delay between retries in milliseconds |\n| `retryStatusCodes` | `[408,409,425,429,500,502,503,504]` | HTTP status codes that trigger a retry |\n\nCLI flags `--timeout \u003cms\u003e` and `--retries \u003ccount\u003e` override settings for a single invocation:\n\n```sh\nnocodb --timeout 5000 bases list\nnocodb --retries 0 bases list     # disable retries for this call\n```\n\nUse `--verbose` on any command to see request timing and retry information:\n\n```sh\nnocodb --verbose rows list \u003ctableId\u003e\n```\n\n## Output formats\n\nAll commands support `--pretty` for indented JSON, `--format \u003ctype\u003e` for alternative output, and `--select` for field filtering:\n\n```sh\nnocodb bases list --pretty              # indented JSON\nnocodb bases list --format csv          # CSV output\nnocodb bases list --format table        # ASCII table\nnocodb rows list \u003ctableId\u003e --format table\n```\n\n### Field selection\n\nUse `--select` to pick specific fields from the output — useful for scripting and piping:\n\n```sh\nnocodb bases list --select id,title\nnocodb rows list \u003ctableId\u003e --select Name,Status --format csv\nnocodb me --select email,display_name\n```\n\n`--select` works with all output formats (JSON, CSV, table) and handles both single objects and list responses.\n\n## Links\n\nManage linked records between tables:\n\n```sh\nnocodb links list \u003ctableId\u003e \u003clinkFieldId\u003e \u003crecordId\u003e\nnocodb links create \u003ctableId\u003e \u003clinkFieldId\u003e \u003crecordId\u003e --data '[{\"Id\":100},{\"Id\":200}]'\nnocodb links delete \u003ctableId\u003e \u003clinkFieldId\u003e \u003crecordId\u003e --data '[{\"Id\":100}]'\n```\n\n## Storage\n\n```sh\nnocodb storage upload ./photo.png\nnocodb storage upload ./doc.pdf --pretty\n```\n\n## Sources (Data Sources)\n\nManage data sources (database connections) within a base:\n\n```sh\nnocodb sources list \u003cbaseId\u003e\nnocodb sources get \u003cbaseId\u003e \u003csourceId\u003e\nnocodb sources create \u003cbaseId\u003e --data '{\"alias\":\"my-pg\",\"type\":\"pg\",\"config\":{...}}'\nnocodb sources update \u003cbaseId\u003e \u003csourceId\u003e --data '{\"alias\":\"renamed\"}'\nnocodb sources delete \u003cbaseId\u003e \u003csourceId\u003e\n```\n\n## Tokens (Base-Scoped)\n\nAPI tokens are scoped to a base (v2 API):\n\n```sh\nnocodb tokens list \u003cbaseId\u003e\nnocodb tokens create \u003cbaseId\u003e -d '{\"description\":\"CI/CD token\"}'\nnocodb tokens delete \u003cbaseId\u003e \u003ctokenId\u003e\n```\n\n## Raw requests\n\nUse this to call any endpoint directly.\n\n```sh\nnocodb request GET /api/v2/meta/bases --pretty\n```\n\n## Swagger discovery (base-scoped)\n\n```sh\nnocodb meta swagger \u003cbaseId\u003e --pretty\nnocodb meta swagger \u003cbaseId\u003e --out ./swagger.json\nnocodb meta endpoints \u003cbaseId\u003e\nnocodb meta endpoints \u003cbaseId\u003e --tag Tables\nnocodb meta cache clear \u003cbaseId\u003e\nnocodb meta cache clear --all\n```\n\n## Dynamic API commands\n\n```sh\nnocodb meta endpoints \u003cbaseId\u003e --pretty\nnocodb --base \u003cbaseId\u003e api \u003ctag\u003e \u003coperation\u003e --pretty\nnocodb --base \u003cbaseId\u003e api \u003ctag\u003e \u003coperation\u003e --data '{\"key\":\"value\"}'\n```\n\n## Rows (CRUD + upsert helpers)\n\n```sh\nnocodb rows list \u003ctableId\u003e\nnocodb rows list \u003ctableId\u003e --all              # auto-paginate to fetch every row\nnocodb rows list \u003ctableId\u003e --all -q where='(Status,eq,Active)'\nnocodb rows read \u003ctableId\u003e \u003crecordId\u003e\nnocodb rows create \u003ctableId\u003e --data '{\"Title\":\"Example\"}'\nnocodb rows update \u003ctableId\u003e --data '{\"Id\":1,\"Title\":\"Updated\"}'\nnocodb rows delete \u003ctableId\u003e --data '{\"Id\":1}'\nnocodb rows upsert \u003ctableId\u003e --match Email=alice@example.com --data '{\"Email\":\"alice@example.com\",\"Title\":\"Alice\"}'\nnocodb rows upsert \u003ctableId\u003e --match Email=alice@example.com --data '{\"Title\":\"Alice\"}' --update-only\nnocodb rows upsert \u003ctableId\u003e --match Email=alice@example.com --data '{\"Email\":\"alice@example.com\",\"Title\":\"Alice\"}' --create-only\nnocodb rows bulk-create \u003ctableId\u003e --data '[{\"Title\":\"A\"},{\"Title\":\"B\"}]'\nnocodb rows bulk-update \u003ctableId\u003e --data '[{\"Id\":1,\"Title\":\"A1\"},{\"Id\":2,\"Title\":\"B1\"}]'\nnocodb rows bulk-upsert \u003ctableId\u003e --match Email --data '[{\"Email\":\"alice@example.com\",\"Title\":\"Alice\"},{\"Email\":\"bob@example.com\",\"Title\":\"Bob\"}]'\nnocodb rows bulk-delete \u003ctableId\u003e --data '[{\"Id\":1},{\"Id\":2}]'\n```\n\n## Data Import / Export\n\nExport all rows from a table to a file or stdout:\n\n```sh\nnocodb data export \u003ctableId\u003e                          # JSON to stdout\nnocodb data export \u003ctableId\u003e --format csv             # CSV to stdout\nnocodb data export \u003ctableId\u003e --out ./rows.json        # JSON file\nnocodb data export \u003ctableId\u003e --out ./rows.csv         # CSV file (inferred from extension)\nnocodb data export \u003ctableId\u003e -q where='(Status,eq,Active)'  # with filters\n```\n\nImport rows from a CSV or JSON file into a table (requires `--base` for schema validation):\n\n```sh\nnocodb --base \u003cbaseId\u003e data import \u003ctableId\u003e ./rows.json              # JSON array\nnocodb --base \u003cbaseId\u003e data import \u003ctableId\u003e ./rows.csv               # CSV (inferred from extension)\nnocodb --base \u003cbaseId\u003e data import \u003ctableId\u003e ./rows.csv --format csv  # explicit format\n```\n\nUpsert mode — match on a field to update existing rows and create new ones:\n\n```sh\nnocodb --base \u003cbaseId\u003e data import \u003ctableId\u003e ./rows.csv --match Email\nnocodb --base \u003cbaseId\u003e data import \u003ctableId\u003e ./rows.json --match Email --create-only\nnocodb --base \u003cbaseId\u003e data import \u003ctableId\u003e ./rows.json --match Email --update-only\n```\n\nExport auto-paginates (fetches all rows). Import validates rows against the table's swagger schema and batches in groups of 1000.\n\n## E2E test script\n\nRun a repeatable end-to-end flow that creates tables, exercises CRUD, refreshes swagger, and attempts link tests.\n\n```sh\nset NOCO_BASE_URL=https://noco.stagware.org\nset NOCO_BASE_ID=\u003cbaseId\u003e\nset NOCO_TOKEN=\u003ctoken\u003e\nnode scripts/e2e-cli.mjs\n```\n\nPowerShell:\n\n```sh\n$env:NOCO_BASE_URL=\"https://noco.stagware.org\"\n$env:NOCO_BASE_ID=\"\u003cbaseId\u003e\"\n$env:NOCO_TOKEN=\"\u003ctoken\u003e\"\nnode scripts/e2e-cli.mjs\n```\n\nSet `NOCO_KEEP=1` to keep the generated tables instead of deleting them.\nYou can also run `npm run e2e` from the repo root.\n\nThe script attempts:\n- Table creation with broad column type coverage (falls back if unsupported types are rejected)\n- CRUD on multiple tables\n- Link/lookup/rollup/formula column creation (best-effort, logs if unsupported)\n- Attachment upload and row update\n- Comments CRUD on a row\n- Shared views create/list/delete on a view\n- Shared base create/get/delete on the test base\n- View config get and view columns list\n- Cloud workspace list/get/users/bases (gracefully skipped on self-hosted instances)\n- Writes a JSON summary report to `scripts/e2e-report.json`\n\n## Error messages\n\nThe CLI provides contextual error messages for HTTP failures. When the NocoDB server returns an error, you'll see the status code and any response body the server sent back:\n\n```\nHTTP 401 — Unauthorized\n```\n\n```\nHTTP 400 — Bad Request\n{\n  \"msg\": \"Field 'Title' is required\"\n}\n```\n\nNon-HTTP errors (invalid JSON input, missing config, validation failures) are printed as-is.\n\n## Notes\n\n- The SDK is in `packages/sdk` and the CLI is in `packages/cli`.\n- The SDK uses fully typed generics (e.g., `Promise\u003cListResponse\u003cBase\u003e\u003e`) for all metadata operations.\n- Meta swagger is cached under your CLI config directory for faster reuse.\n- Use `nocodb config set baseId \u003cid\u003e` to avoid repeating `--base` for dynamic commands.\n- If an endpoint differs in your NocoDB deployment, use `nocodb request` or `nocodb meta endpoints`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstagware%2Fnocodb-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstagware%2Fnocodb-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstagware%2Fnocodb-cli/lists"}