Skip to main content

Install

npm
npm install @robase/node
pnpm
pnpm add @robase/node
bun
bun add @robase/node

Initialize

import { Robase } from '@robase/node';

const pm = new Robase(process.env.ROBASE_API_KEY!);
Or with explicit options:
const pm = new Robase({
  apiKey: process.env.ROBASE_API_KEY!,
  baseUrl: 'https://api.robase.dev/v1', // default
  fetch: globalThis.fetch,               // override for testing
});

Surface

pm.emails.send(...)
pm.emails.batch(...)
pm.emails.get(id)
pm.emails.list({ limit, cursor })
pm.emails.cancel(id)

pm.sms.send(...)
pm.sms.batch(...)
pm.sms.get(id)
pm.sms.list({ limit, cursor })
pm.sms.analytics(days)

pm.smsTemplates.create({ name, body })
pm.smsTemplates.list()
pm.smsTemplates.get(id)
pm.smsTemplates.update(id, { body })
pm.smsTemplates.remove(id)
pm.smsTemplates.render(id, variables)

pm.senderIds.create({ sender_id, ... })
pm.senderIds.list()
pm.senderIds.update(id, { ... })

pm.domains.create({ name })
pm.domains.list()
pm.domains.get(id)
pm.domains.verify(id)

pm.webhooks.create({ url, events })
pm.webhooks.list()
pm.webhooks.update(id, { ... })
pm.webhooks.remove(id)
pm.webhooks.test(id)

pm.suppressions.add({ email, reason })
pm.suppressions.list()
pm.suppressions.remove(email)

Errors

import { RobaseError } from '@robase/node';

try {
  await pm.sms.send({ to, from, body });
} catch (e) {
  if (e instanceof RobaseError) {
    console.log(e.status, e.type, e.message);
    if (e.type === 'phone_invalid') { /* ... */ }
  }
}

Verifying webhooks

import { verifyWebhook } from '@robase/node';

const ok = await verifyWebhook(rawBody, req.headers['robase-signature'], secret);
See webhook security for the full pattern.

TypeScript types

Every method returns fully-typed responses — imports don’t need a separate types package. If you use tsc --strict, the SDK respects it.

Edge / serverless runtimes

The SDK uses the platform fetch when available — so it works on:
  • Cloudflare Workers — drop in, no config.
  • Vercel Edge Functions — drop in.
  • Deno / Bun — drop in.
  • Browser — technically works, but never use a live key in a browser. Route through your server.