origami_rows
Rows of an Origami table — read them (flat {slug: value} rows, following
the cursor) or upsert them (the ONLY write path for rows).
op:
"list":
{count, total, pages_fetched, cursor, truncated, items}. Pages are 50 rows (limit≤ 200); the server followsnextCursorup tomax_pages(cap 20).truncated: true+cursor= there is more — call again with thatcursor."upsert" (WRITE):
rows(1–100 dicts keyed by input-column SLUG) matched onmatch_columns— a row whose match values all equal an existing row UPDATES it, otherwise it is INSERTED. Slugs come fromorigami_tables(op="columns")(items[].slug, hyphenated); onlykind == "input"columns are writable. The tool reads the columns first and refuses unknown / non-input slugs with the list of valid ones (the API would answer 400 UNKNOWN_FIELDS).dry_run=Trueruns the same validation and returns{dry_run: true, would_upsert: {rows, match_columns, enrich, keys, sample}, check}— nothing written. The real call returns theenrichment_runreceipt{id, counts: {inserted, updated, skipped}}.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"op": "<op>",
"table_id": "<table_id>"
},
"name": "origami_rows"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | "list" | "upsert". | |
| _org | No | Org (id) de CET APPEL. `oto_list_orgs()`. | |
| rows | No | op="upsert" — the rows, `{slug: value}` (max 100 per call). | |
| limit | No | op="list" — rows per page (default 50, max 200). | |
| _group | No | Équipe (id) de CET APPEL, sous son org parente. | |
| cursor | No | op="list" — `cursor` returned by a previous call (resume). | |
| enrich | No | op="upsert" — enrich freshly INSERTED rows (spends Origami credits). Default False (the API default is true — here you opt in). | |
| _run_id | No | OBLIGATOIRE à chaque appel dès `run_start` ou `data_claim_next` : sans lui, l'écriture sur une ligne réservée est refusée. Hérité seulement si le serveur tient un run actif — n'y compte pas. | |
| dry_run | No | op="upsert" — validate + preview, write nothing. | |
| _project | No | Projet (id) de CET APPEL — jeton PRIMAIRE. `oto_project(op='list')`. | |
| table_id | Yes | the table. | |
| _instance | No | Instance de connecteur PRÉCISE (un credential exact). `oto_instance(op='list')`. | |
| max_pages | No | op="list" — pages to follow server-side (default 1, cap 20). | |
| match_columns | No | op="upsert" — input-column slugs used as the match key (e.g. ["email"]); every row must carry a non-empty value for each. |