SDKs
Catentio ships SDKs in three languages with feature parity across all three. Same 25 resource namespaces, same Bearer auth, same envelope. Pick the one for your stack:
| Language | Package | Install |
|---|---|---|
| Node.js | @forjio/catentio-saas-node |
npm install @forjio/catentio-saas-node |
| Python | catentio-saas (PyPI) |
pip install catentio-saas |
| Go | github.com/hachimi-cat/saas-catentio/sdk/go |
go get github.com/hachimi-cat/saas-catentio/sdk/go |
All three:
- Implement the same surface — 25 resource namespaces, identical method names modulo language casing.
- Support both static API key auth (
apiKey/api_key/APIKey) and OIDC device-flow Bearer auth (Session). - Use
@forjio/sdk(or its Python / Go peers) underneath for HTTP, JWT verify, and Session refresh — the same plumbing every other Forjio product SDK uses. - Provide a per-call
tokenoverride so you can act on behalf of a different identity for one request without rebuilding the client.
The 25 namespaces
| Namespace | Surface |
|---|---|
workspaces |
list, show, create, destroy, setState |
agents |
list, get, invoke |
runs |
list, get, cancel |
projects |
list, get, create, plus per-project: listAttachments, addAttachment, listTasks, getTask, listSubtasks, getSubtask, listAttempts, listArtifacts, listEvents, cost, pause, resume, abandon, runStep, retrySubtask |
templates |
list |
tools |
list, get, create, update, delete |
skills |
list, get |
memory |
stats, listEntries, getEntry, createEntry, updateEntry |
apiKeys |
list, create, delete |
billing |
catalog, summary, subscribe |
cost |
summary |
integrations |
list, configure, delete |
webhooks |
list, create, delete |
scheduledJobs |
list, create, update, delete |
featureFlags |
list, set |
files |
list, upload, delete |
outputDestinations |
list, get, create, update, delete |
discord |
status, sendMessage |
gojo |
sessions |
heartbeats |
list, config, updateConfig |
system |
info, health (unauth) |
chat |
send, history |
events |
list |
inboundWebhooks |
list |
The 25 namespaces match the control plane's resource layout 1:1. Adding a new resource on the server adds a namespace to every SDK in the same release.
Quick comparison
Same call in three languages — invoke an agent:
Node.js:
import { CatentioSaasClient } from '@forjio/catentio-saas-node';
const catentio = new CatentioSaasClient({ apiKey: process.env.CATENTIO_API_KEY });
const run = await catentio.agents.invoke('cimi', {
message: 'Summarise the project board in three bullets.',
});
Python:
from catentio_saas import CatentioClient
import os
with CatentioClient(api_key=os.environ["CATENTIO_API_KEY"]) as catentio:
run = catentio.agents.invoke("cimi", {
"message": "Summarise the project board in three bullets.",
})
Go:
import catentio "github.com/hachimi-cat/saas-catentio/sdk/go"
client, _ := catentio.NewClient(catentio.ClientOptions{
APIKey: os.Getenv("CATENTIO_API_KEY"),
})
run, _ := client.Agents.Invoke(ctx, "cimi", catentio.AgentInvokeInput{
Message: "Summarise the project board in three bullets.",
})
The differences are purely idiomatic: camelCase in Node, snake_case in Python, PascalCase in Go. The underlying call is identical.
Static key vs Bearer session
Both authentication modes work with every method. Pick at construction time:
// Server-to-server — static key
const catentio = new CatentioSaasClient({ apiKey: 'cat_ak_...' });
// Interactive — device-flow session
const catentio = new CatentioSaasClient({ session });
For mixed callers, you can override per call with the optional token last-arg:
// Use the client's apiKey for most calls...
const agents = await catentio.agents.list();
// ...but this one call uses a specific Bearer token instead.
const runs = await catentio.runs.list({}, '<specific-token>');
The Python and Go SDKs have the same per-call override pattern.
Versioning
All SDKs follow semantic versioning:
- MAJOR bumps for breaking changes (rare; batched).
- MINOR bumps for new features (most releases).
- PATCH bumps for fixes.
Current versions are 0.x across the three. Pre-1.0 means small breaking changes can ship between minor versions; every break is documented in the changelog. Once we hit 1.0, the contract becomes strict.
Open-source
The SDKs live in the same repo as Catentio's portal + control plane:
- Node: saas-catentio/sdk/node
- Python: saas-catentio/sdk/python
- Go: saas-catentio/sdk/go
PRs welcome through the same review path as the rest of the codebase.
Other languages
If your stack is Ruby, PHP, Rust, Elixir, or anything else, use the raw REST API directly. The OpenAPI spec is published from the runtime repo and works with any OpenAPI tooling.
We don't currently plan to publish additional language SDKs — the Forjio family has settled on Node / Python / Go as the canonical trio. If there's strong demand for a fourth, email hello@catentio.com.
Next
- Installation — install the SDK for your stack.
- API authentication — Bearer + API-key recipes.
- Quickstart — end-to-end agent invocation.