Already using the Anthropic or OpenAI SDK? Ship your agent to production in one call.

See the quickstart

SDKs

Official Node and Python SDKs for Jettson. Start an agent in 3 lines of code.

Two official SDKs, both MIT-licensed, both with zero or one runtime dependencies. The HTTP surface is the same — your code is faster to write.

Node.js

bash
npm install @jettson/sdk
ts
import { Jettson } from "@jettson/sdk";

const jettson = new Jettson({ apiKey: process.env.JETTSON_API_KEY! });

const agent = await jettson.agents.spawn({ task: "Research linear.app" });
const result = await jettson.agents.wait(agent.agent_id);
console.log(result.final_result);

Requires Node 18+. Native fetch, zero runtime dependencies. Full reference: Node SDK docs.

Python

bash
pip install jettson
python
from jettson import Jettson

client = Jettson(api_key=os.environ["JETTSON_API_KEY"])

agent = client.agents.spawn(task="Research linear.app")
result = client.agents.wait(agent.agent_id)
print(result.final_result)

Requires Python 3.9+. One runtime dep (httpx). Sync today, async in the next release. Full reference: Python SDK docs.

Feature parity

Both SDKs cover the full v1 API surface as of today.

| Capability | Node | Python | | --- | --- | --- | | agents.spawn / get / list / cancel | ✓ | ✓ | | agents.wait with exponential backoff | ✓ | ✓ | | Full memory.* surface (10 methods) | ✓ | ✓ | | Region selection (iad / lhr / syd) | ✓ | ✓ | | Idempotency-key support | ✓ | ✓ | | Auto-retry on 429 (honors Retry-After) | ✓ | ✓ | | Auto-retry on 5xx (exp backoff) | ✓ | ✓ | | Typed error hierarchy | ✓ | ✓ | | Async API | — (next release) | — (next release) | | Streaming progress events | — (next release) | — (next release) |

Which one to use

  • Node.js if your stack is TypeScript / JavaScript or you're building a Next.js / Express / Fastify backend. Native fetch means no install warnings and no SSL config to worry about.
  • Python if your stack is FastAPI / Django / Flask / a Jupyter notebook. httpx.Client integrates cleanly with sync codebases; async support arrives in the next release.

The HTTP API works just as well — both SDKs are open source if you'd rather read the source than the docs.

Authentication

Both SDKs read your API key as a constructor argument. Get one at /console/api-keys, then:

ts
new Jettson({ apiKey: process.env.JETTSON_API_KEY! })
python
Jettson(api_key=os.environ["JETTSON_API_KEY"])

See Authentication for hygiene practices.

Error handling

Every HTTP failure surfaces as a typed exception. Both SDKs ship the same hierarchy:

  • JettsonAuthError — bad API key (401)
  • JettsonRateLimitError — per-key rate cap hit (429) — carries retryAfterSeconds
  • JettsonQuotaExceededError — plan quota hit (402) — carries used, limit, plan
  • JettsonValidationError — bad request (400)
  • JettsonNotFoundError — wrong / unowned ID (404)
  • JettsonServerError — transient 5xx (auto-retried first)
  • JettsonNetworkError — couldn't reach the API
  • AgentTimeoutErrorwait() timeout

memory.get() is the one exception across both SDKs: instead of throwing on 404, it returns null/None so the "lookup or fallback" pattern stays clean.

Retries

The HTTP client retries automatically:

  • 429 — waits the duration in Retry-After, then retries (up to maxRetries, default 3)
  • 5xx — exponential backoff (1s → 2s → 4s), up to maxRetries
  • Network failure — one retry after the initial backoff window

Disable retries by passing maxRetries: 0 / max_retries=0 if you need first-failure semantics.

What's next

  • AsyncAsyncJettson in both SDKs lands in the next release.
  • Streaming progressagent.on("progress", …) for Node, async-iterator for Python.
  • Custom tools — register your own tool, invoked from inside the agent loop.
  • Webhooks — agent lifecycle events delivered to your endpoint.

Other languages

The API works from any language. We'll ship official wrappers based on demand — until then, the API reference has cURL for every endpoint and writing a thin wrapper takes an afternoon.