curl --request GET \
--url https://origami.chat/api/v2/agents/{id}/tables \
--header 'Authorization: Bearer <token>'import requests
url = "https://origami.chat/api/v2/agents/{id}/tables"
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/agents/{id}/tables', 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/agents/{id}/tables",
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/agents/{id}/tables"
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/agents/{id}/tables")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://origami.chat/api/v2/agents/{id}/tables")
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": "table",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"leadCount": 123,
"columns": [
{
"object": "column",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"type": "<string>",
"kind": "input",
"slug": "<string>",
"autoTrigger": true,
"credits": {
"lifetimeUsed": 123
},
"cells": {
"running": 1,
"errored": 1
},
"stats": {
"avgCreditsPerRun": 123,
"callRate": 0.5,
"totalRuns": 123
},
"qualification": {
"pass": 123,
"fail": 123,
"unsure": 123,
"total": 123
}
}
],
"credits": {
"lifetimeUsed": 123
},
"cells": {
"running": 1,
"errored": 1
},
"url": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"stats": {
"creditsPerLead": 123,
"creditsPerQualifiedLead": 123,
"findMoreEstimatedCredits": 123,
"qualification": {
"rate": 0.5,
"fetchRate": 0.5,
"qualifiedLeads": 123,
"effectiveLeadsPerQualified": 123,
"estimatedQualifiedLeads": 123
},
"funnel": {
"totalSourcedLeads": 123,
"postStaticLeads": 123,
"dedupedLeads": 123,
"dedupRate": 0.5,
"excludedLeads": 123,
"excludedRate": 0.5
},
"running": {
"runningLeads": 123,
"oldestActiveRunStartedAt": "2023-11-07T05:31:56Z"
},
"leadSources": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"avgCreditsPerLead": 123,
"totalCredits": 123,
"totalLeads": 123,
"source": "historical"
}
],
"hasUnknownTotalWithMore": true
}
}
],
"nextCursor": "<string>",
"url": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"error": "Agent not found",
"code": "AGENT_NOT_FOUND"
}List tables in the agent's workspace
The fallback discovery surface in v2. The run object only
carries response.tables[] for tables a specific run
touched (empty when the run made no mutations or stopped on
a question), so callers that need “every table this agent has
access to” use this endpoint instead.
Each entry is a full TableObject: same shape as
GET /api/v2/tables/{id} and the same shape embedded under
Run.response.tables[]. Pass ?include=stats to attach the
economics block (per-table + per-column).
Scoped to the agent’s own reach - its chat-linked tables plus
its legacy workspace’s tables when it has one; a caller cannot
probe arbitrary containers through this path. Returned in the
canonical list envelope with nextCursor always null; an
agent’s scope is rarely more than a handful of tables, so
the endpoint does not paginate.
curl --request GET \
--url https://origami.chat/api/v2/agents/{id}/tables \
--header 'Authorization: Bearer <token>'import requests
url = "https://origami.chat/api/v2/agents/{id}/tables"
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/agents/{id}/tables', 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/agents/{id}/tables",
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/agents/{id}/tables"
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/agents/{id}/tables")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://origami.chat/api/v2/agents/{id}/tables")
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": "table",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"leadCount": 123,
"columns": [
{
"object": "column",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"type": "<string>",
"kind": "input",
"slug": "<string>",
"autoTrigger": true,
"credits": {
"lifetimeUsed": 123
},
"cells": {
"running": 1,
"errored": 1
},
"stats": {
"avgCreditsPerRun": 123,
"callRate": 0.5,
"totalRuns": 123
},
"qualification": {
"pass": 123,
"fail": 123,
"unsure": 123,
"total": 123
}
}
],
"credits": {
"lifetimeUsed": 123
},
"cells": {
"running": 1,
"errored": 1
},
"url": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"stats": {
"creditsPerLead": 123,
"creditsPerQualifiedLead": 123,
"findMoreEstimatedCredits": 123,
"qualification": {
"rate": 0.5,
"fetchRate": 0.5,
"qualifiedLeads": 123,
"effectiveLeadsPerQualified": 123,
"estimatedQualifiedLeads": 123
},
"funnel": {
"totalSourcedLeads": 123,
"postStaticLeads": 123,
"dedupedLeads": 123,
"dedupRate": 0.5,
"excludedLeads": 123,
"excludedRate": 0.5
},
"running": {
"runningLeads": 123,
"oldestActiveRunStartedAt": "2023-11-07T05:31:56Z"
},
"leadSources": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"avgCreditsPerLead": 123,
"totalCredits": 123,
"totalLeads": 123,
"source": "historical"
}
],
"hasUnknownTotalWithMore": true
}
}
],
"nextCursor": "<string>",
"url": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"error": "Agent not found",
"code": "AGENT_NOT_FOUND"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Query Parameters
Pass stats to attach per-table economics on every entry
(creditsPerLead, qualification, funnel, lead sources).
"stats"
Response
Tables the agent can address (list envelope + the deprecated workspaceId container id).
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).