OptimoCMSDocs
SDK

TypeScript SDK — Installatie

Installeer de OptimoCMS TypeScript SDK en bouw type-safe integraties. Ondersteunt Node.js 18+, retries, pagination en alle API endpoints.

TypeScript SDK

De officiële TypeScript SDK biedt een type-safe, ergonomische interface voor de OptimoCMS API.

Installatie

npm install @optimocms/sdk

Of met yarn/pnpm:

yarn add @optimocms/sdk
pnpm add @optimocms/sdk

Vereisten

OmgevingMinimale versie
Node.js18.0+
TypeScript5.0+ (optioneel, maar aanbevolen)
BrowserElk met ES2020 module support (Chrome 80+, Firefox 80+, Safari 14+, Edge 80+)

Module formaten

De SDK levert zowel ESM als CJS bundles:

// ESM (aanbevolen)
import { OptimoCMS } from '@optimocms/sdk';

// CommonJS
const { OptimoCMS } = require('@optimocms/sdk');

Client setup

import { OptimoCMS } from '@optimocms/sdk';

const cms = new OptimoCMS({
  apiKey: process.env.OPTIMOCMS_API_KEY!,
});

Configuratie-opties

const cms = new OptimoCMS({
  apiKey: process.env.OPTIMOCMS_API_KEY!,

  // Basis-URL (standaard: https://api.optimocms.com)
  baseUrl: 'https://api.optimocms.com',

  // Request timeout in ms (standaard: 30000)
  timeout: 30_000,

  // Automatische retry bij 429/5xx (standaard: 3)
  maxRetries: 3,
});
OptieTypeStandaardBeschrijving
apiKeystringVerplicht. Je API key
baseUrlstringhttps://api.optimocms.comAPI basis-URL
timeoutnumber30000Request timeout in milliseconden
maxRetriesnumber3Max retries bij rate limit of server errors

Browser gebruik

De SDK werkt ook in de browser. Gebruik nooit je API key direct in client-side code — maak een backend proxy:

// Backend (Node.js) — /api/sites.ts
import { OptimoCMS } from '@optimocms/sdk';

const cms = new OptimoCMS({ apiKey: process.env.OPTIMOCMS_API_KEY! });

export async function GET() {
  const sites = await cms.sites.list();
  return Response.json(sites);
}
// Frontend (browser)
const response = await fetch('/api/sites');
const sites = await response.json();

Beschikbare modules

Na initialisatie heb je toegang tot alle API modules:

cms.sites       // Sites beheren
cms.pages       // Pagina CRUD
cms.media       // Media uploaden en beheren
cms.analytics   // Analytics ophalen
cms.ai          // AI generatie en vertaling
cms.booking     // Boekingen
cms.reservation // Reserveringen
cms.shop        // Producten, bestellingen, coupons
cms.loyalty     // Loyaliteitspunten
cms.webhooks    // Webhook configuratie
cms.forms       // Formulier inzendingen
cms.push        // Push notificaties
cms.reviews     // Reviews
cms.recruitment // Vacatures
cms.batch       // Bulk operaties
cms.jobs        // Async job polling
cms.domains     // Domeinregistratie en -beheer
cms.mail        // Mailboxen en DNS records
cms.seo         // SEO configuratie en design tokens
cms.chatbot     // Chatbot configuratie

TypeScript types

Alle request en response types zijn volledig getypeerd en geëxporteerd:

import type {
  Site,
  SiteSummary,
  Page,
  PageDetail,
  PageSummary,
  CreatePageInput,
  UpdatePageInput,
  MediaItem,
  AnalyticsSummary,
  Product,
  Booking,
  OptimoCMSError,
  PaginatedResponse,
} from '@optimocms/sdk';

Try it — curl equivalent:

# De SDK verbergt deze details, maar dit is wat er onder de motorkap gebeurt
curl https://api.optimocms.com/v1/sites \
  -H "X-Api-Key: optimo_live_abc123def456"

Try it — MCP equivalent:

Gebruik de list_sites tool.

AI generatie met media

De cms.ai module ondersteunt AI-gegenereerde hero video's. Beschikbaar voor Professional en Agency plannen.

Pagina genereren met hero video

const result = await cms.ai.generatePage('site_abc123', {
  prompt: 'Landingspagina voor een bakkerij in Amsterdam',
  language: 'nl',
  style: 'minimalist',
  useHeroVideo: true,
  videoModelId: 'seedance-fast', // optioneel: seedance-fast | seedance-standard | kling-standard
});

console.log(result.jobId);
console.log(result.heroVideoGenerated); // true als video succesvol gegenereerd

Site genereren met hero video

const result = await cms.ai.generateSite({
  name: 'Bakkerij de Gouden Oven',
  prompt: 'Een moderne website voor een ambachtelijke bakkerij',
  language: 'nl',
  useHeroVideo: true,
  videoModelId: 'seedance-standard', // 2 credits, maximale kwaliteit
});

console.log(result.siteId);
console.log(result.heroVideoGenerated); // true als video succesvol gegenereerd
console.log(result.videoModel);         // 'seedance-standard'
console.log(result.videoCreditsUsed);   // 2

