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/sdk

Requires 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 done

Image 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

ParameterTypeDescription
apiKeystringAPI key. Defaults to process.env.SATRYX_API_KEY.
baseUrlstringAPI base URL. Default: "https://api.satryx.ai".
timeoutnumberRequest timeout in milliseconds. Default 60000.
maxRetriesnumberAutomatic retries on 429/5xx. Default 3.