The Tablestakes API lets developers trigger AI agents programmatically — from any CRM, data warehouse, internal tool, or custom automation. Describe a goal. Stream the agent's work in real time. Receive enriched results in your own system.
Join the API waitlist — be first when we launch
The API exposes the full capability of Tablestakes agents as programmable endpoints — so your team can embed lead sourcing, prospect research, and outreach into any workflow you already run.
/find-leads Slack command that triggers the agent and posts results to a channel. Give your whole sales team agent access without leaving where they work.Agent tasks aren't instant — they involve multiple tool calls, data lookups, and enrichment steps that take seconds to complete. The API is built around server-sent events (SSE) so your application receives real-time progress updates as the agent works, rather than waiting for a single slow response.
job_id immediately. Poll the status endpoint or subscribe to the event stream — no timeouts, no dropped connections.Three lines of setup. One function call. Live streaming results.
import httpx import json API_KEY = "ts_live_sk_..." BASE_URL = "https://api.tablestakes.com/v1" def source_leads(query: str, limit: int = 20): """Stream lead sourcing results from the Tablestakes API.""" headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json", "Accept": "text/event-stream", } payload = { "query": query, "limit": limit, "save_to_account": True, } with httpx.stream("POST", f"{BASE_URL}/agent/leads", headers=headers, json=payload) as r: for line in r.iter_lines(): if line.startswith("data: "): event = json.loads(line[6:]) if event["type"] == "step": print(f"[{event['step']}] {event['status']}") elif event["type"] == "leads_enriched": leads = event["leads"] print(f"\n✓ {len(leads)} leads found:") for lead in leads: print(f" {lead['name']} · {lead['title']} · score: {lead['score']}") elif event["type"] == "done": print(f"\n● Complete · {event['saved']} saved") break # Run it source_leads("Find VPs of Sales at Series B SaaS companies in Austin")
const API_KEY = "ts_live_sk_..."; const BASE_URL = "https://api.tablestakes.com/v1"; async function sourceLeads(query, limit = 20) { const response = await fetch(`${BASE_URL}/agent/leads`, { method: "POST", headers: { "Authorization": `Bearer ${API_KEY}`, "Content-Type": "application/json", "Accept": "text/event-stream", }, body: JSON.stringify({ query, limit, save_to_account: true }), }); const reader = response.body.getReader(); const decoder = new TextDecoder(); while (true) { const { done, value } = await reader.read(); if (done) break; const lines = decoder.decode(value).split("\n"); for (const line of lines) { if (!line.startsWith("data: ")) continue; const event = JSON.parse(line.slice(6)); if (event.type === "step") { console.log(`[${event.step}] ${event.status}`); } else if (event.type === "leads_enriched") { console.log(`\n✓ ${event.leads.length} leads found`); event.leads.forEach(lead => { console.log(` ${lead.name} · ${lead.title} · ${lead.company}`); }); } else if (event.type === "done") { console.log(`\n● Complete · ${event.saved} saved`); break; } } } } sourceLeads("Find VPs of Sales at Series B SaaS companies in Austin");
curl -X POST https://api.tablestakes.com/v1/agent/leads \ -H "Authorization: Bearer ts_live_sk_..." \ -H "Content-Type: application/json" \ -H "Accept: text/event-stream" \ -d '{ "query": "Find VPs of Sales at Series B SaaS in Austin", "limit": 20, "save_to_account": true }'
Every Tablestakes plan includes API access. Limits scale with your plan — upgrade anytime from your dashboard.
| Plan | API Calls / Month | Agent Calls / Day | Concurrent Jobs | Webhooks |
|---|---|---|---|---|
| Starter ($89/mo) | 1,000 | 100 | 2 | — |
| Pro ($199/mo) | 10,000 | 500 | 10 | ✓ |
| Team | Custom | Custom | Custom | ✓ |
Rate limits are enforced server-side per API key. Exceeding your limit returns a 429 Too Many Requests response with a Retry-After header. Limits reset on the first of each calendar month.
Every Tablestakes API request is authenticated with a bearer token. Keys are created and managed in your Tablestakes dashboard — no external key management required.
ts_test_sk_) return realistic mock data without consuming API credits or querying live data sources. Use them freely during development.X-Tablestakes-Signature header on every inbound webhook.Join the waitlist. Shape the roadmap. Get early access before general availability.