Kundenangaben API
As advisor with Kundenangaben API you can create new cases or update cases with customer data from your crm system or lead applications for a seamless and fast start of advising.
Kundenangaben are also named as Erfasste Daten in Mortgage APIs (Vorgaenge-API or Antraege-API).
Documentation
Feedback and questions about the model are welcome as GitHub Issue .
Usecases
- create case with customer data from CRM system or lead applications
- get case with customer data
- to update CRM system or lead applications or
- to create own financing proposals with your structure, story and design
- overwrite existing case with customer data
Quick Start
To test our APIs and your use cases as quickly as possible, we have created a Postman Collection for you.
In the Postman collection in the folder “BaufiSmart Kundenangaben-API” you will find two examples. Since the data model in the Kundengaben API is very extensive, we provide a way to test/validate requests without storing data in Europace with the „validate customer data" request. This endpoint is for faster connectivity, but is not required for functionality.
Authentication
Please use
to get access to the APIs. The OAuth2 client requires the following scopes:
| Scope | API Use case |
|---|---|
baufinanzierung:echtgeschaeft | to use api in production mode |
baufinanzierung:vorgang:schreiben | create cases for mortgage loans |
Create case
As advisor, you can create a case with your customers data to start seamless and fast advising.
IMPORTANT: Provide privacy statement
Before you transfer consumer data to Europace please note our terms of use and provide the privacy statement of the advisor (MUST).
Requirements:
- OAuth Token has the scope
baufinanzierung:vorgang:schreiben - caller is advisor of the case
A customer wants to buy a single-family home for himself in Berlin. He has already saved up equity and has already given details of some preferences for financing. The rate should be in the amount of his current rent. He became aware of the financing intermediary through his employer Trisalis AG, which has a cooperation agreement with him and receives € 50 lead fee for each contract concluded as compensation for internal marketing.
example-request:
POST /kundenangaben HTTP/1.1
Host: baufinanzierung.api.europace.de
Content-Type: application/json
Authorization: Bearer eyJraWQiOiJZUUZ...
{
"importMetadaten": {
"datenkontext": "ECHT_GESCHAEFT",
"externeVorgangsId": "Lead 7c78de13-da02-4bdd-b4b2-c37855abfccc",
"importquelle": "Landinpage Trisalis AG 2021",
"leadtracking": {
"kampagne": "Trisalis AG",
"keyword": "Altersvorsorge - stark wie Beton",
"trackingId": "be8d40b0-25af-48ae-8c57-a1b72527f903"
},
"zusaetzlicherEreignistext": "Premium-Kunde",
"prioritaet": "HOCH",
"betreuung": {
"kundenbetreuer": "ABC12",
"bearbeiter": "ABC12"
},
"tippgeber": {
"tippgeberPartnerId": "{{PARTNER_ID}}", <-- PartnerID der Trisalis AG
"tippgeberprovisionswunsch": {
"@type": "BETRAG",
"betrag": 50
}
}
},
"kundenangaben": {
"haushalte": [
{
"kunden": [
{
"externeKundenId": "extKunde1",
"referenzId": "jsonRef1",
"personendaten": {
"person": {
"titel": {
"prof": false,
"dr": false
},
"anrede": "HERR",
"vorname": "Max",
"nachname": "Mustermann"
}
},
"wohnsituation": {
"anschrift": {
"strasse": "Teststr.",
"hausnummer": "55",
"plz": "10179",
"ort": "Berlin"
}
},
"finanzielles": {
"beschaeftigung": {
"@type": "ANGESTELLTER",
"beschaeftigungsverhaeltnis": {
"arbeitgeber": {
"name": "Trisalis AG",
"inDeutschland": true
}
}
},
"einkommenNetto": 4825
},
"kontakt": {
"telefonnummer": {
"vorwahl": "030",
"nummer": "420860"
},
"email": "max.mustermann@europace.de",
"weitereKontaktmoeglichkeiten": "beste Erreichbarkeit von 18-20Uhr"
}
}
],
"finanzielleSituation": {
"vermoegen": {
"summeBankUndSparguthaben": {
"guthaben": 154000,
"verwendung": {
"@type": "AUFLOESUNG_ALS_VERWENDUNG",
"maximalEinzusetzenderBetrag": 78000,
"kommentar": "einzusetzendes Eigenkapital"
}
}
},
"ausgaben": {
"summeMietausgaben": {
"betragMonatlich": 1150,
"entfaelltMitFinanzierung": true
}
}
}
}
],
"finanzierungsobjekt": {
"immobilie": {
"adresse": {
"strasse": "Immobilienstraße",
"hausnummer": "16",
"plz": "82784",
"ort": "Spandau"
},
"typ": {
"@type": "EINFAMILIENHAUS",
"gebaeude": {
"baujahr": 2018,
"nutzung": {
"wohnen": {
"gesamtflaeche": 150,
"nutzungsart": {
"@type": "EIGENGENUTZT"
}
}
}
}
}
}
},
"finanzierungsbedarf": {
"finanzierungszweck": {
"@type": "KAUF",
"kaufpreis": 358000,
"nebenkosten": {
"maklergebuehr": {
"wert": 3.75,
"einheit": "PROZENT"
},
"notargebuehr": {
"wert": 1.25,
"einheit": "PROZENT"
},
"grunderwerbsteuer": {
"wert": 6,
"einheit": "PROZENT"
}
}
},
"praeferenzen": {
"finanzierungsdetailspraeferenzen": {
"zinsbindung": {
"@type": "ZINSBINDUNGSSPANNE",
"vonJahre": 10,
"bisJahre": 15,
"kommentar": "Einstellung in Leadstrecke: normal"
},
"ratenhoehe": {
"@type": "WARMMIETE_VON_HEUTE"
},
"tilgungssatzwechsel": {
"@type": "NICHT_EINGEPLANT_ODER_ABSEHBAR"
}
},
"bestandteileDerFinanzierung": {
"praeferenz": "UNKOMPLIZIERTE_FINANZIERUNG"
},
"absicherungUndVorsorge": {
"praeferenz": "KEINE_PRAEFERENZ"
},
"zeitlicherRahmen": {
"@type": "SO_SCHNELL_WIE_MOEGLICH",
"kommentar": "Es gibt noch weitere Interessenten"
}
},
"finanzierungsbausteine": [
{
"@type": "ANNUITAETENDARLEHEN",
"darlehensbetrag": 319380,
"annuitaetendetails": {
"zinsbindungInJahren": 10,
"tilgungswunsch": {
"@type": "RATE",
"rate": 1150,
"tilgungsbeginn": "2020-09-20"
},
"sondertilgungJaehrlich": 0,
"auszahlungszeitpunkt": "2021-07-19"
},
"bereitstellungszinsfreieZeitInMonaten": 2,
"provision": 1.5
}
]
}
}
}
example-response:
201 - created
{
"vorgangsnummer": "YX4MDU"
}
Get case
As advisor, I can read out the data of the case, to create an individual financial proposal for a convincing sales story.
Requirements:
- authenticated as advisor, editor or sales organisation with access to the case
- OAuth token has the scope
baufinanzierung:vorgang:lesen
In the example you’ll get customer data of case YX4MDU.
example-request:
GET /kundenangaben/YX4MDU HTTP/1.1
Host: baufinanzierung.api.europace.de
Content-Type: application/json
Authorization: Bearer eyJraWQiOiJZUUZYT...
example-response:
{
"haushalte": [
{
"id": "65c388f13e1fd44cbadab021",
"kunden": [
{
"id": "65c388f1d087ea4f0edd01a1",
"externeKundenId": "extKunde1",
"referenzId": "jsonRef1",
"personendaten": {
"person": {
"titel": {
"prof": false,
"dr": false
},
"anrede": "HERR",
"vorname": "Max",
"nachname": "Mustermann"
}
},
"wohnsituation": {
"anschrift": {
"strasse": "Teststr.",
"hausnummer": "55",
"plz": "10179",
"ort": "Berlin"
}
},
...
...
...
}
]
}
],
"finanzierungsobjekt": {
...
},
"finanzierungsbedarf": {
...
},
"bankverbindung": {
...
}
}
Replace case
As advisor the input data of the case has to be replaced, to use the current customer data from a crm system or digital self-disclosure.
Attention: The data will be completely replaced by the specified values. If data fields are not transferred, the data in the case will be replaced by ’null’ and thus deleted.
Requirement:
- OAuth token has the scope
baufinanzierung:vorgang:schreiben - caller is editor of the case
In the example the entered customer data of case A65JS6 will be replaced.
example-request:
PUT /kundenangaben/A65JS6 HTTP/1.1
Host: baufinanzierung.api.europace.de
Content-Type: application/json
Authorization: Bearer eyJraWQiOiJZUUZYT...
{
"updateMetadaten": {
"tippgeber": {
"tippgeberPartnerId": "AAV43",
"tippgeberprovisionswunsch": {
"@type": "BETRAG",
"betrag": 567.1
}
}
},
"kundenangaben": {
"haushalte": [
{
"id": "65c388f13e1fd44cbadab021",
"kunden": [ ...
[Body as in create case (POST)]
example-response:
204 - no content
Contact Data Validation Status
The Kundenangaben API supports validation status fields for phone numbers and email addresses. These fields allow trusted systems to mark contact data as verified, which can be used by downstream processes for automated communication, quality assurance, and prioritization.
Validation Fields
Two optional fields are available in the kontakt object:
"kontakt": {
"telefonnummer": {
"vorwahl": "030",
"nummer": "420860"
},
"validierungTelefonnummer": "VERBRAUCHER_VERIFIZIERT",
"email": "max.mustermann@europace.de",
"validierungEmail": "VERBRAUCHER_VERIFIZIERT",
"weitereKontaktmoeglichkeiten": "beste Erreichbarkeit von 18-20Uhr"
}
Validation Status Values
Both validierungTelefonnummer and validierungEmail use the same validation levels:
| Status | Description |
|---|---|
UNGEPRUEFT | No validation performed (explicitly known as not checked) |
FORMAT_VALIDIERT | Format has been validated (e.g., valid phone number structure, valid email syntax) |
EXISTENZ_VALIDIERT | Existence has been technically validated (e.g., number is reachable, mailbox exists) |
VERBRAUCHER_VERIFIZIERT | Consumer has verified the contact data (e.g., SMS code entered, double opt-in link clicked) |
BERATER_VERIFIZIERT | Advisor has verified the contact data (e.g., successful phone call, email communication) |
KEINE_ANTWORT | Validation attempt was made but no response received (e.g., SMS not answered, confirmation email not clicked) |
null | Validation status is unknown (default for backward compatibility) |
Important distinction:
null= No information about validation status (unknown, e.g., old data before feature introduction)UNGEPRUEFT= Explicitly known that no validation has been performed yet
Read-Only Access for Most Partners
The validation fields are read-only for most partners. Only trusted internal systems are allowed to set these fields. If you attempt to set validation status values, they will be automatically removed from your request.
When reading cases (GET):
- All partners can read the validation status
- Use this information to adapt your processes (e.g., prioritize verified contact data)
When creating/updating cases (POST/PUT):
- Validation fields you send will be ignored
- The API will automatically set them to
null
Automatic Invalidation on Contact Data Changes
Important behavior: When you update a case and change phone number or email address, the corresponding validation status is automatically set to null. This ensures that validation status always matches the actual contact data.
Example workflow:
Case created by trusted system with validated data:
{ "telefonnummer": {"vorwahl": "030", "nummer": "12345678"}, "validierungTelefonnummer": "VERBRAUCHER_VERIFIZIERT" }You update the case and change the phone number:
- GET the case data (including validation status)
- Change phone number to
{"vorwahl": "040", "nummer": "87654321"} - PUT the complete data back
Result after update:
{ "telefonnummer": {"vorwahl": "040", "nummer": "87654321"}, "validierungTelefonnummer": null }The validation status is automatically set to
nullbecause the phone number changed.
Update Without Contact Data Changes
Important: If you update a case but do not change the phone number or email, the validation status is preserved.
Example:
- Case has validated phone number and
validierungTelefonnummer: "VERBRAUCHER_VERIFIZIERT" - You update only financing preferences (phone number unchanged)
- Result:
validierungTelefonnummerremains"VERBRAUCHER_VERIFIZIERT"
This is why you should always:
- GET the current case data
- Modify only the fields you need to change
- PUT the complete data back
Use Cases for Validation Status
- Automated communication: Only send SMS/emails to verified contact data
- Quality assurance: Distinguish between verified and unverified contact data
- Prioritization: Prioritize cases with verified contact information
- Compliance: Better data quality for GDPR compliance
- Process optimization: Adapt workflows based on verification level
FAQ
Where is the case created?
The owner of a case is always the advsior. His settings are applied to the case and teh advisor usually also receives the sales commission. The editor of the case may differ, for example, if the completion of the customer data is done by a team assistant or a clearing takes place.
If the advisor is not specified under ‘betreuung’, the subject of the API client is entered as advisor in the generated case. If no editor is specified, the user will be asked if he/she wants to take over the editing during the first editing.
If the case is to be created for a different advisor than the API user, then we recommend setting the roles of the case in the object ‘betreuung’.
"importMetadaten": {
"betreuung": {
"kundenbetreuer": "{{PARTNER_ID}}",
"bearbeiter": "{{PARTNER_ID}}"
},
...
With “impersonation” it is also possible to create the case in the name of another user. How to do this exactly is described in the Autorization-API erklärt.
How do I find my customer again?
External references can be specified for both the case and the customers, which can be read out again via the Vorgaenge-API and Antraege-API . This makes it possible to recognize data records in CRM or banking systems when they are read out.
The following references are possible:
- case:
externeVorgangsId - customer:
externeKundenId
What are the differences between the supported IDs and how can they be used correctly?
| ID | Description | Usage |
|---|---|---|
| id | ID that is defined in BaufiSmart and can be used for unique external referencing. | IDs are returned in the get case. In the replace case, the IDs for identical objects must be included. IDs cannot be included in the create case. Self-defined IDs are always ignored. |
| referenzId | Freely selectable ID, which is only used within a call for the unique assignment. | ID for some internal referencing purposes. It is only valid within a call, is freely selectable and is not saved. It is referred to in other places within the ‘kundenangaben’. |
| externeVorgangsId | Freely selectable ID of the case in the API user’s system. | External reference specified for the case, which can be read out again with other APIs (see above). |
| externeKundenId | Freely selectable ID of the customer in the API user’s system. | External reference specified for the customer, which can be read out again with other APIs (see above). |
How can I open the created case in the browser?
Open the created case via: https://www.europace2.de/vorgang/oeffne/XXXXXX
The Kundenangaben-API returns a case number. XXXXXX stands for the case number.
What happens to incorrect data fields?
We offer the most error-tolerant API possible. Errors would lead to interruptions in lead processes and thus possibly to frustrated customers. In case of doubt, it is more important not to have individual data fields than no data at all.
To increase the error tolerance of the API, the API applies the Tolerant Reader Pattern. That is, fields or enum values that are unknown to the API are ignored. For example, in the type Bauspardarlehen.abschlussgebuehrmodus only the values SOFORTZAHLUNG and VERRECHNUNG are allowed. Other values are ignored by the API and processed as if the field was empty.
Terms of use
The APIs are provided under the following Terms of Use .
Support
If you have any questions or problems, you can contact devsupport@europace2.de .