Integriere Calentix-Funnels, Submissions, Leads und den headless Shop in deine Workflows — per REST API, WordPress-Plugin oder Automatisierungstools wie Zapier und Make.com.
Alle API-Requests erfordern einen gültigen API-Key im Authorization Header. API-Keys erstellst du unter Konto → API & Integrationen.
Shop Sync API (/api/v1/shop/*) nutzt denselben Bearer-Key. Die Booking API (/api/v1/booking/*) ist user-scoped — kein Site-Pairing nötig, ideal für Kalender-Verwaltung im WordPress-Plugin. Die Storefront API (/api/shop/{storeSlug}/*) ist für Browser-Requests gedacht und authentifiziert sich über site_key plus Origin-Check — kein API-Key im Frontend.
curl -X GET https://calentix.app/api/v1/funnels \ -H "Authorization: Bearer sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345"
Wichtig: Behandle deinen API-Key wie ein Passwort. Teile ihn niemals öffentlich und speichere ihn nicht in Client-Side Code.
https://calentix.app/api/v1
https://calentix.app/api/shop/{storeSlug}Die API erlaubt maximal 120 Requests pro Minute pro API-Key. Bei Überschreitung wird ein 429 Too Many Requests zurückgegeben.
Fehler werden als JSON mit einem error Objekt zurückgegeben.
{
"error": {
"message": "Invalid or missing API key",
"code": "unauthorized"
}
}invalid_bodyUngültiger Request BodyunauthorizedFehlender oder ungültiger API-KeyforbiddenOrigin nicht erlaubt (Storefront) oder kein Zugriffmodule_not_enabledShop-Modul nicht freigeschaltet (Sync + Storefront)not_foundRessource nicht gefundenrate_limitedRate Limit überschritteninternal_errorInterner ServerfehlerDie Booking API ermöglicht Kalender-Verwaltung und Terminarten-Einbindung über denselben sk_live_-Key wie Funnels und Shop. Im Gegensatz zum Shop ist sie user-scoped — der Key gehört zum Calentix-Konto, nicht zu einer WordPress-Site.
Modul-Gate
Alle Endpoints außer GET /booking/me erfordern das aktive Modul kalender_personal. Sonst 403 module_not_enabled.
Kalender verbinden
OAuth (Google, Microsoft, Zoom) über Connect-URL + Sync, oder CalDAV (iCloud, Nextcloud, Fastmail, Synology) über Discover + Save.
Terminarten einbetten
Terminarten werden im Calentix-Dashboard angelegt. Die API liefert booking_url für iframes oder den WordPress-Shortcode [calentix_booking slug="…"].
# Profil & Kalender (WordPress-Plugin) curl -X GET https://calentix.app/api/v1/booking/me \ -H "Authorization: Bearer sk_live_..." curl -X GET https://calentix.app/api/v1/booking/calendars \ -H "Authorization: Bearer sk_live_..."
Das Calentix Shop-Modul stellt drei Ebenen bereit: Katalog-Sync fürs WordPress-Backend, Echtzeit-Webhooks für CPT-Updates und eine headless Storefront für Warenkorb & Checkout im Browser.
Modul-Gate
Sync API: Alle Endpoints außer GET /shop/me erfordern das aktive Modul shop. Storefront API: alle Endpoints unter /api/shop/{storeSlug}/* prüfen dasselbe Modul am Store-Besitzer. Sonst 403 module_not_enabled.
1. Sync API — /api/v1/shop/*
Authentifizierung per API-Key. Produkte und Kategorien werden site-scoped geliefert — nur was in Calentix für diese WordPress-Site veröffentlicht ist. Pairing registriert neue Sites.
2. Shop Webhooks — Calentix → WordPress
HMAC-signierte POST-Requests an die beim Pairing hinterlegte webhook_url. Events wie shop.product.updated triggern CPT-Sync im Plugin.
3. Storefront API — /api/shop/{storeSlug}/*
Für Browser-Requests vom WordPress-Frontend. Erfordert ?site_key=... und einen erlaubten Origin (registrierte Domain). Checkout validiert Preise serverseitig und liefert Stripe/PayPal-Tokens zurück. Erfordert das aktive Modul shop am Store-Besitzer.
# Sync: Produkte für WordPress abrufen
curl -X GET "https://calentix.app/api/v1/shop/products?site_key=site_abc123" \
-H "Authorization: Bearer sk_live_..."
# Storefront: Checkout aus dem Browser (Origin-Header wird geprüft)
curl -X POST "https://calentix.app/api/shop/acme-shop/checkout?site_key=site_abc123" \
-H "Content-Type: application/json" \
-H "Origin: https://shop.example.com" \
-d '{"customerEmail":"kunde@beispiel.de","lineItems":[{"productId":"...","quantity":1}]}'/api/v1/funnelsGibt alle Funnels des authentifizierten Benutzers zurück, inklusive Submission-Count.
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Kontaktformular",
"slug": "kontaktformular",
"status": "published",
"description": "Unser Hauptformular",
"submission_count": 142,
"created_at": "2026-03-15T10:30:00.000Z",
"updated_at": "2026-03-28T14:22:00.000Z"
}
]
}/api/v1/funnels/{funnelId}Gibt einen einzelnen Funnel mit allen Seiten und Feldern zurück.
funnelIduuidPflichtDie ID des Funnels
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Kontaktformular",
"slug": "kontaktformular",
"status": "published",
"description": null,
"created_at": "2026-03-15T10:30:00.000Z",
"updated_at": "2026-03-28T14:22:00.000Z",
"pages": [
{
"id": "...",
"title": "Kontaktdaten",
"page_type": "form",
"page_order": 0,
"fields": [
{
"id": "...",
"label": "Name",
"field_type": "text",
"is_required": true,
"field_order": 0
},
{
"id": "...",
"label": "Email",
"field_type": "email",
"is_required": true,
"field_order": 1
}
]
}
]
}
}/api/v1/funnels/{funnelId}/submissionsGibt alle Submissions eines Funnels als paginierte Liste zurück. Antworten werden als flaches Key-Value-Objekt (Label → Wert) geliefert.
funnelIduuidPflichtDie ID des Funnels
limitintegerMaximale Anzahl (1–100, Default: 25)
offsetintegerOffset für Pagination (Default: 0)
sinceISO 8601Nur Submissions nach diesem Zeitpunkt
{
"data": [
{
"id": "...",
"funnel_id": "...",
"submitted_at": "2026-04-01T12:00:00.000Z",
"source": "funnel",
"source_label": null,
"answers": {
"Name": "Max Mustermann",
"Email": "max@beispiel.de",
"Telefon": "+49 170 1234567"
},
"metadata": {}
}
],
"pagination": {
"total": 142,
"limit": 25,
"offset": 0
}
}/api/v1/funnels/{funnelId}/submissions/{submissionId}Gibt eine einzelne Submission mit allen Antworten zurück.
funnelIduuidPflichtDie ID des Funnels
submissionIduuidPflichtDie ID der Submission
{
"data": {
"id": "...",
"funnel_id": "...",
"funnel_name": "Kontaktformular",
"submitted_at": "2026-04-01T12:00:00.000Z",
"source": "funnel",
"source_label": null,
"answers": {
"Name": "Max Mustermann",
"Email": "max@beispiel.de",
"Telefon": "+49 170 1234567"
},
"metadata": {}
}
}/api/v1/funnels/{funnelId}/leadsErstellt einen neuen Lead (Submission) im Funnel. Die Antworten werden als Key-Value-Objekt übergeben.
funnelIduuidPflichtDie ID des Funnels
answersobjectPflichtKey-Value-Objekt mit den Lead-Daten, z.B. {"Name": "Max", "Email": "max@beispiel.de"}
source_labelstringQuellen-Label, z.B. "Zapier Import" (Default: "API")
metadataobjectOptionale Metadaten
{
"answers": {
"Name": "Max Mustermann",
"Email": "max@beispiel.de",
"Telefon": "+49 170 1234567"
},
"source_label": "Zapier"
}{
"data": {
"id": "...",
"funnel_id": "...",
"funnel_name": "Kontaktformular",
"submitted_at": "2026-04-01T12:00:00.000Z",
"source": "api",
"source_label": "Zapier",
"answers": {
"Name": "Max Mustermann",
"Email": "max@beispiel.de",
"Telefon": "+49 170 1234567"
}
}
}/api/v1/webhooks/subscribeRegistriert eine Callback-URL, die bei jedem neuen Event (z.B. neue Submission) per POST benachrichtigt wird. Wird von Zapier und Make.com automatisch aufgerufen.
target_urlstring (URL)PflichtDie URL, an die Events gesendet werden
funnel_iduuidPflichtDie ID des Funnels
eventstringPflichtEvent-Typ. Aktuell verfügbar: "submission.created"
{
"target_url": "https://hooks.zapier.com/hooks/catch/123/abc",
"funnel_id": "550e8400-e29b-41d4-a716-446655440000",
"event": "submission.created"
}{
"data": {
"id": "...",
"funnel_id": "550e8400-e29b-41d4-a716-446655440000",
"target_url": "https://hooks.zapier.com/hooks/catch/123/abc",
"event": "submission.created"
}
}/api/v1/webhooks/unsubscribe/{subscriptionId}Entfernt eine Webhook-Subscription. Wird von Zapier und Make.com beim Deaktivieren eines Zaps/Szenarios automatisch aufgerufen.
subscriptionIduuidPflichtDie ID der Subscription
{
"data": {
"id": "...",
"deleted": true
}
}/api/v1/shop/meLiefert Modul-Status (`bridge_enabled`) und optional Store/Site-Metadaten. Erfordert nur API-Key — auch wenn das Shop-Modul noch nicht freigeschaltet ist. Optional `site_key` für Site-Infos.
site_keystringSite-Key nach Pairing — liefert dann Site-Metadaten mit
{
"data": {
"user_id": "...",
"modules": { "shop": true },
"bridge_enabled": true,
"store": { "id": "...", "slug": "acme-shop", "name": "Acme Shop" },
"site": { "id": "...", "site_key": "site_abc123", "domain": "https://shop.example.com" }
}
}/api/v1/shop/productsGibt alle für die verbundene WordPress-Site veröffentlichten Produkte zurück. Erfordert API-Key (Bearer) und `site_key` als Query-Parameter oder Header `X-Calentix-Site-Key`. Mit `updated_since` nur geänderte Produkte (Delta-Sync für Cron/Webhook-Fallback).
site_keystringPflichtÖffentlicher Site-Key nach dem Pairing (z. B. site_abc123)
updated_sinceISO 8601Nur Produkte mit updatedAt danach
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"slug": "mein-produkt",
"name": "Mein Produkt",
"description": "Kurzbeschreibung",
"descriptionHtml": "<p>Ausführliche Beschreibung</p>",
"coverImageUrl": "https://cdn.example.com/cover.jpg",
"gallery": [],
"priceCents": 4990,
"currency": "EUR",
"taxRateBps": 1900,
"categories": [
{ "id": "...", "slug": "zubehoer", "name": "Zubehör" }
],
"isActive": true,
"updatedAt": "2026-06-21T10:30:00.000Z",
"seoTitle": "Mein Produkt kaufen",
"seoDescription": "Meta-Beschreibung für Rank Math",
"focusKeyword": "mein produkt",
"siteIds": ["..."]
}
]
}/api/v1/shop/products/{productId}Liefert ein Produkt per UUID, sofern es auf der angegebenen Site veröffentlicht ist.
productIduuidPflichtProdukt-ID aus Calentix
site_keystringPflichtSite-Key der WordPress-Instanz
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440001",
"slug": "mein-produkt",
"name": "Mein Produkt",
"priceCents": 4990,
"currency": "EUR",
"siteIds": ["..."]
}
}/api/v1/shop/categoriesKategorien, die mindestens ein auf dieser Site publiziertes Produkt haben. Wird vom WordPress-Plugin für die Taxonomie-Synchronisation genutzt.
site_keystringPflichtSite-Key der verbundenen WordPress-Instanz
{
"data": [
{
"id": "...",
"slug": "zubehoer",
"name": "Zubehör",
"description": null,
"parentId": null,
"sortOrder": 0,
"isActive": true
}
]
}/api/v1/shop/storeKombinierte Metadaten von Shop-Store und verbundener Site — inkl. Store-Settings (Währung, Zahlungsmethoden).
site_keystringPflichtSite-Key aus dem Pairing
{
"data": {
"store": {
"id": "...",
"slug": "acme-shop",
"name": "Acme Shop",
"settings": { "currency": "EUR", "paypalEnabled": true }
},
"site": {
"id": "...",
"siteKey": "site_abc123",
"name": "Hauptshop",
"domain": "https://shop.example.com",
"lastSyncAt": "2026-06-21T09:00:00.000Z"
}
}
}/api/v1/shop/sites/meLeichtgewichtige Site-Infos nach Pairing — praktisch für Verbindungstests im WordPress-Plugin.
site_keystringPflichtSite-Key aus dem Pairing
{
"data": {
"id": "...",
"siteKey": "site_abc123",
"domain": "https://shop.example.com",
"store": { "slug": "acme-shop", "name": "Acme Shop" }
}
}/api/v1/shop/ordersBestellungen, die über diese WordPress-Site ausgelöst wurden (`channel=shop`). Nützlich für Backend-Statusanzeigen oder ERP-Anbindungen.
site_keystringPflichtSite-Key der WordPress-Instanz
{
"data": [
{
"id": "...",
"order_number": "SH-2026-00001",
"status": "paid",
"total_cents": 4990,
"subtotal_cents": 4990,
"discount_cents": 0,
"currency": "EUR",
"customer_email": "kunde@beispiel.de",
"customer_name": "Max Mustermann",
"coupon_code": null,
"payment_provider": "stripe",
"payment_method_brand": "visa",
"line_item_count": 1,
"paid_at": "2026-06-21T11:00:00.000Z",
"created_at": "2026-06-21T10:58:00.000Z"
}
]
}/api/v1/shop/orders/{orderId}Vollständige Bestellung inkl. Positionen, USt-Aufschlüsselung und Rechnungen/Belege mit signierten Download-URLs für das WordPress-Backend.
orderIduuidPflichtBestell-ID
site_keystringPflichtSite-Key der WordPress-Instanz
{
"data": {
"order": {
"id": "...",
"order_number": "SH-2026-00001",
"status": "paid",
"customer_name": "Max Mustermann",
"total_cents": 4990,
"currency": "EUR"
},
"store_name": "Acme Shop",
"invoices": [
{
"id": "...",
"number": "RG-ANY-2026-0054",
"kind": "invoice",
"subkind": "full",
"download_url": "https://..."
}
],
"tax_summary": {
"net_subtotal_cents": 4193,
"total_tax_cents": 797,
"gross_total_cents": 4990
}
}
}/api/v1/shop/sites/pairWird vom Calentix WordPress-Plugin aufgerufen. Registriert eine neue `shop_site` mit Pairing-Code aus dem Calentix-Dashboard (Shop → WordPress-Sites). Der `store_slug` muss mit dem konfigurierten Store übereinstimmen.
store_slugstringPflichtSlug des Shops aus Calentix → Shop → Einstellungen
pairing_codestringPflicht6-stelliger Code (gültig ca. 10 Minuten)
namestringPflichtAnzeigename der Site, z. B. "Hauptshop"
domainstring (URL)PflichtNormalisierte Site-URL — wird für CORS/Origin-Check verwendet
webhook_urlstring (URL)PflichtWordPress-Webhook-Endpoint für Produkt-Events
{
"store_slug": "acme-shop",
"pairing_code": "482913",
"name": "Hauptshop",
"domain": "https://shop.example.com",
"webhook_url": "https://shop.example.com/wp-json/calentix/v1/webhook"
}{
"data": {
"site_key": "site_abc123",
"site_id": "...",
"webhook_secret": "whsec_...",
"domain": "https://shop.example.com"
}
}/api/shop/{storeSlug}/productsÖffentliche Storefront-API für den Browser (WordPress-Frontend). Kein API-Key — stattdessen `site_key` und Origin-Check gegen die beim Pairing hinterlegte Domain. Erfordert das aktive Modul `shop` am Store-Besitzer. CORS-Header werden gesetzt.
storeSlugstringPflichtStore-Slug, z. B. acme-shop
site_keystringPflichtSite-Key der WordPress-Instanz
{
"data": [
{
"id": "...",
"slug": "mein-produkt",
"name": "Mein Produkt",
"priceCents": 4990,
"currency": "EUR"
}
]
}/api/shop/{storeSlug}/products/{productSlug}Einzelnes Produkt für Produktseiten im WordPress-Theme. Gleiche Auth-Regeln wie Storefront-Produktliste.
storeSlugstringPflichtStore-Slug
productSlugstringPflichtProdukt-Slug
site_keystringPflichtSite-Key
{
"data": {
"id": "...",
"slug": "mein-produkt",
"name": "Mein Produkt",
"priceCents": 4990,
"currency": "EUR",
"descriptionHtml": "<p>...</p>"
}
}/api/shop/{storeSlug}/categoriesKategorien für Filter/Navigation im WordPress-Frontend.
storeSlugstringPflichtStore-Slug
site_keystringPflichtSite-Key
{
"data": [
{ "id": "...", "slug": "zubehoer", "name": "Zubehör" }
]
}/api/shop/{storeSlug}/checkoutHeadless Checkout: Calentix validiert Preise serverseitig, legt eine Shop-Order an und gibt `clientSecret` für Stripe Elements zurück. Zahlung läuft über Stripe Connect des Store-Owners.
storeSlugstringPflichtStore-Slug
site_keystringPflichtSite-Key
customerEmailstringPflichtE-Mail des Käufers
customerNamestringName
lineItemsarrayPflichtArray aus { productId, quantity }
couponCodestringOptionaler Rabattcode
{
"customerEmail": "kunde@beispiel.de",
"customerName": "Max Mustermann",
"lineItems": [
{ "productId": "550e8400-e29b-41d4-a716-446655440001", "quantity": 1 }
],
"couponCode": "SOMMER20"
}{
"data": {
"orderId": "...",
"clientSecret": "pi_..._secret_...",
"stripeAccountId": "acct_...",
"publishableKey": "pk_live_...",
"amount": 4990,
"currency": "eur"
}
}/api/shop/{storeSlug}/validate-couponLive-Validierung eines Rabattcodes im Warenkorb, bevor der Checkout abgeschickt wird. Löst den Coupon nicht ein — das passiert atomar nach erfolgreicher Zahlung.
storeSlugstringPflichtStore-Slug
site_keystringPflichtSite-Key
codestringPflichtGutschein-Code
subtotalCentsintegerPflichtAktuelles Warenkorb-Subtotal in Cents
currencystringPflichtISO-Währung, z. B. EUR
lineItemsarrayPflichtCart-Items für Steuer-/Coupon-Berechnung
{
"code": "SOMMER20",
"subtotalCents": 4990,
"currency": "EUR",
"lineItems": [
{ "productId": "550e8400-e29b-41d4-a716-446655440001", "quantity": 1 }
]
}{
"data": {
"code": "SOMMER20",
"discountCents": 998,
"discountType": "percent",
"discountValue": 2000
}
}/api/shop/{storeSlug}/orders/{orderId}Status einer Bestellung nach Checkout — nur für Orders der eigenen Site (site_key + storeSlug).
storeSlugstringPflichtStore-Slug
orderIduuidPflichtOrder-ID aus Checkout-Response
site_keystringPflichtSite-Key
{
"data": {
"id": "...",
"orderNumber": "SH-2026-00001",
"status": "paid",
"totalCents": 4992,
"currency": "EUR",
"customerEmail": "kunde@beispiel.de"
}
}/api/shop/{storeSlug}/paypal/create-orderAlternative zu Stripe: legt Shop-Order an und erstellt eine PayPal-Order auf dem Konto des Store-Owners. Response enthält `paypalOrderId` für das PayPal JS SDK.
storeSlugstringPflichtStore-Slug
site_keystringPflichtSite-Key
customerEmailstringPflichtlineItemsarrayPflichtWarenkorb-Zeilen
couponCodestringOptionaler Code
{
"data": {
"orderId": "...",
"paypalOrderId": "5O190127TN364715T",
"totalCents": 4990,
"currency": "EUR"
}
}/api/shop/{storeSlug}/paypal/capture-orderWird nach PayPal-Approval im Browser aufgerufen. Captured die Zahlung und finalisiert die Calentix-Order (idempotent).
storeSlugstringPflichtStore-Slug
site_keystringPflichtSite-Key
orderIduuidCalentix-Order-ID (falls bekannt)
paypalOrderIdstringPflichtPayPal-Order-ID aus dem SDK
{
"orderId": "...",
"paypalOrderId": "5O190127TN364715T"
}{
"data": {
"orderId": "...",
"alreadyPaid": false
}
}/api/v1/booking/meLiefert Benutzername, Zeitzone, Buchungs-Subdomain und Modul-Status. Erfordert nur einen gültigen API-Key — auch wenn das Kalender-Modul noch nicht freigeschaltet ist (`bridge_enabled: false`). Alle anderen Booking-Endpoints verlangen `kalender_personal`.
{
"data": {
"user_id": "...",
"email": "max@beispiel.de",
"name": "Max Mustermann",
"username": "max",
"timezone": "Europe/Berlin",
"booking_subdomain": "book",
"modules": {
"calendar_personal": true,
"event_types": true,
"calendar_external_sync": true
},
"bridge_enabled": true
}
}/api/v1/booking/calendarsAlle verbundenen Kalender des API-Key-Inhabers (ohne interne Video-Provider). Enthält Sync-Gesundheit und Primary-Status.
{
"data": [
{
"id": "...",
"provider": "google-calendar",
"name": "max@gmail.com",
"is_primary": true,
"is_active": true,
"last_synced_at": "2026-06-21T10:00:00.000Z",
"health": "ok"
}
]
}/api/v1/booking/calendars/connectErzeugt eine Nango Connect-URL für Google Kalender, Microsoft Outlook oder Zoom. Nach Abschluss im Popup `POST /calendars/sync` aufrufen.
providerstringPflichtgoogle-calendar | microsoft-calendar | zoom
{ "provider": "google-calendar" }{
"data": {
"connect_url": "https://auth.calentix.app/oauth/connect/google-calendar?connect_session_token=...",
"connection_id": "...-google-calendar",
"provider": "google-calendar"
}
}/api/v1/booking/calendars/syncImportiert neue Nango-Verbindungen nach dem OAuth-Popup und startet initialen Kalender-Sync.
{
"data": {
"new_connections": 1
}
}/api/v1/booking/calendars/caldav/discoverValidiert CalDAV-Zugangsdaten und listet verfügbare Kalender. Provider: apple-calendar, fastmail, nextcloud, synology, caldav.
providerstringPflichtCalDAV-Provider-Key
usernamestringPflichtBenutzername oder Apple-ID
passwordstringPflichtPasswort oder App-Passwort
server_urlstringPflicht bei nextcloud, synology, caldav
{
"data": {
"server_url": "https://caldav.icloud.com",
"calendars": [
{ "url": "https://...", "display_name": "Privat", "ctag": "..." }
]
}
}/api/v1/booking/calendars/caldavVerbindet einen aus Discover gewählten CalDAV-Kalender dauerhaft.
providerstringPflichtCalDAV-Provider-Key
server_urlstringPflichtServer-URL aus Discover
usernamestringPflichtBenutzername
passwordstringPflichtPasswort
calendar_urlstringPflichtURL des gewählten Kalenders
calendar_namestringPflichtAnzeigename
{
"data": {
"id": "...",
"provider": "apple-calendar",
"name": "Privat",
"is_primary": true
}
}/api/v1/booking/calendars/{calendarId}Primary-Kalender setzen oder Kalender aktivieren/deaktivieren.
calendarIduuidPflichtKalender-ID
is_primarybooleanAls Primärkalender markieren
is_activebooleanAktiv/Inaktiv schalten
{ "is_primary": true }{ "data": { "updated": true } }/api/v1/booking/calendars/{calendarId}Entfernt Kalender-Verbindung inkl. Nango/Watch-Cleanup.
calendarIduuidPflichtKalender-ID
{ "data": { "deleted": true } }/api/v1/booking/event-typesAlle sichtbaren Terminarten mit Buchungs-URLs für WordPress-Embeds.
{
"data": [
{
"id": "...",
"slug": "beratung",
"title": "Beratungsgespräch",
"duration_minutes": 30,
"location_type": "video",
"is_active": true,
"booking_url": "https://book.calentix.app/max/beratung"
}
]
}/api/v1/booking/event-types/{slug}Terminart per Slug oder UUID — inkl. Puffer, Vorlauf und booking_url.
slugstringPflichtSlug oder UUID
{
"data": {
"id": "...",
"slug": "beratung",
"title": "Beratungsgespräch",
"duration_minutes": 30,
"booking_url": "https://book.calentix.app/max/beratung"
}
}Wenn du eine Webhook-Subscription registriert hast, sendet Calentix bei jedem neuen Event einen POST Request mit folgendem Payload an deine target_url:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"event": "submission.created",
"funnel_id": "...",
"funnel_name": "Kontaktformular",
"submitted_at": "2026-04-01T12:00:00.000Z",
"source": "funnel",
"answers": {
"Name": "Max Mustermann",
"Email": "max@beispiel.de"
},
"metadata": {}
}Timeout: 10 Sekunden. Stell sicher, dass dein Endpoint innerhalb dieser Zeit antwortet.
Retries: Aktuell kein automatisches Retry. Fehlgeschlagene Deliveries werden geloggt.
Content-Type: Alle Payloads werden als application/json gesendet.
Calentix sendet bei Katalog-Änderungen signierte POST-Requests an die Webhook-URL deiner WordPress-Site (beim Pairing hinterlegt). Das Plugin verarbeitet nur Events, deren siteIds die eigene Site enthalten.
shop.product.publishedshop.product.updatedshop.product.unpublishedshop.product.deletedshop.category.createdshop.category.updatedshop.category.deleted{
"event": "shop.product.updated",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440001",
"slug": "mein-produkt",
"name": "Mein Produkt",
"priceCents": 4990,
"currency": "EUR",
"updatedAt": "2026-06-21T10:30:00.000Z",
"siteIds": ["..."]
},
"siteIds": ["..."]
}Header: Calentix-Signature (HMAC-SHA256, Format t=...,v0=...), Calentix-Event, X-Calentix-Site-Key
Secret: Wird beim Pairing als webhook_secret zurückgegeben und im Plugin gespeichert.