SnapShotBox API
REST-API v1 für Integrationen mit externen Tools.
Authentifizierung
Alle Endpoints erwarten einen API-Key als X-API-Key Header oder als Bearer-Token.
X-API-Key: ssb_<prefix>_<secret>
API-Keys werden im Admin-Bereich erstellt. Rate-Limit: 1000 Anfragen pro Stunde (konfigurierbar pro Key).
Base URL
https://pqgajztsmyaylotjojfr.supabase.co/functions/v1/public-api
Endpoints
/leadsscope: readAlle Leads (limit, max 200)
/leadsscope: writeNeuen Lead erstellen
{ "contact_email": "max@example.com", "contact_name": "Max", "event_type": "Hochzeit", "event_date": "2026-08-15" }/leads/{id}scope: readEinzelnen Lead abrufen
/leads/{id}/statusscope: writeLead-Status ändern
{ "status": "qualified" }/bookingsscope: readAlle Buchungen
/bookings/{id}scope: readEinzelne Buchung
/bookingsscope: writeNeue Buchung
{ "event_date": "2026-08-15T16:00:00Z", "account_id": "uuid", "title": "Hochzeit" }/bookings/availability?date=2026-08-15scope: readVerfügbarkeit prüfen
/contactsscope: readAlle Kunden
/contactsscope: writeNeuen Kunden anlegen
{ "display_name": "Max Mustermann", "contact_email": "max@example.com" }Beispiel-Code
JavaScript / Node.js
const res = await fetch("https://pqgajztsmyaylotjojfr.supabase.co/functions/v1/public-api/leads", {
headers: { "X-API-Key": "ssb_xxxx_xxxxxxx" }
});
const { data } = await res.json();Python
import requests
r = requests.get("https://pqgajztsmyaylotjojfr.supabase.co/functions/v1/public-api/leads",
headers={"X-API-Key": "ssb_xxxx_xxxxxxx"})
print(r.json())PHP
<?php
$ch = curl_init("https://pqgajztsmyaylotjojfr.supabase.co/functions/v1/public-api/leads");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: ssb_xxxx_xxxxxxx"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($ch);Webhooks
Webhooks senden ein POST an deine URL, sobald ein Event ausgelöst wird. Die Auslieferung wird per HMAC-SHA256 signiert:
X-SnapShotBox-Event: on_lead_created X-SnapShotBox-Signature: sha256=<hex>
Die Signatur prüfst du gegen dein Webhook-Secret und den rohen Body:
// Node.js
const sig = crypto.createHmac("sha256", SECRET).update(rawBody).digest("hex");
if (sig !== req.headers["x-snapshotbox-signature"].replace("sha256=", "")) {
return res.status(401).end();
}Verfügbare Events
on_lead_created; Neuer Lead eingegangenon_booking_confirmed; Buchung bestätigton_payment_received; Zahlung eingegangenon_contract_signed; Vertrag unterzeichneton_event_completed; Event abgeschlossen
Retry-Strategie: bei Fehler werden 5 Versuche mit exponentiellem Backoff unternommen (1 min, 5 min, 30 min, 2 h, 12 h), danach landet die Auslieferung im Dead-Letter-Queue.
Fehler-Codes
200OK ·201Created400Bad Request; ungültige Parameter401Unauthorized; API-Key fehlt oder ungültig403Forbidden; fehlender Scope404Not Found429Rate Limit überschritten500Server Error