TypeScript SDK-Referenz
Das offizielle TypeScript-SDK für die SubscribeFlow API. Synchrone Client-Initialisierung, volle Typsicherheit.
Installation
Oder mit bun:
Client-Initialisierung
import { SubscribeFlowClient } from '@subscribeflow/sdk';
const client = new SubscribeFlowClient({
apiKey: process.env.SUBSCRIBEFLOW_API_KEY!,
baseUrl: 'https://api.subscribeflow.net', // Standard
});
Ressourcen
subscribers
create(params)
Neuen Subscriber erstellen.
const subscriber = await client.subscribers.create({
email: 'alice@example.com',
tags: ['newsletter'],
metadata: { source: 'website' },
});
get(subscriberId)
Subscriber per ID abrufen.
getByEmail(email)
Subscriber per E-Mail-Adresse abrufen.
list(params?)
Subscriber mit Cursor-basierter Pagination auflisten.
update(subscriberId, params)
Subscriber-Felder aktualisieren.
const updated = await client.subscribers.update('subscriber-id', {
metadata: { plan: 'professional' },
});
delete(subscriberId)
Subscriber und alle zugehörigen Daten dauerhaft löschen.
addTags(subscriberId, params)
Tags zu einem Subscriber hinzufügen.
removeTag(subscriberId, tagSlug)
Einzelnen Tag von einem Subscriber entfernen.
generatePreferenceToken(subscriberId)
Preference-Center-Token generieren.
const tokenResponse = await client.subscribers.generatePreferenceToken(
'subscriber-id',
);
console.log(tokenResponse.token);
tags
create(params)
Neuen Tag erstellen.
const tag = await client.tags.create({
name: 'Product Updates',
description: 'Neue Features und Verbesserungen',
category: 'product',
is_public: true,
});
get(tagId)
Tag per ID abrufen.
getByName(name)
Tag per Name abrufen.
list(params?)
Alle Tags auflisten, optional nach Kategorie filtern.
update(tagId, params)
Tag-Felder aktualisieren.
delete(tagId)
Tag löschen und alle Subscriber-Zuordnungen entfernen.
templates
create(params)
E-Mail-Template erstellen.
const template = await client.templates.create({
name: 'Welcome Email',
subject: 'Willkommen bei {{company}}!',
mjml_content: '<mjml><mj-body>...</mj-body></mjml>',
category: 'transactional',
});
get(templateId)
Template per ID abrufen.
getBySlug(slug)
Template per Slug abrufen.
list(params?)
Templates auflisten, optional nach Kategorie filtern.
update(templateId, params)
Template-Felder aktualisieren.
delete(templateId)
Template löschen.
preview(templateId, variables?)
Template mit Variablen rendern und HTML-Ausgabe zurückgeben.
const preview = await client.templates.preview('template-id', {
company: 'Acme Inc',
});
console.log(preview.html);
campaigns
create(params)
Campaign-Entwurf erstellen.
const campaign = await client.campaigns.create({
name: 'Maerz-Newsletter',
template_id: 'template-uuid',
tag_filter: { include_tags: ['newsletter'], match: 'any' },
});
get(campaignId)
Campaign per ID abrufen.
list(params?)
Campaigns auflisten, optional nach Status filtern.
update(campaignId, params)
Campaign-Felder aktualisieren.
send(campaignId)
Campaign an alle passenden Subscriber senden.
const result = await client.campaigns.send('campaign-id');
console.log(`Versand an ${result.total_recipients} Empfaenger`);
cancel(campaignId)
Laufende Campaign abbrechen.
duplicate(campaignId)
Campaign als neuen Entwurf duplizieren.
retry(campaignId)
Fehlgeschlagene Campaign erneut versuchen.
countRecipients(campaignId)
Vorschau der Empfängeranzahl für den Tag-Filter der Campaign.
const count = await client.campaigns.countRecipients('campaign-id');
console.log(`${count.count} Subscriber`);
emails
send(params)
Transaktionale E-Mail an einen einzelnen Empfänger senden.
const result = await client.emails.send({
template_slug: 'welcome-email',
to: 'alice@example.com',
variables: { company: 'Acme Inc' },
idempotency_key: 'welcome-alice-2024',
});
webhooks
create(params)
Webhook-Endpoint erstellen. Gibt das Signing Secret zurück.
const webhook = await client.webhooks.create({
url: 'https://your-app.com/webhooks/subscribeflow',
events: ['subscriber.created', 'tag.subscribed'],
});
console.log('Secret:', webhook.signing_secret);
get(webhookId)
Webhook per ID abrufen.
list()
Alle Webhook-Endpoints auflisten.
update(webhookId, params)
Webhook-Felder aktualisieren.
delete(webhookId)
Webhook-Endpoint löschen.
test(webhookId, eventType?)
Testereignis an einen Webhook-Endpoint senden.
const result = await client.webhooks.test('webhook-id', 'subscriber.created');
console.log('Erfolgreich:', result.success);
listDeliveries(webhookId)
Zustellungsverlauf eines Webhooks auflisten.
retryDelivery(webhookId, deliveryId)
Fehlgeschlagene Zustellung wiederholen.
getDeliveryStats(webhookId)
Zustellungsstatistiken eines Webhooks abrufen.
const stats = await client.webhooks.getDeliveryStats('webhook-id');
console.log(`Erfolgsrate: ${stats.success_rate}%`);
rotateSecret(webhookId)
Signing Secret rotieren.
const rotated = await client.webhooks.rotateSecret('webhook-id');
console.log('Neues Secret:', rotated.signing_secret);
triggers
create(params)
Ereignisbasierten E-Mail-Trigger erstellen.
const trigger = await client.triggers.create({
event_type: 'subscriber.created',
template_id: 'welcome-template-uuid',
description: 'Willkommens-E-Mail bei Registrierung senden',
});
get(triggerId)
Trigger per ID abrufen.
list()
Alle Triggers auflisten.
update(triggerId, params)
Trigger-Felder aktualisieren.
delete(triggerId)
Trigger löschen.
billing
getSubscription()
Aktuelles Billing-Abonnement abrufen.
createCheckoutSession(plan)
Stripe-Checkout-Session für Plan-Upgrade erstellen.
const session = await client.billing.createCheckoutSession('starter');
console.log('Checkout-URL:', session.url);
createPortalSession()
Stripe-Billing-Portal-Session erstellen.
const session = await client.billing.createPortalSession();
console.log('Portal-URL:', session.url);
syncSubscription()
Abonnement-Status mit Stripe synchronisieren.
preferenceCenter
Preference-Center-Operationen mit einem Subscriber-Token ausführen.
getInfo()
Präferenzen und verfügbare Tags des Subscribers abrufen.
subscribeTag(tagId)
Tag abonnieren.
unsubscribeTag(tagId)
Tag abbestellen.
exportData()
Alle Subscriber-Daten als JSON exportieren (DSGVO Art. 20).
deleteAccount()
Subscriber-Konto dauerhaft löschen (DSGVO Art. 17).
TypeScript-Typen
Das SDK bietet vollständige Typdefinitionen. Sie können Component-Schemas direkt importieren:
import type { paths, components } from '@subscribeflow/sdk';
type Subscriber = components['schemas']['SubscriberResponse'];
type Tag = components['schemas']['TagResponse'];
type Campaign = components['schemas']['CampaignResponse'];
const subscriber: Subscriber = await client.subscribers.get('id');
Fehlerbehandlung
Alle Fehler erweitern SubscribeFlowError:
import { SubscribeFlowError } from '@subscribeflow/sdk';
try {
await client.subscribers.get('non-existent-id');
} catch (error) {
if (error instanceof SubscribeFlowError) {
console.error('Status:', error.status); // HTTP-Statuscode
console.error('Typ:', error.type); // Fehlertyp-Kennung
console.error('Detail:', error.detail); // Menschenlesbare Nachricht
}
}
Spezifische Fehlertypen per Statuscode prüfen:
try {
await client.subscribers.create({ email: 'alice@example.com' });
} catch (error) {
if (error instanceof SubscribeFlowError) {
switch (error.status) {
case 401:
console.error('Ungueltiger API-Key');
break;
case 402:
console.error('Plan-Limit überschritten:', error.detail);
break;
case 404:
console.error('Nicht gefunden');
break;
case 422:
console.error('Validierung fehlgeschlagen:', error.detail);
break;
case 429:
console.error('Rate Limit überschritten');
break;
default:
console.error('API-Fehler:', error.detail);
}
}
}