Tables

Add or update rows by a key

rows_upsert · Changes data · Markdown

Updates the rows whose key column matches and adds the rest, so a list from anywhere syncs without reading the table first.

$0.001 per row added or updated

From your agent’s balance. A call that fails costs nothing.

An example

Here are this week's jobs from the spreadsheet. Bring the workshop table up to date: change the ones we have, add the new ones.

Your agent callsrows_upsert$0.001 per row added or updated

The example business is Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon. The reply is the one the tool really gives.

With these arguments
{
  "table": "Workshop jobs",
  "key": "Order",
  "rows": [
    {
      "Order": "W-2026-118",
      "Status": "Ready"
    },
    {
      "Order": "W-2026-121",
      "Customer": "Ladd's Bakery",
      "Bike": "Ladd cargo",
      "Work": "Brake bleed, new pads",
      "Due": "2026-11-20",
      "Status": "Waiting for parts",
      "Price": 140
    }
  ]
}
What comes back
{
  "updated": 1,
  "added": 1,
  "added_rows": [
    4
  ]
}

Use it when

Keeping a table in step with another list: an export, a supplier's sheet, yesterday's orders.

What it does

Sync rows from anywhere without reading the table first: each row whose key column matches a row in the table updates it (only the columns given change; a null value clears a cell), the rest are added. The key is a text, email, url, phone, select or number column whose values are unique (text matches in any case). Up to 500 rows, checked first: if one is wrong, nothing changes.

What comes back

updated and added: how many of each; added_rows: the new rows' numbers. Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
tableRequiredstringThe table's name (or its table_id). 1 to 80 characters.
keyRequiredstringThe column that identifies a row, e.g. "Email" or "SKU". 1 to 60 characters.
rowsRequiredarray of objects1 to 500 items.

The call

Over MCP, call rows_upsert on https://api.conecto.chat/mcp/tables. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/rows_upsert \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"table":"Workshop jobs","key":"Order","rows":[{"Order":"W-2026-118","Status":"Ready"},{"Order":"W-2026-121","Customer":"Ladd'\''s Bakery","Bike":"Ladd cargo","Work":"Brake bleed, new pads","Due":"2026-11-20","Status":"Waiting for parts","Price":140}]}'

When it refuses

A refused call costs nothing and says what to do next.

CodeWhenWhat to do
not_found404No table has that name or table_id, or the table has no column of that name.Call tables_list for the tables and their columns.
invalid_input400A value does not fit its column, or a required column is empty; the message names the row and the column.Send values of the column's type: numbers, dates like 2026-10-22, one of a select's options.
limit_reached409The table would hold more than 100,000 rows.Delete rows, or start another table.
duplicate_key409A key value comes twice in the rows, or more than one row in the table has it.Send each key once; merge or delete the table's extra rows first.

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md