CLI & MCP

Waymaker tables

Manage data tables in Commander. Create structured databases, query records, and integrate with other tools.

TablesDatabase
Last updated: January 23, 2026

Overview

Manage data tables in Commander. Create structured databases, query records, and integrate with other tools.

Usage

waymaker tables <subcommand> [options]

Subcommands

SubcommandDescription
listList tables
getGet table schema
createCreate a new table
enable-webhookEnable webhook receiver and print endpoint URL
recordsManage table records
fieldsManage table fields
queryQuery table data

List Tables

waymaker tables list --workspace <workspace-id>

Output:

Tables (6)

id           name              records   fields   updated
---------------------------------------------------------
tbl_abc123   Contacts          1,250     12       2 hours ago
tbl_def456   Companies         340       8        1 day ago
tbl_ghi789   Deals             89        15       3 hours ago
tbl_jkl012   Products          156       10       1 week ago

JSON Output

waymaker tables list --workspace ws_xxx --json
[
  {
    "id": "tbl_abc123",
    "name": "Contacts",
    "record_count": 1250,
    "field_count": 12,
    "workspace_id": "ws_xxx",
    "updated_at": "2026-01-21T08:00:00Z"
  }
]

Get Table Schema

waymaker tables get <table-id>

Output:

Contacts

ID: tbl_abc123
Workspace: ws_xxx
Records: 1,250
Created: January 1, 2026

Fields: (12)
  name           text        required
  email          email       required, unique
  phone          phone
  company        link        → Companies
  status         select      [lead, customer, churned]
  deal_value     currency
  created_at     datetime    auto
  updated_at     datetime    auto
  owner          user
  tags           multiselect
  notes          longtext
  last_contact   datetime

JSON Output

waymaker tables get tbl_abc123 --json

Create Table

waymaker tables create "New Table" \
  --workspace <workspace-id> \
  --project <project-id>

Output:

✓ Table created
ID: tbl_new123
Name: New Table
Workspace: ws_xxx

Add fields with:
  waymaker tables fields add tbl_new123 --name "field_name" --type text

Create with Inline Columns

waymaker tables create "Products" \
  --workspace ws_xxx \
  --project proj_xxx \
  --columns "name:text!,sku:text,price:currency,category:select[Electronics,Clothing,Home]"

Column Specification Format:

name:type[options]!
  • name — Column name
  • type — Column type (text, number, email, url, phone, select, etc.)
  • [options] — For select types, comma-separated values inside brackets
  • ! — Mark as required

Commas inside [brackets] are treated as option separators, not column separators.

Create with Schema File

waymaker tables create "Products" \
  --workspace ws_xxx \
  --project proj_xxx \
  --schema ./schema.json

Schema file format:

{
  "columns": [
    { "name": "name", "type": "text", "required": true },
    { "name": "sku", "type": "text", "unique": true },
    { "name": "price", "type": "currency" },
    { "name": "category", "type": "select", "options": ["Electronics", "Clothing", "Home"] }
  ]
}

Custom display names: Column headers in Commander are auto-generated from name (e.g., organization_name → "Organization Name"). To customize, add a title field:

{ "name": "org_name", "title": "Organization", "type": "text" }

Create with Fields (JSON)

waymaker tables create \
  --workspace ws_xxx \
  --name "Products" \
  --fields '[
    {"name": "name", "type": "text", "required": true},
    {"name": "sku", "type": "text", "unique": true},
    {"name": "price", "type": "currency"},
    {"name": "category", "type": "select", "options": ["Electronics", "Clothing", "Home"]}
  ]'

Enable Webhook

Enable a webhook receiver on a table so external forms or services can POST data directly as new rows.

waymaker tables enable-webhook <table-id>

Output:

✓ Webhook enabled

Table ID: 63037397-0d09-4f40-a321-eabb00729805
Token:    whk_a1b2c3d4e5f6...

── Webhook URL ──
https://apps.waymakerone.com/functions/v1/tables-webhook-receiver?table_id=63037397-...&token=whk_a1b2c3...

POST JSON data to this URL to insert rows into the table.

Usage with Custom Forms

Once enabled, POST JSON matching your table schema to the webhook URL:

curl -X POST "<webhook-url>" \
  -H "Content-Type: application/json" \
  -d '{"name": "Jane Doe", "email": "jane@example.com", "status": "New"}'

This is the recommended pattern for developers and AI agents building custom frontend forms that write to Waymaker Tables.

Manage Records

List Records

waymaker tables records <table-id> list

Output:

Records: Contacts (1,250 total)

id           name           email                    status     deal_value
--------------------------------------------------------------------------
rec_001      John Smith     john@company.com         customer   $50,000
rec_002      Jane Doe       jane@example.com         lead       $25,000
rec_003      Bob Wilson     bob@startup.io           customer   $15,000

