API & Webhooks
Renvory bietet jedem Plan eine offene REST-API und signierte Webhooks - ohne Enterprise-Aufpreis. API-Keys und Webhook-URLs verwaltest du unter Einstellungen › API & Webhooks.
Authentifizierung
Erstelle einen API-Key in Renvory unter Einstellungen › API & Webhooks. Der Key wird nur einmal im Klartext angezeigt - Renvory speichert ausschließlich einen Hash davon. Sende ihn bei jeder Anfrage als Bearer-Token:
Authorization: Bearer rnv_live_...Ein API-Key ist immer an genau einen Tenant gebunden - Anfragen liefern ausschließlich Daten deiner eigenen Organisation.
Buchungen abrufen
GET/api/v1/bookings
Liefert die Buchungen deiner Organisation, neueste zuerst.
Query-Parameter
| Parameter | Beschreibung |
|---|---|
limit | Anzahl der Ergebnisse, 1–200 (Standard: 50) |
Beispiel
curl "https://renvory.de/api/v1/bookings?limit=20" \
-H "Authorization: Bearer rnv_live_..."Antwort
{
"data": [
{
"id": "booking-...",
"reference": "RV-20260115-A1B2C3",
"customerName": "Anna Keller",
"customerEmail": "anna@example.com",
"productId": "product-...",
"productName": "Alpenloft Panorama",
"startAt": "2026-02-01T15:00:00.000Z",
"endAt": "2026-02-04T11:00:00.000Z",
"status": "confirmed",
"paymentStatus": "unpaid",
"quantity": 1,
"totalCents": 56700,
"source": "Booking Page",
"createdAt": "2026-01-15T09:12:00.000Z"
}
]
}Webhooks
Lege eine HTTPS-URL unter Einstellungen › API & Webhooks an und wähle, welche Events sie erhalten soll. Renvory sendet bei jedem passenden Ereignis eine signiertePOST-Anfrage mit JSON-Body an deine URL. Die Zustellung ist „best effort": eine nicht erreichbare Webhook-URL blockiert oder verzögert nie die eigentliche Aktion in Renvory (z. B. das Anlegen einer Buchung).
Verfügbare Events
| Event | Ausgelöst wenn … |
|---|---|
booking.created | eine neue Buchung angelegt wurde (Dashboard oder öffentliches Buchungs-Widget) |
booking.status_changed | sich der Status einer Buchung ändert (z. B. bestätigt, storniert, abgeschlossen) |
Payload
{
"event": "booking.created",
"createdAt": "2026-01-15T09:12:00.000Z",
"data": { /* Buchungsobjekt, gleiche Felder wie bei GET /api/v1/bookings */ }
}Header
| Header | Beschreibung |
|---|---|
X-Renvory-Event | Event-Name, z. B. booking.created |
X-Renvory-Signature | sha256=<hex> - HMAC-SHA256 über den rohen Request-Body, signiert mit deinem Webhook-Secret |
Signatur prüfen (Node.js)
import { createHmac, timingSafeEqual } from "node:crypto";
function isValidSignature(rawBody, signatureHeader, secret) {
const expected = "sha256=" + createHmac("sha256", secret).update(rawBody).digest("hex");
const a = Buffer.from(expected);
const b = Buffer.from(signatureHeader ?? "");
return a.length === b.length && timingSafeEqual(a, b);
}Das Webhook-Secret (whsec_...) wird dir beim Anlegen des Webhooks angezeigt. Anders als der API-Key (der nur als Hash gespeichert wird) speichert Renvory das Secret im Klartext, weil es bei jeder Zustellung erneut zum Signieren benötigt wird - die Oberfläche zeigt es danach aber nicht mehr an, nur beim Anlegen ist es sichtbar.
Fehlerformat
Fehlerhafte Anfragen liefern einen passenden HTTP-Status sowie einen JSON-Body:
{ "error": "Ungültiger API-Key." }