OverviewPlatformsAPI Reference

TypeScript SDK

@rumoro-dev/sdk on npm. One typed function for each Rumoro API operation.


@rumoro-dev/sdk gives you one typed function for each endpoint, with the names from the API reference, such as searchMentions, createKeyword or getAnalyticsSummary. It is generated from the OpenAPI document, runs on Node 22 or newer and has no runtime dependencies. Use it on a server. The API doesn't accept requests from browsers on other sites, which keeps your API key out of web pages.

npm install @rumoro-dev/sdk

First call

import { createRumoro } from '@rumoro-dev/sdk';

const rumoro = createRumoro({ apiKey: process.env.RUMORO_API_KEY! });

const { data, error } = await rumoro.searchMentions({
  query: { platform: 'reddit', relevant: true, limit: 20 },
});
if (error) throw new Error(`${error.error.code}: ${error.error.message}`);

for (const mention of data.data) {
  console.log(mention.post.platform, mention.classification?.relevance, mention.post.url);
}

A call never throws on an HTTP error. It returns { data, error, request, response }, and on failure error holds the API's error envelope while data is undefined. To get data directly and an exception on failure, pass throwOnError: true.

const { data: keyword } = await rumoro.createKeyword({
  body: { term: 'driftwood', kind: 'brand', platforms: ['reddit', 'github'] },
  throwOnError: true,
});

Calls

Put ids from the path in path, query parameters in query and the request body in body.

await rumoro.updateMention({ path: { id: 'mm_...' }, body: { status: 'done', note: 'Answered in the thread' } });
await rumoro.getPerson({ path: { id: 'aut_...' } });
await rumoro.createAlert({
  body: { name: 'Pricing questions', mode: 'instant', event: 'mention.pricing', filter: { intents: ['pricing'] }, channelIds: ['dest_...'] },
});
await rumoro.getAnalyticsSummary({ query: { range: '7d', compare: true, timezone: 'America/New_York' } });

For the next page, send nextCursor as cursor. Stop when it is null.

let cursor: string | undefined;
do {
  const { data } = await rumoro.searchMentions({ query: { sentiment: 'negative', limit: 100, cursor }, throwOnError: true });
  for (const mention of data.data) console.log(mention.id, mention.post.url);
  cursor = data.nextCursor ?? undefined;
} while (cursor);

A CSV export returns a string.

const { data: csv } = await rumoro.exportMentionsCsv({ query: { since: '2026-10-01T00:00:00Z' }, throwOnError: true });

Types

All schemas are exported, such as Mention, Keyword, Person, Segment, Alert, Channel, Company, AnalyticsSummary and ShareOfVoice. Every call also has an <Operation>Data and an <Operation>Response type.

import type { Mention, SearchMentionsData } from '@rumoro-dev/sdk';

type SearchQuery = NonNullable<SearchMentionsData['query']>;
const recent: SearchQuery = { relevant: true, limit: 50 };

Configuration

const rumoro = createRumoro({
  apiKey: 'ref_...',
  baseUrl: 'https://api.rumoro.dev',        // the default
  fetch: customFetch,                       // for tests, or a runtime without fetch
  headers: { 'x-request-source': 'crm-sync' }, // added to every request
});

rumoro.client is the client underneath. Use rumoro.client.interceptors to change requests or responses, and rumoro.client.request(...) to send any request yourself.

Was this page helpful?

On this page