Skip to main content

Installation

npm install opensink
# or
yarn add opensink

Setup

import Opensink from 'opensink';

const client = new Opensink({
  apiKey: 'your-api-key',
});
OptionDescription
apiKeyYour OpenSink API key (required)
urlAPI base URL (defaults to https://api.opensink.com)

Resources

The client exposes one property per resource. Each resource provides standard CRUD methods (create, list, get, update, delete) plus resource-specific methods where applicable.

client.sinks

Manage Sinks — named containers for agent-produced information.
const { data: sink } = await client.sinks.create({
  name: 'research-results',
  description: 'Summaries from research agent',
});

const { data: { items } } = await client.sinks.list();

client.sinkItems

Manage Items — structured records written to sinks.
const { data: item } = await client.sinkItems.create({
  sink_id: 'sink-id',
  title: 'Apple stock drops 3%',
  body: 'Shares fell after earnings missed expectations.',
  type: 'event',
  fields: { ticker: 'AAPL', change_percent: -3 },
});
Additional methods:
MethodDescription
createMany(items)Bulk create multiple items at once

client.agents

Manage Agents — registered AI agents with status tracking.
const { data: agent } = await client.agents.create({
  name: 'research-agent',
  description: 'Gathers and summarizes research',
});

client.agentConfigurations

Manage Configurations — versioned, schema-validated agent settings.
const { data: config } = await client.agentConfigurations.create({
  agent_id: 'agent-id',
  variant: 'default',
  schema: { type: 'object', properties: { model: { type: 'string' } } },
  value: { model: 'gpt-4o' },
});
Additional methods:
MethodDescription
getActiveForAgent(agentId)Get the current active configuration for an agent
listVariants(agentId?)List the latest config for each variant
listConfigs(params?)List configurations with filters (agent_id, variant)

client.agentSessions

Manage Sessions — durable execution records.
const { data: session } = await client.agentSessions.create({
  agent_id: 'agent-id',
  status: 'running',
  state: { step: 'init' },
  metadata: { triggered_by: 'cron' },
});

await client.agentSessions.update('session-id', {
  status: 'completed',
});

client.agentSessionInputRequests

Manage Input Requests — human-in-the-loop prompts.
const { data: request } = await client.agentSessionInputRequests.create({
  session_id: 'session-id',
  agent_id: 'agent-id',
  key: 'approval',
  title: 'Approve purchase',
  message: 'Agent wants to purchase 100 units. Approve?',
  schema: { type: 'object', properties: { approved: { type: 'boolean' } } },
});
Additional methods:
MethodDescription
resolve(id, response)Submit a response to resolve an input request
listRequests(params?)List requests with filters (session_id, status)

client.agentSessionActivities

Manage Activities — structured session event logs.
const { data: activity } = await client.agentSessionActivities.create({
  session_id: 'session-id',
  agent_id: 'agent-id',
  type: 'message',
  source: 'agent',
  message: 'Started processing batch',
});
Additional methods:
MethodDescription
listActivities(params?)List activities with filters (session_id, type, source)

Pagination

List endpoints return paginated results using trail-based pagination:
// First page
const { data: page1 } = await client.sinkItems.list({ $limit: 20 });

// Next page
if (page1.trail) {
  const { data: page2 } = await client.sinkItems.list({
    $limit: 20,
    $trail: page1.trail,
  });
}
All list methods accept $limit (max items per page, default 50) and $trail (cursor from a previous response).