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/sdkOf met yarn/pnpm:
yarn add @optimocms/sdk
pnpm add @optimocms/sdkVereisten
| Omgeving | Minimale versie |
|---|---|
| Node.js | 18.0+ |
| TypeScript | 5.0+ (optioneel, maar aanbevolen) |
| Browser | Elk 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,
});| Optie | Type | Standaard | Beschrijving |
|---|---|---|---|
apiKey | string | — | Verplicht. Je API key |
baseUrl | string | https://api.optimocms.com | API basis-URL |
timeout | number | 30000 | Request timeout in milliseconden |
maxRetries | number | 3 | Max 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 configuratieTypeScript 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 gegenereerdSite 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); // 2Beschikbare videomodellen
| Model ID | Naam | Credits | Beschrijving |
|---|---|---|---|
seedance-fast | Snel | 1 | Snelle generatie, top-tier kwaliteit (standaard) |
seedance-standard | Hoge kwaliteit | 2 | Maximale kwaliteit, langere generatietijd |
kling-standard | Budget | 1 | Goede kwaliteit, laagste kosten |
Opmerking: Wanneer
useHeroVideoniet wordt meegegeven of opfalsestaat, wordt geen video gegenereerd. Het bestaande gedrag (stock foto's) blijft ongewijzigd. Bij lagere plannen (Free, Starter) wordt de parameter genegeerd. ZondervideoModelIdwordt standaardseedance-fastgebruikt.
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 planDomein 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);
}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 serverMailboxen 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
- Foutafhandeling — Typed errors, retry strategie en 429 handling
- Paginering — Async iterators en cursor-based paginering
- Authenticatie — Scopes en rate limits
- API Referentie — Alle endpoints