Beschikbare videomodellen

Model IDNaamCreditsBeschrijving
seedance-fastSnel1Snelle generatie, top-tier kwaliteit (standaard)
seedance-standardHoge kwaliteit2Maximale kwaliteit, langere generatietijd
kling-standardBudget1Goede kwaliteit, laagste kosten

Opmerking: Wanneer useHeroVideo niet wordt meegegeven of op false staat, wordt geen video gegenereerd. Het bestaande gedrag (stock foto's) blijft ongewijzigd. Bij lagere plannen (Free, Starter) wordt de parameter genegeerd. Zonder videoModelId wordt standaard seedance-fast gebruikt.

Domeinen

De cms.domains module biedt domeinregistratie, transfers en statuscontroles.

Domein beschikbaarheid checken

const result = await cms.domains.checkAvailability('bakkerij-amsterdam.nl');

console.log(result.available);    // true
console.log(result.priceCents);   // 999 (€9,99)
console.log(result.freeWithPlan); // true als gratis bij huidig plan

Domein registreren

const domain = await cms.domains.register({
  domain: 'bakkerij-amsterdam.nl',
  siteId: 'site_abc123',
  registrant: {
    firstName: 'Jan',
    lastName: 'de Vries',
    email: 'jan@voorbeeld.nl',
    phone: '+31612345678',
    address: 'Keizersgracht 1',
    city: 'Amsterdam',
    postalCode: '1015AA',
    country: 'NL',
  },
});

console.log(domain.status);      // 'registered'
console.log(domain.nameservers); // ['ns1.cloudflare.com', ...]

Domeinen ophalen

const domains = await cms.domains.list();

for await (const domain of domains) {
  console.log(domain.domain, domain.status, domain.expiresAt);
}

E-mail

De cms.mail module biedt mailboxbeheer en DNS-record informatie.

Mailbox aanmaken

const mailbox = await cms.mail.createMailbox('site_abc123', {
  localPart: 'info',
  displayName: 'Info Bakkerij',
});

console.log(mailbox.email);    // 'info@bakkerij-amsterdam.nl'
console.log(mailbox.password); // eenmalig wachtwoord — sla het veilig op!
console.log(mailbox.imapHost); // IMAP server
console.log(mailbox.smtpHost); // SMTP server

Mailboxen ophalen

const mailboxes = await cms.mail.list('site_abc123');

for await (const mb of mailboxes) {
  console.log(mb.email, mb.active, mb.storageMb);
}

DNS records ophalen

const records = await cms.mail.getDnsRecords('site_abc123');

for (const record of records) {
  console.log(record.type, record.name, record.value, record.status);
}

SEO & Design Tokens

De cms.seo module biedt tools om SEO-instellingen en design tokens bij te werken.

Site SEO bijwerken

await cms.seo.updateSiteSeo('site_abc123', {
  siteTitle: 'Bakkerij Amsterdam — Vers gebak elke dag',
  siteDescription: 'De lekkerste bakkerij van Amsterdam. Bestel online of kom langs.',
  ogImage: 'https://cdn.example.com/og-bakkerij.jpg',
  robotsDirective: 'index,follow',
});

Pagina SEO bijwerken

await cms.seo.updatePageSeo('site_abc123', 'page_xyz789', {
  title: 'Broodjes — Bakkerij Amsterdam',
  description: 'Ontdek ons assortiment verse broodjes.',
  canonicalUrl: 'https://bakkerij-amsterdam.nl/broodjes',
});

Design tokens bijwerken

await cms.seo.updateDesignTokens('site_abc123', {
  colorPrimary: '#ff6600',
  fontHeading: 'Inter',
  radiusCard: '16px',
});

Push Notificaties

await cms.push.sendCampaign('site_abc123', {
  title: 'Zomerkorting 20%!',
  body: 'Bestel vandaag en ontvang 20% korting op alles.',
  url: 'https://bakkerij-amsterdam.nl/aanbiedingen',
});

Webhooks

Webhook aanmaken

const webhook = await cms.webhooks.create('site_abc123', {
  url: 'https://mijn-crm.nl/hook',
  events: ['order.created', 'booking.created'],
  secret: 'mijn-geheim-token',
});

console.log(webhook.id);     // webhook ID
console.log(webhook.events); // ['order.created', 'booking.created']

Webhooks ophalen

const webhooks = await cms.webhooks.list('site_abc123');

for await (const wh of webhooks) {
  console.log(wh.id, wh.url, wh.events);
}

Chatbot

Chatbot configureren

await cms.chatbot.configure('site_abc123', {
  enabled: true,
  greeting: 'Hallo! Hoe kan ik je helpen?',
  primaryColor: '#2563eb',
  language: 'nl',
});

Chatbot configuratie ophalen

const config = await cms.chatbot.getConfig('site_abc123');

console.log(config.enabled);      // true
console.log(config.greeting);     // 'Hallo! Hoe kan ik je helpen?'
console.log(config.primaryColor); // '#2563eb'
console.log(config.language);     // 'nl'

Volgende stappen

On this page