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
- Im Dashboard öffnen: Einstellungen → REST-API
- Klick auf + Neuer Key, beschreibendes Label vergeben
- Den ausgegebenen Key (
lck_live_…) sofort kopieren — wird nur einmal angezeigt - Im Code als
Authorization: Bearer lck_live_…mitgeben
🔑 Authentifizierung
Alle Requests benötigen einen Authorization-Header:
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
| limit | 1–200 | default 50 |
| offset | ≥ 0 | Pagination, default 0 |
| status | neu | kontaktiert | angebot | gewonnen | verloren | Filter |
| ampel | heiss | mittel | info | Filter nach KI-Bewertung |
| since | ISO-Datum (z.B. 2026-05-01) | Nur Leads ab Zeitpunkt |
Beispiele
cURL
curl -H "Authorization: Bearer lck_live_DEIN_KEY" \ "https://leadcheck.packomedia.de/api/v1/leads?limit=20&el=heiss"
Node.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
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)
{
"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.received | Anfragen, die in den letzten 30 Tagen eingegangen sind |
| metrics.won_from_received | Davon aktuell als gewonnen markiert; kein Zahlungseingang |
| metrics.open_total | Alle offenen Anfragen mit Status neu, kontaktiert oder angebot, unabhängig vom Eingang |
| metrics.unconfirmed_open | Offene Anfragen ohne bestätigten Kontakt; keine Aussage über Kontakte außerhalb des Systems |
| metrics.average_response_minutes | Durchschnitt vom Eingang bis zur ersten manuellen Kontaktbestätigung für neue Anfragen; null ohne Messwerte |
| metrics.response_sample | Anzahl der Kontaktbestätigungen in dieser Stichprobe |
| metrics.win_rate_percent | Anteil gewonnener neuer Anfragen in Prozent; null bei keiner neuen Anfrage |
| tenant | ID, Betriebskennung und Name des zugehörigen Betriebs |
| period / fetched_at | Zeitraum und Abrufzeitpunkt als ISO-Datum |
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:
{
"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
| 401 | Bearer-Token fehlt oder ungültig |
| 403 | Key hat keinen leads.read-Scope |
| 429 | Rate-Limit (60 Requests/Minute pro Key) |
| 500 | Datenbank-/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.