SDK reference
Both SDKs wrap the REST API, retry safely, and raise typed errors. They have no heavy dependencies.
TypeScript: @setu/sdk#
import { Setu, SetuError } from "@setu/sdk";
const setu = new Setu({ apiKey, baseUrl, maxRetries: 2, timeoutMs: 60_000 });| Call | Returns |
|---|---|
setu.toolkits.list() / .get(slug) |
Catalog entries |
setu.tools.list({ toolkits, format }) |
Tool definitions |
setu.tools.search(query, { toolkits, limit, format }) |
Ranked tool definitions |
setu.connections.initiate({ userId, toolkit, redirectUrl?, scopes? }) |
Connection with connectUrl and waitUntilActive() |
setu.connections.connectApiKey({ userId, toolkit, apiKey }) |
Connection id |
setu.connections.list({ userId?, toolkit? }), .get(id), .delete(id) |
Connection info |
setu.execute({ userId, action, input, connectionId?, confirm? }) |
{ data, httpStatus } |
setu.sessions.create({ userId, toolkits?, actions?, mode?, ttlSeconds? }) |
{ sessionId, mcpUrl, expiresAt } |
setu.handleToolCalls({ userId, format, toolCalls }) |
Messages to append to the conversation |
SetuError has code, status, retryable, details, requestId and needsConnection.
Python: setu#
from setu import Setu, AsyncSetu, SetuError
setu = Setu(api_key=None, base_url=None, max_retries=2, timeout=60.0)The surface mirrors TypeScript with snake_case names: setu.tools.search(...),
setu.connections.initiate(...), setu.execute(...), setu.sessions.create(...),
setu.handle_tool_calls(user_id, tool_calls). AsyncSetu has the same methods as coroutines.
Use either client as a context manager to close the HTTP connection pool.
Environment variables#
| Variable | Default |
|---|---|
SETU_API_KEY |
none (required) |
SETU_BASE_URL |
https://api.setuagent.com |