Get Single Record

waymaker tables records <table-id> get <record-id>

Create Record

waymaker tables records <table-id> create \
  --data '{"name": "New Contact", "email": "new@company.com", "status": "lead"}'

Output:

✓ Record created
ID: rec_new123
Table: Contacts

Update Record

waymaker tables records <table-id> update <record-id> \
  --data '{"status": "customer", "deal_value": 50000}'

Delete Record

waymaker tables records <table-id> delete <record-id>

Bulk Create

waymaker tables records <table-id> create \
  --file ./contacts.json \
  --bulk

Manage Fields

Add Field

waymaker tables fields add <table-id> \
  --name "new_field" \
  --type text

Field Types

TypeDescription
textSingle line text
longtextMulti-line text
numberNumeric value
currencyCurrency value
percentPercentage
emailEmail address
phonePhone number
urlURL/link
selectSingle select
multiselectMultiple select
checkboxBoolean
dateDate only
datetimeDate and time
userUser reference
linkLink to another table
attachmentFile attachment
formulaComputed field

Add Select Field

waymaker tables fields add tbl_abc123 \
  --name "priority" \
  --type select \
  --options "low,medium,high,urgent"
waymaker tables fields add tbl_abc123 \
  --name "company" \
  --type link \
  --link-table tbl_companies

Update Field

waymaker tables fields update <table-id> <field-name> \
  --name "new_name"

Delete Field

waymaker tables fields delete <table-id> <field-name>

Query Table Data

waymaker tables query <table-id> \
  --filter '{"status": "customer"}'

Output:

Query Results: 450 records

id           name           email                    deal_value
---------------------------------------------------------------
rec_001      John Smith     john@company.com         $50,000
rec_003      Bob Wilson     bob@startup.io           $15,000
...

Complex Filters

waymaker tables query tbl_abc123 \
  --filter '{
    "and": [
      {"status": {"eq": "customer"}},
      {"deal_value": {"gte": 10000}},
      {"created_at": {"gte": "2026-01-01"}}
    ]
  }'

Sort Results

waymaker tables query tbl_abc123 \
  --filter '{"status": "customer"}' \
  --sort "deal_value:desc"

Select Specific Fields

waymaker tables query tbl_abc123 \
  --filter '{"status": "lead"}' \
  --fields "name,email,deal_value"

Pagination

waymaker tables query tbl_abc123 \
  --limit 50 \
  --offset 100

Query as JSON

waymaker tables query tbl_abc123 --filter '{"status": "lead"}' --json

Options Reference

list

OptionTypeDescription
--workspacestringRequired. Workspace ID
--jsonflagOutput as JSON

get

OptionTypeDescription
--jsonflagOutput as JSON

create

OptionTypeDescription
--workspacestringRequired. Workspace ID
--projectstringProject ID (required for table to appear in Explorer)
--namestringRequired. Table name
--columnsstringInline column spec (e.g., "name:text!,status:select[A,B]")
--schemastringSchema file path (JSON)
--fieldsstringInitial fields as JSON array

enable-webhook

No additional options. Generates a token automatically and prints the full webhook URL.

records

OptionTypeDescription
--datastringRecord data as JSON
--filestringImport from JSON file
--bulkflagBulk import mode
--jsonflagOutput as JSON

fields

OptionTypeDescription
--namestringField name
--typestringField type
--requiredflagMake field required
--uniqueflagEnforce uniqueness
--optionsstringOptions for select types
--link-tablestringTarget table for link type

query

OptionTypeDescription
--filterstringRequired. Filter as JSON
--sortstringSort order (field:asc/desc)
--fieldsstringComma-separated field names
--limitnumberMaximum results
--offsetnumberSkip records
--jsonflagOutput as JSON

AI Agent Workflow

# List all tables
TABLES=$(waymaker tables list --workspace ws_xxx --json)

# Query specific data
LEADS=$(waymaker tables query tbl_contacts \
  --filter '{"status": "lead", "deal_value": {"gte": 10000}}' \
  --json)

# Count by status
echo $LEADS | jq 'group_by(.status) | map({status: .[0].status, count: length})'

# Create record from AI analysis
waymaker tables records tbl_contacts create \
  --data "$AI_GENERATED_CONTACT"

# Bulk update
for id in $(echo $LEADS | jq -r '.[].id'); do
  waymaker tables records tbl_contacts update $id \
    --data '{"last_contact": "'$(date -Iseconds)'"}'
done

# Export for analysis
waymaker tables query tbl_contacts \
  --filter '{"created_at": {"gte": "'$(date -v-30d +%Y-%m-%d)'"}}' \
  --json > /tmp/recent_contacts.json