Create one Eyeball client for an executor and reuse its namespace clients throughout your application.

ts
import { Eyeball } from "@eyeball/sdk";

const eyeball = new Eyeball({
  apiKey: process.env.EYEBALL_API_KEY!,
  baseUrl: process.env.EYEBALL_EXECUTOR_URL!,
  userId: "user_42",
});

const tools = await eyeball.tools.get({ toolkits: ["gmail"] });
console.log(tools.raw.length);

The project API key remains server-side. userId is the external end-user binding reused by user-scoped tool, connection, and subscription calls; omit it only when each call supplies its own identity. The SDK uses global fetch unless a test or runtime adapter supplies another implementation.

See the generated Client API for every constructor option, namespace property, and test seam.