FEAVI SOAP API
Vollständige SOAP-Schnittstelle für FEAVI CRM. Anfragen und Antworten sind reines XML — kompatibel mit allen SOAP-Clients, SoapUI, Postman, Zapier, Python (zeep), PHP, Java, .NET und mehr.
Endpoint
https://feavi.com/api/soap/service.phpWSDL
https://feavi.com/api/soap/service.php?wsdlProtokoll
SOAP 1.1 / HTTP POST
Auch als REST verfügbar: Wenn du lieber JSON magst, gibt es parallel die REST API unter
/api/v1/. Beide teilen sich die gleichen Daten und API-Keys.
Setup
Schritt 1 — Migration (falls noch nicht gemacht)
https://feavi.com/migrate_api_keys.php
Schritt 2 — API-Key erstellen
Über die REST API einen Key generieren (oder direkt in der DB, wie in der REST-Doku beschrieben):
curl -X POST "https://feavi.com/api/v1/keys" \ -H "X-API-Key: feavi_DEIN_BOOTSTRAP_KEY" \ -H "Content-Type: application/json" \ -d '{"name": "SOAP Client"}'
Schritt 3 — WSDL laden und testen
Öffne die WSDL-URL in SoapUI oder importiere sie in deinen SOAP-Client:
https://feavi.com/api/soap/service.php?wsdl
Authentifizierung
Der API-Key wird als SOAP-Header mitgeschickt. Dieser Header muss in jeder Anfrage enthalten sein.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="urn:feavi"> <soapenv:Header> <tns:FeaviAuth> <tns:ApiKey>feavi_dein_api_key_hier</tns:ApiKey> </tns:FeaviAuth> </soapenv:Header> <soapenv:Body> <!-- Operation hier --> </soapenv:Body> </soapenv:Envelope>
Ohne gültigen Key gibt der Server einen SOAP-Fault zurück (
Client.Auth).XML-Aufbau
Anfrage-Struktur
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="urn:feavi"> <soapenv:Header> <tns:FeaviAuth><tns:ApiKey>feavi_...</tns:ApiKey></tns:FeaviAuth> </soapenv:Header> <soapenv:Body> <tns:GetContactsRequest> <tns:Search>Müller</tns:Search> <tns:Status>kunde</tns:Status> <tns:Limit>25</tns:Limit> <tns:Offset>0</tns:Offset> </tns:GetContactsRequest> </soapenv:Body> </soapenv:Envelope>
Antwort-Struktur
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <ns1:GetContactsResponse xmlns:ns1="urn:feavi"> <ns1:Success>true</ns1:Success> <ns1:Contacts> <ns1:Contact> <ns1:Id>42</ns1:Id> <ns1:FirstName>Max</ns1:FirstName> <ns1:LastName>Mustermann</ns1:LastName> <ns1:Email>max@example.com</ns1:Email> <!-- ... --> </ns1:Contact> </ns1:Contacts> <ns1:Meta> <ns1:Total>247</ns1:Total> <ns1:Limit>25</ns1:Limit> <ns1:Offset>0</ns1:Offset> </ns1:Meta> </ns1:GetContactsResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Fehler-Antwort (SOAP Fault)
<SOAP-ENV:Fault> <faultcode>Client.Auth</faultcode> <faultstring>API-Key ungültig</faultstring> </SOAP-ENV:Fault>
Empfohlene Tools & Clients
| Tool | Wie importieren |
|---|---|
| SoapUI | New Project → WSDL-URL einfügen → alle Operationen werden automatisch angelegt |
| Postman | New → SOAP Request → WSDL-URL → Operation wählen |
| Python zeep | from zeep import Client; c = Client('...?wsdl') |
| PHP SoapClient | new SoapClient('...?wsdl') |
| .NET / C# | Add Service Reference → WSDL-URL eingeben |
| Java (JAX-WS) | wsimport -keep "...?wsdl" |
Kontakte
| Operation | Aktion | Beschreibung |
|---|---|---|
| GetContacts | GetContactsRequest | Liste mit Filtern und Pagination |
| GetContact | GetContactRequest | Einzelnen Kontakt abrufen (ID) |
| CreateContact | CreateContactRequest | Neuen Kontakt erstellen |
| UpdateContact | UpdateContactRequest | Kontakt aktualisieren |
| DeleteContact | DeleteContactRequest | Kontakt löschen |
GetContacts — Filter-Parameter
| Element | Typ | Beschreibung |
|---|---|---|
| Search | string | Freitext in Name, E-Mail, Firma, Telefon |
| Status | string | neu · kontaktiert · qualifiziert · kunde · inaktiv |
| AssignedTo | int | User-ID |
| City | string | Stadt (Teilsuche) |
| Company | string | Firmenname (Teilsuche) |
| Limit | int | Max. Ergebnisse (Standard 50, max. 200) |
| Offset | int | Startpunkt für Pagination |
| OrderBy | string | created_at · last_name · first_name · company |
| OrderDir | string | ASC oder DESC |
CreateContact — XML-Beispiel
<tns:CreateContactRequest> <tns:Contact> <tns:FirstName>Anna</tns:FirstName> <tns:LastName>Müller</tns:LastName> <tns:Email>anna@example.com</tns:Email> <tns:Phone>+49 89 123456</tns:Phone> <tns:Company>Muster GmbH</tns:Company> <tns:Status>neu</tns:Status> <tns:Source>Website</tns:Source> <tns:City>München</tns:City> </tns:Contact> </tns:CreateContactRequest>
UpdateContact — nur geänderte Felder schicken
<tns:UpdateContactRequest> <tns:Id>42</tns:Id> <tns:Contact> <tns:Status>kunde</tns:Status> <tns:Notes>Vertrag unterschrieben am 15.06.2025</tns:Notes> </tns:Contact> </tns:UpdateContactRequest>
Deals
| Operation | Aktion | Beschreibung |
|---|---|---|
| GetDeals | GetDealsRequest | Liste mit Filtern |
| GetDeal | GetDealRequest | Einzelnen Deal abrufen |
| CreateDeal | CreateDealRequest | Deal erstellen |
| UpdateDeal | UpdateDealRequest | Deal bearbeiten (inkl. Stage verschieben) |
| DeleteDeal | DeleteDealRequest | Deal löschen |
| MarkDealWon | MarkDealWonRequest | Als gewonnen markieren |
| MarkDealLost | MarkDealLostRequest | Als verloren markieren |
GetDeals — Filter-Parameter
| Element | Typ | Beschreibung |
|---|---|---|
| Status | string | open (Standard) · won · lost · all |
| PipelineId | int | Filtere nach Pipeline |
| StageId | int | Filtere nach Stage |
| ContactId | int | Alle Deals eines Kontakts |
| ValueMin / ValueMax | decimal | Wert-Filter in € |
| Limit / Offset | int | Pagination |
CreateDeal — XML-Beispiel
<tns:CreateDealRequest> <tns:Deal> <tns:Title>Enterprise-Paket Muster GmbH</tns:Title> <tns:PipelineId>1</tns:PipelineId> <tns:StageId>3</tns:StageId> <tns:Value>12000</tns:Value> <tns:ContactId>42</tns:ContactId> </tns:Deal> </tns:CreateDealRequest>
MarkDealWon
<tns:MarkDealWonRequest> <tns:Id>7</tns:Id> </tns:MarkDealWonRequest>
Termine
| Operation | Beschreibung |
|---|---|
| GetAppointments | Liste mit Datumsfilter, Typ, Mitarbeiter, Status |
| GetAppointment | Einzelnen Termin abrufen |
| CreateAppointment | Termin manuell buchen |
| UpdateAppointment | Gast-Daten aktualisieren |
| CancelAppointment | Termin stornieren (cancelled=1) |
CreateAppointment — XML-Beispiel
<tns:CreateAppointmentRequest> <tns:Appointment> <tns:TypeId>1</tns:TypeId> <tns:StaffUserId>3</tns:StaffUserId> <tns:StartAt>2025-06-15 10:00:00</tns:StartAt> <tns:GuestName>Max Mustermann</tns:GuestName> <tns:GuestEmail>max@example.com</tns:GuestEmail> <tns:GuestPhone>+49 89 123456</tns:GuestPhone> </tns:Appointment> </tns:CreateAppointmentRequest>
Projekte & Aufgaben
| Operation | Beschreibung |
|---|---|
| GetProjects | Liste mit Status/Priorität-Filter |
| GetProject | Projekt inkl. aller Aufgaben |
| CreateProject | Neues Projekt |
| UpdateProject | Projekt bearbeiten |
| DeleteProject | Projekt + Aufgaben + Kommentare löschen |
| GetTasks | Aufgaben eines Projekts (optional Status-Filter) |
| CreateTask | Aufgabe erstellen |
| UpdateTask | Aufgabe bearbeiten / Status setzen |
| DeleteTask | Aufgabe löschen |
CreateTask — Aufgabe als erledigt anlegen
<tns:CreateTaskRequest> <tns:ProjectId>5</tns:ProjectId> <tns:Task> <tns:Title>Design Mockup erstellen</tns:Title> <tns:Priority>high</tns:Priority> <tns:Deadline>2025-06-30</tns:Deadline> <tns:AssignedTo>2</tns:AssignedTo> </tns:Task> </tns:CreateTaskRequest>
UpdateTask — Status auf erledigt setzen
<tns:UpdateTaskRequest> <tns:Id>11</tns:Id> <tns:Task> <tns:Status>done</tns:Status> </tns:Task> </tns:UpdateTaskRequest>
Aktivitäten
| Operation | Beschreibung |
|---|---|
| GetActivities | Liste mit Filter (Kontakt, Deal, Typ, Datum) |
| CreateActivity | Aktivität loggen |
| DeleteActivity | Aktivität löschen |
Erlaubte Typen
anruf · email · meeting · notiz · aufgabe
CreateActivity — Anruf loggen
<tns:CreateActivityRequest> <tns:Activity> <tns:Type>anruf</tns:Type> <tns:Subject>Erstgespräch geführt</tns:Subject> <tns:Notes>Interesse vorhanden. Rückruf in 2 Wochen.</tns:Notes> <tns:ContactId>42</tns:ContactId> <tns:DealId>7</tns:DealId> </tns:Activity> </tns:CreateActivityRequest>
Beispiel: curl
# Kontakte suchen curl -X POST "https://feavi.com/api/soap/service.php" \ -H "Content-Type: text/xml; charset=utf-8" \ -H "SOAPAction: urn:feavi#GetContacts" \ -d '<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="urn:feavi"> <soapenv:Header> <tns:FeaviAuth><tns:ApiKey>feavi_DEIN_KEY</tns:ApiKey></tns:FeaviAuth> </soapenv:Header> <soapenv:Body> <tns:GetContactsRequest> <tns:Search>Müller</tns:Search> <tns:Limit>10</tns:Limit> </tns:GetContactsRequest> </soapenv:Body> </soapenv:Envelope>'
Beispiel: PHP SoapClient
$client = new SoapClient( 'https://feavi.com/api/soap/service.php?wsdl', ['trace' => true, 'exceptions' => true] ); // Auth-Header $auth = new SoapHeader( 'urn:feavi', 'FeaviAuth', ['ApiKey' => 'feavi_DEIN_KEY'] ); $client->__setSoapHeaders($auth); // Kontakte abrufen $result = $client->GetContacts([ 'Search' => 'Müller', 'Status' => 'kunde', 'Limit' => 25, ]); print_r($result->Contacts->Contact); // Neuen Kontakt erstellen $res = $client->CreateContact([ 'Contact' => [ 'FirstName' => 'Anna', 'LastName' => 'Müller', 'Email' => 'anna@example.com', 'Company' => 'Muster GmbH', 'Status' => 'neu', ], ]); echo "Neue ID: " . $res->Id; // Deal als gewonnen markieren $client->MarkDealWon(['Id' => 7]);
Beispiel: Python (zeep)
from zeep import Client from zeep.wsse import UsernameToken # nicht nötig, wir nutzen custom header from lxml import etree # Client mit WSDL client = Client('https://feavi.com/api/soap/service.php?wsdl') # Auth-Header manuell zusammenbauen header_ns = 'urn:feavi' auth_header = etree.Element('{%s}FeaviAuth' % header_ns) api_key_el = etree.SubElement(auth_header, '{%s}ApiKey' % header_ns) api_key_el.text = 'feavi_DEIN_KEY' # Anfrage mit Header with client.settings(extra_http_headers={'SOAPAction': 'urn:feavi#GetContacts'}): result = client.service.GetContacts( _soapheaders=[auth_header], Search='Müller', Status='kunde', Limit=25 ) for contact in result.Contacts.Contact: print(contact.FirstName, contact.LastName, contact.Email) # Deal erstellen deal_result = client.service.CreateDeal( _soapheaders=[auth_header], Deal={ 'Title': 'Neues Angebot', 'PipelineId': 1, 'StageId': 1, 'Value': 4900, } ) print(f"Neue Deal-ID: {deal_result.Id}")
FEAVI SOAP API · Sandeck Media
Fragen? → info@sandeck-media.de