Alles, was in Sales Engine steht, auch woanders.
Kontakte, Deals, Gespräche, Notizen, Wiedervorlagen und Dateien lesen und schreiben. Für Zapier, Make, n8n oder eigene Skripte. Ein Schlüssel, ein Header, JSON.
Zugang
Schlüssel unter Einstellungen → Zapier / API-Integration → Aktivieren. Jeder Aufruf schickt ihn als Header. Alles läuft mit den Rechten des Schlüssel-Inhabers.
GET https://api.sales-engine.com/api/se/zapier/me
x-api-key: DEIN-SCHLÜSSEL
→ { "eMail": "…", "userID": 63, "fullName": "…", "companyName": "…", "apiVersion": 2 }
Antworten sind JSON mit Feldnamen in camelCase, Datumsangaben nach ISO 8601. Unbekannte oder fremde Datensätze antworten mit 404, Eingabefehler mit 400 und einer Erklärung im Feld error.
Zapier
In Zapier die App Sales Engine wählen und beim Verbinden den Schlüssel eintragen. Danach stehen diese Bausteine bereit:
Trigger (sofort) Neuer Kontakt · Kontakt geändert · Kontakt gelöscht · Wiedervorlage gesetzt · Neuer Deal · Deal geändert · Deal hat Phase gewechselt · Deal gewonnen · Deal gelöscht · Neues Gespräch · Neue Notiz · Neue Datei · Selly: Kundendialog vollständig · Dokument abgelegt · Kunde hat sich gemeldet · Angaben gespeichert
Aktionen Kontakt finden · anlegen · ändern · finden oder anlegen · zuweisen · Deal anlegen · ändern · verschieben · finden · Gespräch eintragen · Notiz · Wiedervorlage · Datei in die Akte
Die Trigger kommen per Webhook in Sekunden. Für Make, n8n oder eigene Skripte gelten dieselben Endpunkte, siehe Sofort-Trigger.
Konto und Auswahllisten
| Aufruf | Liefert |
|---|---|
GET me | Konto des Schlüssels, Verbindungstest |
GET meta/funnels | Funnels mit Phasen: id, name, tabs[{id, name, index, color}] |
GET meta/funnels/{funnelId}/tabs | Phasen eines Funnels |
GET meta/users | Benutzer des Kontos |
GET meta/communication-methods | Kommunikationsarten (Telefon, WhatsApp, E-Mail, Termin …) |
GET meta/communication-goals | Gesprächsziele |
GET meta/communication-outcomes | Gesprächsergebnisse |
GET meta/fields | Eigene Kontaktfelder: fieldId, name, card, dataType |
Kontakte
| Aufruf | Beschreibung |
|---|---|
GET contacts | Liste, neueste zuerst. Parameter updatedSince, createdSince, page, pageSize (max. 100), orderBy=updated|created, includeCustomFields |
GET contact/{id} | Kontakt mit eigenen Feldern, Wiedervorlage, Zeitstempeln und url in die Web-App |
POST contact/find | { email, phone, firstName, lastName, companyName } → bis zu 10 Treffer |
POST contact | Anlegen. Pflicht: eines von firstName, lastName, email, companyName |
PUT contact/{id} | Ändern. Nur mitgeschickte Werte werden gesetzt |
POST contact/upsert | Finden oder anlegen. match: email (Standard), phone, name |
DELETE contact/{id} | Deaktivieren, nichts geht verloren |
POST contact/{id}/assign | { userId } – Kontakt einem Benutzer des Kontos übergeben |
GET contact/{id}/deals | Deals des Kontakts |
Felder
salutationId titleId firstName lastName secondName companyName birthday placeOfBirth street postalCode city country email mobile phonePrivate phoneWork fax website workAt bankName iban bic optIn note legalSubjectId reminderDate reminderNote customFields
Ausgabe zusätzlich id, displayName, reminderDue, createdAt, updatedAt, url. Unbekannte Namen in customFields legt die API als Textfeld auf der Karte „Zapier“ an.
POST /api/se/zapier/contact/upsert
{ "match": "email", "email": "max@example.com", "firstName": "Max", "lastName": "Mustermann",
"mobile": "+49 170 1234567",
"customFields": { "Quelle": "Website-Formular", "Kreditwunsch": "25.000" },
"reminderDate": "2026-09-10T09:00:00", "reminderNote": "Erstgespräch vereinbaren" }
→ { "id": 1882, "created": true, "message": "Contact created" }
Gespräche, Notizen, Wiedervorlagen, Dateien
| Aufruf | Beschreibung |
|---|---|
GET contact/{id}/communications | Gespräche des Kontakts, neueste zuerst |
POST contact/{id}/communication | { method|methodId, date, durationMinutes, note, reached, goalId, outcomeId, dealId }. method als Name („Telefon“, „WhatsApp“, „E-Mail“, „Termin“); ohne date gilt jetzt |
POST communication | Wie oben, Kontakt oder Deal im Body (contactId oder dealId) |
POST contact/{id}/note | { text } |
PUT contact/{id}/reminder | { date, note }; ohne date wird die Wiedervorlage gelöscht |
DELETE contact/{id}/reminder | Wiedervorlage löschen |
GET contact/{id}/files | Dateien in der Akte |
POST contact/{id}/file | { fileName, contentBase64 | url, description }, max. 25 MB, url öffentlich per HTTPS |
GET contact/{id}/files/{fileId}/download | Datei herunterladen, z. B. nach Google Drive sichern |
Deals
| Aufruf | Beschreibung |
|---|---|
GET deals | Liste, neueste zuerst. Parameter funnelId, funnelTabId, contactId, updatedSince, createdSince, page, pageSize, orderBy |
GET deal/{id} | Deal mit Funnel, Phase, Kontakt, Wiedervorlage, url |
POST deal/find | { name, contactId, funnelId } → bis zu 10 Treffer |
POST deal | { name, contactId, funnelTabId } oder funnelId für die erste Phase; optional note, completionDate, revenueAmount, reminderDate, reminderNote |
PUT deal/{id} | Ändern; ein gesetztes funnelTabId verschiebt in die Phase |
POST deal/{id}/move | { funnelTabId } |
GET deal/{id}/history | Phasenwechsel mit Zeitpunkt |
GET deal/{id}/communications | Gespräche zum Deal |
DELETE deal/{id} | Deaktivieren |
Trigger
Alle liefern die neuesten Einträge zuerst (limit, Standard 25, max. 100). Zapier merkt sich die id und löst nur für neue Ids aus. Bei „geändert“ ist die id aus Datensatz und Änderungszeit zusammengesetzt.
| Aufruf | Löst aus bei | Besonderheit |
|---|---|---|
triggers/new-contact | neuer Kontakt | |
triggers/updated-contact | geänderter Kontakt | { id, contact } |
triggers/new-deal?funnelId= | neuer Deal | optional nur ein Funnel |
triggers/updated-deal?funnelId= | geänderter Deal | { id, deal } |
triggers/deal-stage-changed?toFunnelTabId= | Phase gewechselt | optional nur eine Zielphase, enthält deal |
triggers/new-communication?methodId= | neues Gespräch | optional nur eine Art |
triggers/new-note | neue Notiz | mit contactId |
triggers/reminder-due | Wiedervorlage heute oder überfällig | id = Kontakt und Termin |
triggers/reminder-set | Wiedervorlage gesetzt oder geändert | id = Kontakt und Änderungszeit |
triggers/deal-won?funnelId= | Abschlussdatum gesetzt | { id, wonAt, deal } |
triggers/deal-deleted, triggers/contact-deleted | Datensatz deaktiviert | |
triggers/new-file | neue Datei in einer Akte | mit downloadPath |
triggers/selly-events?type= | Sellys Ereignisse (Kundendialog vollständig, Dokument abgelegt, Kunde gemeldet …) | { id, event, occurredAt, data } |
Idempotenz: Header Idempotency-Key bei POST contact, contact/upsert, deal, communication. Gleicher Schlüssel innerhalb von 24 Stunden liefert die gespeicherte Antwort statt einer zweiten Anlage.
Sofort-Trigger (Webhooks)
Statt zu fragen, lässt du dich benachrichtigen: Ereignis abonnieren, Ziel-URL angeben, fertig. Zapier macht das automatisch; Make, n8n und eigene Systeme nutzen dieselben Endpunkte.
| Aufruf | Beschreibung |
|---|---|
GET hooks/events | Alle Ereignisnamen |
POST hooks | { event, targetUrl } (https) → { id } |
GET hooks | Eigene Abonnements mit Zustellstatus |
DELETE hooks/{id} | Abbestellen. Antwortet dein Ziel mit 410, bestellen wir selbst ab. |
Ereignisse: contact.created contact.updated contact.deleted reminder.set deal.created deal.updated deal.stage_changed deal.won deal.deleted communication.created note.created file.created selly.dialog_started selly.dialog_completed selly.document_stored selly.fields_saved selly.token_used selly.contact_created selly.weekly_review
POST https://hooks.zapier.com/… (dein Ziel)
{ "event": "deal.stage_changed", "occurredAt": "2026-09-06T10:01:00Z",
"data": { "dealId": 22, "name": "Immobilienfinanzierung Lindner", "contactId": 1882,
"fromPhaseName": "Erstgespräch", "toPhaseName": "Qualifiziert", "url": "https://app.sales-engine.com/deals/all?dealId=22" } }
Zustellung mit drei Wiederholungen (10 s, 60 s, 5 min). Nutzlast data entspricht dem jeweiligen Objekt der API.
Fehler und Grenzen
401 Schlüssel fehlt, ist deaktiviert oder gehört zu einem gesperrten Benutzer. 400 Eingabe unvollständig, Text in error. 404 Datensatz unbekannt oder gehört jemand anderem. 500 unerwarteter Fehler, bitte mit Zeitpunkt an support@sales-engine.com.
Listen liefern höchstens 100 Einträge je Seite. Dateien bis 25 MB. Löschen setzt inaktiv. Der Schlüssel ist personengebunden und lässt sich jederzeit deaktivieren.
