SDKs
TypeScript SDK
The official Satryx TypeScript / JavaScript library — ESM + CJS, full types, streaming support.
Installation
bash
npm install @satryx/sdk
# or
pnpm add @satryx/sdk
# or
yarn add @satryx/sdkRequires Node.js 18+ (for native fetch) or any modern browser.
Setup
typescript
import Satryx from "@satryx/sdk";
// Reads process.env.SATRYX_API_KEY automatically
const client = new Satryx();
// Or pass explicitly
const client = new Satryx({ apiKey: "satryx_live_…" });Tip:In browser environments, never expose your API key in client-side code. Call your own backend, which holds the key and proxies requests to Satryx.
Chat completions
Non-streaming
typescript
const response = await client.chat.completions.create({
model: "llama-3.1-70b",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Explain React Server Components." },
],
temperature: 0.7,
maxTokens: 1024,
});
console.log(response.choices[0].message.content);
console.log("Tokens:", response.usage?.totalTokens);Streaming
typescript
const stream = await client.chat.completions.create({
model: "llama-3.1-70b",
messages: [{ role: "user", content: "Write a short story." }],
stream: true,
});
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content ?? "";
process.stdout.write(delta);
}
console.log(); // newline when doneImage generation
typescript
const response = await client.images.generate({
prompt: "A surreal dreamscape with floating islands, digital art",
model: "flux-dev",
n: 1,
size: "1024x1024",
});
const imageUrl = response.data[0].url;
console.log(imageUrl); // download before URL expires (1 hour)Error handling
typescript
import Satryx, {
AuthenticationError,
RateLimitError,
APIConnectionError,
APIStatusError,
} from "@satryx/sdk";
const client = new Satryx();
try {
const response = await client.chat.completions.create({
model: "llama-3.1-70b",
messages: [{ role: "user", content: "Hello" }],
});
console.log(response.choices[0].message.content);
} catch (err) {
if (err instanceof AuthenticationError) {
console.error("Bad API key");
} else if (err instanceof RateLimitError) {
console.error(`Rate limited — retry in ${err.retryAfterSeconds}s`);
} else if (err instanceof APIConnectionError) {
console.error("Network error");
} else if (err instanceof APIStatusError) {
console.error(`HTTP ${err.statusCode}: ${err.message}`);
} else {
throw err;
}
}List models
typescript
const models = await client.models.list();
models.data.forEach((m) => console.log(m.id, m.capabilities));Next.js / React usage
In Next.js, call Satryx from Server Components or Route Handlers — never from client components, as the API key would be exposed.
typescript
// app/api/chat/route.ts
import { NextRequest, NextResponse } from "next/server";
import Satryx from "@satryx/sdk";
import { useSeo } from "../../seo/useSeo";
import { DOCS_BY_PATH } from "../../seo/routes";
const satryx = new Satryx(); // reads SATRYX_API_KEY from env
export async function POST(req: NextRequest) {
const { messages } = await req.json();
const response = await satryx.chat.completions.create({
model: "llama-3.1-70b",
messages,
});
return NextResponse.json(response);
}Configuration options
| Parameter | Type | Description |
|---|---|---|
| apiKey | string | API key. Defaults to process.env.SATRYX_API_KEY. |
| baseUrl | string | API base URL. Default: "https://api.satryx.ai". |
| timeout | number | Request timeout in milliseconds. Default 60000. |
| maxRetries | number | Automatic retries on 429/5xx. Default 3. |