Official TypeScript/JavaScript SDK for Cognipeer Console - A multi-tenant SaaS platform for AI and Agentic services.
- 🤖 Chat Completions - OpenAI-compatible chat API with streaming support
- 📦 Batch API - OpenAI-compatible asynchronous bulk inference (chat + embeddings)
- 🚦 Moderations - OpenAI-compatible content moderation backed by guardrails
- 💰 Spend & Budgets - Cost reporting and enforced spend caps per tenant/token/model
- 🎧 Realtime - Low-latency voice sessions over WebSocket (binary PCM/G.711 audio, server turn detection, barge-in, first message, latency metrics) and Twilio phone calls
- 🧑
✈️ Agents - Invoke Console-managed agents via the OpenAI Responses API - 📊 Embeddings - Text vectorization for semantic search
- 🗄️ Vector Operations - Manage vector databases (Pinecone, Chroma, Qdrant, etc.)
- 📁 File Management - Upload, download, and manage files with markdown conversion + file providers
- 🎙️ Audio - OpenAI-compatible STT, translation, and TTS
- 📄 OCR - Document text extraction with layout/table/KV features
- 🕸️ Crawler - Scheduled and ad-hoc web crawling jobs
- ⚙️ Automations - Trigger and pause built-in scheduled jobs
- 🔀 Rerankers - Cohere-compatible reranking
- 🛰️ MCP - Talk to the built-in Console MCP server and tenant-configured MCP servers
- 🌐 Browser Automation - Manage browser profiles, drive live sessions, and expose per-browser MCP endpoints
- 🔍 Agent Tracing - Streaming + bulk ingest, OTLP/HTTP JSON, plus OpenTelemetry exporter
- 🧠 Memory Stores - Persist, search, and recall scoped memories
- 🛡️ Guardrails - Evaluate content with tenant guardrail policies
- 🔒 Type-Safe - Full TypeScript support with comprehensive types
- ⚡ Modern - ESM and CommonJS support, works in Node.js and browsers
npm install @cognipeer/console-sdkyarn add @cognipeer/console-sdkpnpm add @cognipeer/console-sdkimport { ConsoleClient } from '@cognipeer/console-sdk';
// Initialize the client
const client = new ConsoleClient({
apiKey: 'your-api-key',
baseURL: 'https://your-console.example.com', // Optional, defaults to https://console.cognipeer.com
});
// Chat completion
const response = await client.chat.completions.create({
model: 'gpt-4',
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'Hello!' },
],
});
console.log(response.choices[0].message.content);
// Streaming chat
const stream = await client.chat.completions.create({
model: 'gpt-4',
messages: [{ role: 'user', content: 'Tell me a story' }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || '');
}
// Create embeddings
const embeddings = await client.embeddings.create({
model: 'text-embedding-3-small',
input: 'Hello, world!',
});
console.log(embeddings.data[0].embedding);
// Vector operations
await client.vectors.upsert('my-provider', 'my-index', {
vectors: [
{
id: 'vec1',
values: [0.1, 0.2, 0.3],
metadata: { text: 'Hello world' },
},
],
});
const results = await client.vectors.query('my-provider', 'my-index', {
query: {
vector: [0.1, 0.2, 0.3],
topK: 5,
},
});
// File upload
const file = await client.files.upload('my-bucket', {
fileName: 'document.pdf',
data: 'data:application/pdf;base64,JVBERi0xLjQK...',
convertToMarkdown: true,
});
// Memory
const store = await client.memory.stores.create({
name: 'Support Memory',
vectorProviderKey: 'pinecone-main',
embeddingModelKey: 'text-embedding-3-small',
});
await client.memory.add(store.key, {
content: 'User prefers concise billing explanations.',
scope: 'user',
scopeId: 'user_123',
tags: ['billing', 'preferences'],
source: 'manual',
});
const recall = await client.memory.recall(store.key, {
query: 'user communication preferences',
scope: 'user',
scopeId: 'user_123',
});
console.log(recall.context);Full documentation is available at docs.cognipeer.com/console-sdk
If you need the platform itself, deployment guidance, tenant architecture, provider setup, or raw HTTP API semantics, use the Cognipeer Console docs.
- Getting Started
- Working with Console
- Console API Mapping
- Chat API
- Embeddings API
- Audio API
- OCR API
- Crawler API
- Automations API
- Rerankers API
- Web Search API
- MCP API
- Guardrails API
- Memory API
- Vector API
- Files API
- Tracing API
- Examples
const client = new ConsoleClient({
apiKey: string; // Required: Your API token
baseURL?: string; // Optional: API host root (default: https://console.cognipeer.com).
// Legacy URLs ending in /api/client/v1 are normalised automatically.
timeout?: number; // Optional: Request timeout in ms (default: 60000)
maxRetries?: number; // Optional: Max retry attempts (default: 3)
fetch?: typeof fetch; // Optional: Custom fetch implementation
});client.chat.completions.create(params)- Create chat completion (streaming supported)
client.agents.responses.create(params, options?)- Invoke an agent (OpenAI Responses API format)client.agents.responses.create({ ..., background: true, callback_url?, callback_secret? }, { idempotencyKey? })- Start a background run; returns anAgentRun(run_...) immediatelyclient.agents.runs.get(runId)- Run status, withresultoncesucceeded/erroroncefailed/canceledclient.agents.runs.cancel(runId)- Cooperatively cancel aqueued/runningrunclient.agents.runs.wait(runId, { pollIntervalMs?, timeoutMs?, signal? })- Poll until the run is terminalverifyAgentRunCallback({ rawBody, signatureHeader, secret })from@cognipeer/console-sdk/webhooks(Node.js) - Verify a signed run callback
const run = await client.agents.responses.create(
{ model: 'research-agent', input: 'Compare these vendors', background: true },
{ idempotencyKey: 'job-42' },
);
const done = await client.agents.runs.wait(run.id, { timeoutMs: 15 * 60_000 });
if (done.status === 'succeeded') console.log(done.result?.output[0]?.content[0]?.text);See Agents → Background runs for callbacks and error codes.
client.embeddings.create(params)- Create embeddings
client.batches.create(data)- Create a batch (inlinerequestsorinput_fileJSONL in a bucket)client.batches.list(query?)- List batchesclient.batches.retrieve(batchId)- Batch status, request counts, and usageclient.batches.cancel(batchId)- Cancel a batch (pending lines are skipped)client.batches.items(batchId, query?)- Per-request line statusclient.batches.results(batchId)- Finished lines as parsed OpenAI output objectsclient.batches.resultsRaw(batchId)- Raw output JSONL document
client.moderations.create({ input, model? })- Classify text against a moderation guardrail (OpenAI-compatible)
client.spend.report(query?)- Spend totals, per-model breakdown, timeseriesclient.budgets.list()- List budget policiesclient.budgets.create(data)- Create a spend cap (owner/admin token)client.budgets.update(budgetId, data)- Update limits/thresholdsclient.budgets.delete(budgetId)- Remove a budget policyclient.budgets.status(query?)- Current usage vs limits per window
client.realtime.models.list()/.create(data)/.retrieve(id)/.update(id, data)/.delete(id)- Named realtime model presets (chat model or agent + STT + TTS; voice is optional and defaults to the provider voice)client.realtime.connect({ model })- Open a WebSocket session;modelis a realtime model key or raw chat model key. Pass{ agent }instead to have a Console agent generate the responses. The generator is fixed once the conversation starts. Resolves once the server has created the session and rejects with the server's reason when the key is refused (timeoutMsbounds the wait)conn.sendAudio(bytes)/conn.onAudio(cb)- Voice: rawpcm16(24 kHz default) / G.711 input as binary frames, server turn detection (semantic_vaddefault), decoded Int16 PCM output; typed events viaconn.on(type, cb)(see docs/api/realtime.md)client.realtime.calls.create({ to, model })/.get(sessionId, { refresh? })/.hangup(sessionId)- Outbound phone calls through the preset's Twilio connection (inbound calls: point the number at the Console's voice webhook; the server mints the media-stream URL)connection.updateSession(session)- Set instructions, STT/TTS models, voice;model/agent_keyonly before the first response (generator_lockedafterwards)connection.respond(text)- Send a message and await the full response (text + optional audio); rejects if the socket closes firstconnection.on('response.output_text.delta', cb)- Stream deltas; use'*'for all eventsconnection.appendAudio(bytes)/commitAudio()- Base64 audio input / manual end of turn (push-to-talk,turn_detection: null)connection.createResponse()/cancelResponse()/close()connection.onClose(cb)/connection.closed- Learn that the server closed the connection (4401unauthorized,4402license required,1013server busy,1011server error, a network drop…)
client.vectors.providers.list(query?)- List vector providersclient.vectors.providers.create(data)- Create vector providerclient.vectors.indexes.list(providerKey)- List indexesclient.vectors.indexes.create(providerKey, data)- Create indexclient.vectors.indexes.get(providerKey, indexId)- Get index detailsclient.vectors.indexes.update(providerKey, indexId, data)- Update indexclient.vectors.indexes.delete(providerKey, indexId)- Delete indexclient.vectors.upsert(providerKey, indexId, data)- Upsert vectorsclient.vectors.query(providerKey, indexId, query)- Query vectorsclient.vectors.delete(providerKey, indexId, ids)- Delete vectors
client.files.buckets.list()- List bucketsclient.files.buckets.get(bucketKey)- Get bucket detailsclient.files.providers.list(query?)- List storage providersclient.files.providers.create(data)- Create a storage providerclient.files.list(bucketKey, query?)- List filesclient.files.upload(bucketKey, data)- Upload fileclient.files.get(bucketKey, objectKey)- Get file metadataclient.files.delete(bucketKey, objectKey)- Delete a fileclient.files.download(bucketKey, objectKey)- Download file bytes (Uint8Array)
client.audio.transcriptions.create(params)- Speech-to-text (OpenAI-compatible)client.audio.translations.create(params)- Translate audio to Englishclient.audio.speech.create(params)- Synthesize speech (returns binary)
client.ocr.extract(params)- Extract text/tables/layout from a document
client.crawler.list(query?)- List crawlersclient.crawler.create(data)- Create a crawlerclient.crawler.get(idOrKey)- Get a crawlerclient.crawler.update(idOrKey, data)- Update a crawlerclient.crawler.delete(idOrKey)- Delete a crawlerclient.crawler.run(idOrKey, options?)- Trigger a crawler runclient.crawler.crawlWithCrawler(idOrKey, options)- Crawl a fixed URL list using a crawler's configclient.crawler.runAdhoc(options)- Run a one-off crawl without a persistent crawlerclient.crawler.listUrls / addUrls / removeUrls(...)- Manage container URLsclient.crawler.jobs.list(query?)- List crawl jobsclient.crawler.jobs.get(jobId)- Get crawl jobclient.crawler.jobs.listResults(jobId, query?)- List crawled pagesclient.crawler.jobs.getResult(jobId, resultId)- Fetch a single pageclient.crawler.jobs.cancel(jobId)- Cancel a running job
client.automations.list()- List automationsclient.automations.get(key)- Get an automationclient.automations.run(key)- Trigger immediatelyclient.automations.pause(key)/resume(key)- Pause / resume
client.rerankers.list()- List rerankersclient.rerankers.get(key)- Get a rerankerclient.rerankers.run(key, params)- Run a reranker (Cohere-compatible response)
client.webSearch.search(params)- Run a web search (default or named provider)client.webSearch.providers.list()- List configured web search providers
client.mcp.console.listTools / execute / initialize / callTool / callJsonRpc(...)- Built-in Console MCP serverclient.mcp.console.getSseUrl() / getMessageUrl(sessionId) / getConnectionInfo(apiKey)client.mcp.server(serverKey)- Same interface for a tenant-configured MCP server
client.browsers.create(data)- Create a browser profileclient.browsers.list(query?)- List browser profilesclient.browsers.get(idOrKey)- Get browser profile detailsclient.browsers.update(idOrKey, data)- Update a browser profileclient.browsers.delete(idOrKey)- Delete a browser profile
client.browserSessions.create(data)- Create a browser session under a browser profileclient.browserSessions.list(query?)- List browser sessionsclient.browserSessions.get(sessionId)- Get browser session detailsclient.browserSessions.listEvents(sessionId, query?)- List session event historyclient.browserSessions.action(sessionKey, action)- Execute a browser actionclient.browserSessions.extract(sessionKey, input)- Extract text, HTML, or attributesclient.browserSessions.snapshot(sessionKey)- Capture the current aria snapshotclient.browserSessions.screenshotLive(sessionKey, query?)- Fetch a raw viewport screenshotclient.browserSessions.screenshot(sessionKey, input?)- Persist a screenshot artifactclient.browserSessions.pdf(sessionKey, input?)- Export a PDF artifactclient.browserSessions.close(sessionKey)- Close a live sessionclient.browserSessions.delete(sessionId)- Delete a stored session record
client.browserMcp.getConnectionInfo(browserKey)- Build SSE/message endpoint URLs for MCP clientsclient.browserMcp.getSseUrl(browserKey)- Get the SSE endpoint for a browser MCP serverclient.browserMcp.getMessageUrl(browserKey, sessionId)- Build the JSON-RPC message URLclient.browserMcp.initialize(browserKey)- Read the MCP server metadataclient.browserMcp.listTools(browserKey)- List Browser Use MCP tools
Standalone client.browserAgents management has been removed. To give a Console-managed agent browser capabilities, configure the Browser Use system tool in Console. Use client.browserSessions or client.browserMcp for direct browser automation from the SDK.
client.prompts.list(query?)- List prompt templatesclient.prompts.get(key, options?)- Get prompt (supportsversion/environment)client.prompts.render(key, options?)- Render prompt with dataclient.prompts.listVersions(key)- List version historyclient.prompts.getDeployments(key)- Get environment deployment states and historyclient.prompts.deploy(key, options)- Runpromote/plan/activate/rollbackclient.prompts.compare(key, fromVersionId, toVersionId)- Compare two versions
client.tracing.ingest(data)- Ingest a full tracing sessionclient.tracing.startStream(sessionId, data?)- Open a streaming sessionclient.tracing.appendEvent(sessionId, event)- Append a single eventclient.tracing.endStream(sessionId, data?)- Close a streaming sessionclient.tracing.ingestOtlp(payload)- Submit OTLP/HTTP JSON spans directly
client.memory.stores.list(query?)- List memory storesclient.memory.stores.create(data)- Create a memory storeclient.memory.stores.get(storeKey)- Get store detailsclient.memory.stores.update(storeKey, data)- Update a memory storeclient.memory.stores.delete(storeKey)- Delete a memory storeclient.memory.add(storeKey, data)- Add a memory itemclient.memory.addBatch(storeKey, memories)- Add memory items in batchclient.memory.list(storeKey, query?)- List memory itemsclient.memory.get(storeKey, memoryId)- Get a memory itemclient.memory.update(storeKey, memoryId, data)- Update a memory itemclient.memory.delete(storeKey, memoryId)- Delete a memory itemclient.memory.deleteBulk(storeKey, query?)- Delete memory items by scope, scopeId, or tagsclient.memory.search(storeKey, data)- Semantic search within a storeclient.memory.recall(storeKey, data)- Build compact context from stored memories
import { CognipeerOTelSpanExporter } from '@cognipeer/console-sdk';
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
const exporter = new CognipeerOTelSpanExporter({
apiKey: process.env.COGNIPEER_API_KEY!,
baseURL: process.env.COGNIPEER_BASE_URL || 'https://console.cognipeer.com',
});
const provider = new NodeTracerProvider();
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();The exporter forwards spans to /api/client/v1/traces using OTLP/HTTP JSON.
client.guardrails.evaluate(data)- Evaluate text against a guardrail
Check out the examples directory for more detailed usage:
We welcome contributions! Please see our Contributing Guide for details.
MIT © Cognipeer
- 📧 Email: support@cognipeer.com
- 📖 Documentation: docs.cognipeer.com/console-sdk
- 🐛 Issues: GitHub Issues