Scanlead

ÖFFENTLICHE API V1

Verfügbar in Pro und Pro+

Verbinden Sie Scanlead mit Ihren Tools.

Lesen und erstellen Sie Leads aus Make, Zapier, CRM, ERP oder Skript.

In 3 Schritten starten

01

Erstellen Sie einen Schlüssel unter Einstellungen → API.

02

Senden Sie Ihren ersten curl-Aufruf mit Bearer.

03

Fügen Sie einen Webhook für neue Leads hinzu.

CRMlead verbinden

  1. 01In CRMlead → Einstellungen → Integrationen → Scanlead verbinden → Autorisieren.
  2. 02OAuth 2.0 mit PKCE teilt kein Geheimnis (Tarife Pro und Pro+).

Im Free-Tarif als CSV exportieren und anschließend in CRMlead importieren.

Für künftige Apps: GET /oauth/authorize und POST /oauth/token mit OAuth-2.0-Autorisierungscode und PKCE S256.

OAuth für Anwendungen

Registrieren Sie einen öffentlichen Client mit exakten Rücksprung-URLs und erlaubten Berechtigungen. Kein Client-Secret. Erzeugen Sie einen zufälligen code_verifier (43–128 Zeichen) und code_challenge = BASE64URL(SHA256(code_verifier)), ohne Padding. Der Code gilt 2 Minuten und nur einmal.

GET /oauth/authorize?response_type=code&client_id=crmlead&redirect_uri=<registered_uri>&scope=read&state=<random_state>&code_challenge=<S256_challenge>&code_challenge_method=S256

Tauschen Sie den Code per POST mit application/x-www-form-urlencoded aus. Die Antwort enthält access_token (API-v1-Schlüssel), token_type=Bearer, scope=read und workspace { id, name }. Schützen Sie den Token; unter Einstellungen → API kann er widerrufen werden. /oauth/token unterstützt kein CORS.

POST /oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&client_id=crmlead&code=<code>&redirect_uri=<registered_uri>&code_verifier=<original_verifier>

Für Zapier, Make oder eigene Skripte erstellen Sie stattdessen einen Schlüssel zum manuellen Einfügen unter Scanlead → Einstellungen → API.

Routen

Ereignislisten liefern { data: [...] }. Zum Erstellen eines Leads ist nur email erforderlich; alle anderen Felder sind optional. PATCH akzeptiert jede Auswahl, einschließlich event_id.

Das Feld status wird beim Erstellen und Aktualisieren akzeptiert. Zulässige Werte: hot, warm oder cold.

GET/me
curl https://scanlead.io/api/v1/me \
  -H "Authorization: Bearer slk_live_YOUR_KEY"
GET/events
curl https://scanlead.io/api/v1/events \
  -H "Authorization: Bearer slk_live_YOUR_KEY"
GET/events/{id}
curl https://scanlead.io/api/v1/events/{id} \
  -H "Authorization: Bearer slk_live_YOUR_KEY"
GET/leads?limit=50
curl https://scanlead.io/api/v1/leads?limit=50 \
  -H "Authorization: Bearer slk_live_YOUR_KEY"
GET/leads/{id}
curl https://scanlead.io/api/v1/leads/{id} \
  -H "Authorization: Bearer slk_live_YOUR_KEY"
POST/leads
curl https://scanlead.io/api/v1/leads \
  -H "Authorization: Bearer slk_live_YOUR_KEY" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"first_name":"Ada","last_name":"Lovelace","email":"ada@example.com","company":"Analytical Engines","tags":["vip"],"status":"hot"}'
PATCH/leads/{id}
curl https://scanlead.io/api/v1/leads/{id} \
  -H "Authorization: Bearer slk_live_YOUR_KEY" \
  -X PATCH \
  -H "Content-Type: application/json" \
  -d '{"notes":"Follow up next week","status":"warm"}'

Authentifizierung und Signaturen

Verwenden Sie Authorization: Bearer slk_live_…. Schlüssel haben den Umfang read oder read_write. Webhooks enthalten Scanlead-Signature: t=timestamp,v1=hex, berechnet als HMAC-SHA256(secret, timestamp.body).

Webhook-Signatur prüfen: Node.js

const crypto = require('node:crypto');
const expected = crypto.createHmac('sha256', secret).update(`${t}.${body}`).digest('hex');
if (expected !== signature) throw new Error('invalid signature');

Python

import hmac, hashlib
expected = hmac.new(secret.encode(), f'{t}.{body}'.encode(), hashlib.sha256).hexdigest()
assert hmac.compare_digest(expected, signature)

Limits

60 Anfragen pro Minute und Schlüssel. Lead-Listen akzeptieren 1–100 Einträge und verwenden einen undurchsichtigen Cursor.

Fehlercodes

  • 401 invalid_api_key: Schlüssel fehlt, ist unbekannt oder widerrufen
  • 403 insufficient_scope: ein read-Schlüssel wurde zum Schreiben verwendet
  • 404 not_found: die Ressource gehört zu einem anderen Workspace
  • 429 rate_limited: nach dem Retry-After-Header erneut versuchen
  • 400 unknown_fields: nicht unterstützte Feldnamen stehen in error.fields. Beispiel: { error: { code: "unknown_fields", fields: ["full_name"] } }.
  • 402 plan_required: Pro- oder Pro+-Abo erforderlich
OpenAPI-3.1-Schema ansehen →