renvory°
Renvory · Entwickler

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

ParameterBeschreibung
limitAnzahl 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

EventAusgelöst wenn …
booking.createdeine neue Buchung angelegt wurde (Dashboard oder öffentliches Buchungs-Widget)
booking.status_changedsich 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

HeaderBeschreibung
X-Renvory-EventEvent-Name, z. B. booking.created
X-Renvory-Signaturesha256=<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." }