REST-API · v1

LeadCheck API

Lese-Zugriff auf deine Leads via Bearer-Token-Authentifizierung. Ideal für eigene CRM-Anbindungen, Reporting-Tools oder No-Code-Workflows mit Make, Zapier, n8n.

🚀 Quickstart

  1. Im Dashboard öffnen: Einstellungen → REST-API
  2. Klick auf + Neuer Key, beschreibendes Label vergeben
  3. Den ausgegebenen Key (lck_live_…) sofort kopieren — wird nur einmal angezeigt
  4. Im Code als Authorization: Bearer lck_live_… mitgeben

🔑 Authentifizierung

Alle Requests benötigen einen Authorization-Header:

HTTP
Authorization: Bearer lck_live_xxxxxxxxxxxxxxxxxxxx

Der Key ist an einen Tenant gebunden. Bei kompromittiertem Key → im Dashboard widerrufen.

📥 GET /api/v1/leads

Liefert eine paginierte Liste der Leads des Tenants, neueste zuerst.

Query-Parameter

limit1–200default 50
offset≥ 0Pagination, default 0
statusneu | kontaktiert | angebot | gewonnen | verlorenFilter
ampelheiss | mittel | infoFilter nach KI-Bewertung
sinceISO-Datum (z.B. 2026-05-01)Nur Leads ab Zeitpunkt

Beispiele

cURL

bash
curl -H "Authorization: Bearer lck_live_DEIN_KEY" \
  "https://leadcheck.packomedia.de/api/v1/leads?limit=20&ampel=heiss"

Node.js

js
const res = await fetch("https://leadcheck.packomedia.de/api/v1/leads?limit=20", {
  headers: { Authorization: "Bearer lck_live_DEIN_KEY" },
});
const { leads, total } = await res.json();
console.log(`${total} Leads insgesamt`);

Python

py
import requests

res = requests.get(
    "https://leadcheck.packomedia.de/api/v1/leads",
    headers={"Authorization": "Bearer lck_live_DEIN_KEY"},
    params={"limit": 20, "ampel": "heiss"},
)
data = res.json()
print(f"{data['total']} Leads")

Antwort (200)

json
{
  "leads": [
    {
      "id":                       "uuid",
      "timestamp":                "2026-05-14T10:30:00Z",
      "name":                     "Max Mustermann",
      "email":                    "max@example.com",
      "telefon":                  "+49 170 1234567",
      "plz":                      "10115",
      "ort":                      "Berlin",
      "score":                    85,
      "ampel":                    "heiss",
      "status":                   "neu",
      "geschaetzterauftragswert": 12500,
      "kundenzusammenfassung":    "…",
      "naechsterschritt":         "…",
      "tags":                     ["vor-Ort-Termin"],
      "utmsource":                "google",
      "utmmedium":                "cpc",
      "utmcampaign":              "winter-2026"
    }
  ],
  "total":  142,
  "limit":  20,
  "offset": 0
}

GET /api/v1/summary

Liefert ausschließlich Kennzahlen für den Betrieb des API-Zugangs, mit dem Leserecht leads.read. Es werden keine Namen, Kontaktdaten oder Nachrichten der Interessenten zurückgegeben. Es gibt keine Query-Parameter zur Auswahl eines anderen Betriebs.

metrics.receivedAnfragen, die in den letzten 30 Tagen eingegangen sind
metrics.won_from_receivedDavon aktuell als gewonnen markiert; kein Zahlungseingang
metrics.open_totalAlle offenen Anfragen mit Status neu, kontaktiert oder angebot, unabhängig vom Eingang
metrics.unconfirmed_openOffene Anfragen ohne bestätigten Kontakt; keine Aussage über Kontakte außerhalb des Systems
metrics.average_response_minutesDurchschnitt vom Eingang bis zur ersten manuellen Kontaktbestätigung für neue Anfragen; null ohne Messwerte
metrics.response_sampleAnzahl der Kontaktbestätigungen in dieser Stichprobe
metrics.win_rate_percentAnteil gewonnener neuer Anfragen in Prozent; null bei keiner neuen Anfrage
tenantID, Betriebskennung und Name des zugehörigen Betriebs
period / fetched_atZeitraum und Abrufzeitpunkt als ISO-Datum
bash
curl -H "Authorization: Bearer lck_live_DEIN_KEY" "https://leadcheck.packomedia.de/api/v1/summary"

Kontaktbestätigungen werden im Anfrage-Detail unter Kontakt ausdrücklich nach einer gesendeten Antwort oder einem geführten Gespräch erfasst. Öffnen von Telefon, E-Mail oder WhatsApp zählt nicht. Der erste bestätigte Zeitpunkt bleibt bestehen; alte Kontaktaktionen werden nicht rückwirkend als Antworten gewertet.

Antworten werden nicht zwischengespeichert. Bei nicht verfügbaren Kennzahlen antwortet der Endpunkt mit 503 statt mit Nullwerten. Nicht aktive Betriebe erhalten 403. Es gelten 60 Abrufe pro Minute pro API-Zugang.

🪝 Webhooks (Push statt Pull)

Alternativ kannst du im Dashboard eine Webhook-URL hinterlegen. Bei jedem neuen Lead wird ein POST mit folgendem JSON-Payload an die URL gesendet:

json
{
  "event":     "lead.created",
  "tenant":    { "id": "uuid", "slug": "musterbau" },
  "lead": {
    "id":                       "uuid",
    "name":                     "Max Mustermann",
    "email":                    "max@example.com",
    "telefon":                  "+49 170 1234567",
    "plz":                      "10115",
    "ort":                      "Berlin",
    "score":                    85,
    "ampel":                    "heiss",
    "kundenzusammenfassung":    "…",
    "einsparpotenzial":         "…",
    "geschaetzterAuftragswert": 12500,
    "naechsterSchritt":         "…",
    "industry":                 "energie",
    "utm":                      { "source": "google", "medium": "cpc", "campaign": "winter-2026" }
  },
  "timestamp": "2026-05-14T10:30:00Z"
}

Retry-Verhalten: 3 Versuche mit Backoff bei 5xx oder Netzwerkfehler. 4xx-Antworten werden nicht erneut versucht. Status sichtbar unter Einstellungen → Webhook.

⚠️ Fehler-Codes

401Bearer-Token fehlt oder ungültig
403Key hat keinen leads.read-Scope
429Rate-Limit (60 Requests/Minute pro Key)
500Datenbank-/Serverfehler

⏱️ Rate-Limits

  • 60 Requests / Minute pro API-Key
  • Bei Überschreitung: HTTP 429 — eine Minute warten
  • Keine harten Tages-/Monats-Limits

📅 Versionierung

Die API ist als v1 gekennzeichnet. Breaking Changes erscheinen unter neuer Version (/api/v2/…). Bestehende Versionen bleiben mindestens 12 Monate aktiv.

Fragen? Probleme? Schreib uns an info@packomedia.de.