curl --request GET \
--url https://origami.chat/api/v2/tables/{tableId}/rows \
--header 'Authorization: Bearer <token>'import requests
url = "https://origami.chat/api/v2/tables/{tableId}/rows"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://origami.chat/api/v2/tables/{tableId}/rows', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://origami.chat/api/v2/tables/{tableId}/rows",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://origami.chat/api/v2/tables/{tableId}/rows"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://origami.chat/api/v2/tables/{tableId}/rows")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://origami.chat/api/v2/tables/{tableId}/rows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"items": [
{
"object": "row",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cells": {}
}
],
"nextCursor": "<string>",
"url": "<string>",
"total": 123
}List rows (typed cells; ?cells=flat / ?format=csv)
Returns Row objects ({ object: "row", id, cells }) with polymorphic
typed cells by default (scalar / value (+run) / sequence), in
the canonical list envelope plus total (the filtered row count
for the query’s scope). ?cells=flat returns the v1-style
{ slug: value } rows (deliberately unstamped); ?format=csv
streams CSV. Supports slug-keyed filters / sort JSON and cursor
pagination; this endpoint allows limit up to 200.
curl --request GET \
--url https://origami.chat/api/v2/tables/{tableId}/rows \
--header 'Authorization: Bearer <token>'import requests
url = "https://origami.chat/api/v2/tables/{tableId}/rows"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://origami.chat/api/v2/tables/{tableId}/rows', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://origami.chat/api/v2/tables/{tableId}/rows",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://origami.chat/api/v2/tables/{tableId}/rows"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://origami.chat/api/v2/tables/{tableId}/rows")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://origami.chat/api/v2/tables/{tableId}/rows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"items": [
{
"object": "row",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cells": {}
}
],
"nextCursor": "<string>",
"url": "<string>",
"total": 123
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Query Parameters
Opaque pagination cursor. Pass the nextCursor from the previous
page to fetch the next one; omit for the first page.
Max rows to return. Default 50; rows allow up to 200 (vs. 100 elsewhere).
1 <= x <= 200JSON array of { column, operator, value } filters. column is
an input-column slug, or one of the row-level fields
(relevance_score, duplicates, excluded, disapproved,
triage_state); operators: contains, not_contains,
equals, not_equals, is_empty, is_not_empty,
greater_than, greater_than_or_equal, less_than,
less_than_or_equal. Unknown columns → UNKNOWN_COLUMN.
Supplying this replaces the table's saved filters entirely, even
when the array is empty.
JSON object { column, direction: "asc"|"desc" } (slug-keyed).
Pass flat for v1-style { slug: value } rows instead of typed cells.
flat Pass csv to stream the (flat) rows as CSV.
csv Whether to apply the table's saved filters and sort order - the same
ones shown in the Origami dashboard. Defaults to true. Most tables
carry a quality filter that hides disqualified rows, so this is
usually the difference between the dashboard's row count and the
full table. Pass false to get every row, in insertion order.
Duplicate, excluded and removed rows are hidden by default on every
read; defaults=false does not surface them. Include them with an
explicit filter
({"column":"duplicates","operator":"equals","value":"include"},
likewise excluded and disapproved), or leave defaults=true on
a table whose saved view already unhides them.
true, false Response
A page of rows (list envelope + total).
The canonical v2 list envelope. Every list endpoint returns this
shape; per-endpoint items element types (and documented extras
like total) are declared on each operation.
"list"The page of objects. Element type is per-endpoint.
Show child attributes
Show child attributes
Cursor for the next page; null means this is the last page.
The path this list was fetched from (query string excluded).
Total row count for the query's scope (all pages) -
i.e. after the request's filters, or the table's saved
filters when defaults is left on, and always after
the invariant hiding of duplicate, excluded and
removed rows.