Zum Inhalt springen
Schnittstelle einfach erklärt

Anleitung: Neue Projekte anlegen mit der HERO Lead API

Die HERO Lead API ermöglicht es dir, externe Quellen wie Kontaktformulare, Partnerportale oder CRM-Systeme direkt an die HERO Handwerkersoftware anzubinden. In dieser Anleitung erfährst du, wie du die HERO Lead API einrichtest.

Bild: Lead Api bei Hero
Empfohlen von

Endpunkt

POST https://login.hero-software.de/api/v1/Projects/create
Authorization: Bearer YOUR\_API\_KEY
Content-Type: application/json
Accept: application/json

Authentifizierung

Jede Anfrage muss im HTTP-Header einen gültigen Bearer-Token übermitteln:

Authorization: Bearer [dein-api-token]

Token erstellen

Zuerst benötigst du einen API-Schlüssel von uns. Dieser Service ist für dich kostenlos. Nimm dafür bitte mit unserem Support Kontakt auf. Der generierte Token wird einmalig ausgegeben und muss sicher gespeichert werden.

Anfrage-Format

Der Request-Body ist ein JSON-Objekt mit folgenden Feldern:

json
{
  "measure": "PVS",
  "customer": { ... },
  "address": { ... },
  "projectaddress": { ... },
  "project": { ... },
  "project\_match": { ... },
  "images": \[ ... ],
  "documents": \[ ... ]
}

Felder im Detail

measure (string, optional)

Beispiel für Gewerke-Kürzel des Projekts. Standard: PRJ.

KürzelBedeutung
PVSPhotovoltaikanlage
SSPStromspeicher
DOGDachdeckung (Beispiel)
UNBUnbekannt / Sonstiges
PRJAllgemeines Projekt (Standard)

Die verfügbaren Kürzel hängen von der HERO-Instanzkonfiguration ab.

customer (object, erforderlich)

Kundendaten. Mindestens email ist erforderlich.

FeldTypPflichtBeschreibung
emailstringjaE-Mail-Adresse des Kunden
first_namestringneinVorname
last_namestringneinNachname
titlestringneinAnrede: "Herr", "Frau" oder "HerrFrau" (Standard wenn leer)
title_customstringneinIndividuelle Anrede (z. B. "Dr.")
company_namestringneinFirmenname – wenn gesetzt, wird der Kunde automatisch als commercial angelegt
phone_homestringneinFestnetznummer (internationales Format empfohlen, z. B. +4921112345)
phone_mobilestringneinMobilnummer

Beispiel:

json
"customer": {
  "email": "max.mustermann@example.com",
  "first\_name": "Max",
  "last\_name": "Mustermann",
  "title": "Herr",
  "phone\_home": "+4921112345678",
  "phone\_mobile": "+49171123456"
}

address (object, erforderlich)

Kundenadresse. zipcode ist zwingend erforderlich.

FeldTypPflichtBeschreibung
zipcodestringjaPostleitzahl
streetstringneinStraße und Hausnummer
nrstringneinHausnummer separat (wird an street angehängt)
citystringneinStadt
country_codestringneinISO-Ländercode: "DE" (Standard), "AT", "CH"
country_idintneinAlternativer Länder-ID (wird durch country_code überschrieben)

Hinweis: Wenn country_code nicht angegeben wird, erkennt das System anhand der PLZ-Länge automatisch das Land (4-stellig → Schweiz/Österreich, 5-stellig → Deutschland).

Beispiel:

json
"address": {
  "street": "Musterstraße 42",
  "zipcode": "10115",
  "city": "Berlin",
  "country\_code": "DE"
}

projectaddress (object, optional)

Objektadresse, wenn diese von der Kundenadresse abweicht. Felder identisch mit address. Wenn projectaddress leer oder nicht angegeben ist, wird die address als Projektadresse übernommen.

Beispiel:

json
"projectaddress": {
  "street": "Gewerbepark 1",
  "zipcode": "80331",
  "city": "München",
  "country\_code": "DE"
}

project (object, optional)

Metadaten zum Projekt und zur Tracking-Quelle.

FeldTypBeschreibung
sourcestringVollständige Bezeichnung der Quelle (z. B. "example.org - Kontaktformular")
source_substringDomain oder System (z. B. "example.org")
source_mediumstringKanal (z. B. "Kontaktformular", "CRM")
partner_sourcestringInterner Quellenname des Partners
lead_idstringExterne Lead-ID aus dem Quellsystem (Format: "Quelle/UniqueId")

Beispiel:

json
"project": {
  "source": "mein-portal.de - Angebotsanfrage",
  "source\_sub": "mein-portal.de",
  "source\_medium": "Angebotsanfrage",
  "lead\_id": "MeinPortal/abc123"
}

project\_match (object, optional)

Steuert die Einordnung des Projekts beim Partner. Wird nur relevant, wenn der API-Token einem konkreten Partner/einer Firma zugewiesen ist.

FeldTypBeschreibung
status_codeintAnfangsstatus des Projekts (siehe unten). Standard: 201 (Erstkontakt)
commentstringKommentar, der als Logbucheintrag beim Projekt erscheint
inform_partnerboolWenn true, wird der Partner per E-Mail über das neue Projekt informiert

Erlaubte status\_code-Werte:

CodeStatus
201Neu – Erstkontakt
400Vor-Ort Termin
601Angebotserstellung
801Auftrag
1111Ausführung in Fortschritt

Beispiel:

json
"project\_match": {
  "status\_code": 201,
  "comment": "Kunde hat über unser Portal angefragt.",
  "inform\_partner": true
}

images (array, optional)

Bilder, die dem Projekt angehängt werden. Jedes Element ist ein Datei-Upload-Objekt (Multipart oder Base64, je nach Client-Implementierung).

documents (array, optional)

Dokumente (z. B. PDFs), die dem Projekt angehängt werden. Werden als generische Dokumente angelegt.

Vollständiges Beispiel

json
{
  "measure": "PVS",
  "customer": {
    "email": "anna.schmidt@example.com",
    "first\_name": "Anna",
    "last\_name": "Schmidt",
    "title": "Frau",
    "phone\_home": "+4930123456",
    "phone\_mobile": "+49170987654"
  },
  "address": {
    "street": "Hauptstraße 10",
    "zipcode": "10117",
    "city": "Berlin",
    "country\_code": "DE"
  },
  "project": {
    "source": "solarvergleich.de - Anfrageformular",
    "source\_sub": "solarvergleich.de",
    "source\_medium": "Anfrageformular",
    "lead\_id": "solarvergleich/XY789"
  },
  "project\_match": {
    "status\_code": 201,
    "comment": "Interesse an 10 kWp Anlage mit Speicher.",
    "inform\_partner": true
  },
}

Antwort-Format

Erfolg (200 OK)

json
{
  "status": "success",
  "id": 12345
}

id ist die HERO-interne Projekt-ID des neu angelegten Projekts.

Validierungsfehler (422 Unprocessable Entity)

json
{
  "status": "error",
  "message": "Fehlende Postleitzahl",
  "validationErrors": {}
}

Authentifizierungsfehler (403 Forbidden)

Wird geworfen, wenn kein oder ein ungültiger Token übermittelt wird.

Wichtige Hinweise

  • E-Mail-Adresse ist das primäre Deduplizierungsmerkmal. Existiert bereits ein Kunde mit dieser E-Mail (und der gleichen Firma), wird kein neuer Kunde angelegt.
  • Duplikaterkennung: Das System prüft auf doppelte E-Mail-Adressen und Telefonnummern. Bei einem Duplikat wird das Projekt trotzdem angelegt, aber ein Logbucheintrag als Hinweis erstellt.
  • E-Mail-Blacklist: Bestimmte E-Mail-Domains können serverseitig gesperrt sein. Anfragen mit gesperrten Adressen werden mit status: "error" abgewiesen, ohne HTTP-Fehlercode.
  • Länderkennung: Bei fehlender country\_code-Angabe wird das Land automatisch aus der PLZ-Länge abgeleitet (5 Stellen → Deutschland, 4 Stellen → Schweiz/Österreich).
  • Firmen-Kunden: Sobald company\_name gesetzt ist, wird der Kundentyp automatisch auf commercial gesetzt.

PHP-Beispielcode

<?php
$url = 'https://login.hero-software.de/api/v1/Projects/create';
$apikey = 'YOUR\_API\_KEY'; // den API-Schlüssel bekommst du von unserem Support

$data = array(
    "measure" => "PRJ",
    "customer" => array(
        "email" => "max.mustermann@example.org",
        "title" => "Herr",
        "first\_name" => "Max",
        "last\_name" => "Mustermann",
        "company\_name" => "Meine Firma",
    ),
    "address" => array(
        "street" => "Schwarzer Bär 2",
        "city" => "Hannover",
        "zipcode" => "30449",
        "country\_code" => "DE",
    ),
    "projectaddress" => array(
        "street" => "Schwarzer Bär 5",
        "city" => "Hannover",
        "zipcode" => "30449",
        "country\_code" => "DE",
    ),
    "project\_match" => array(
        "comment" => "Dieser Kommentar erscheint im Logbuch zu dem Projekt.",
        "partner\_notes" => "Optionale Hinweise für das Notizfeld.",
        "partner\_source" => "Mein Kontaktformular",
    ),
);

$postdata = json\_encode($data);

$ch = curl\_init($url); 
curl\_setopt($ch, CURLOPT\_POST, 1);
curl\_setopt($ch, CURLOPT\_POSTFIELDS, $postdata);
curl\_setopt($ch, CURLOPT\_RETURNTRANSFER, 1); 
curl\_setopt($ch, CURLOPT\_HTTPHEADER, array(
    'Content-Type: application/json',
    'Accept: application/json',
    'Authorization: Bearer '.$apikey,
));
$result = curl\_exec($ch);
curl\_close($ch);

$response = json\_decode($result, true);
if (isset($response\['status']) \&\& $response\['status'] == 'success') {
    echo "Projekt erfolgreich angelegt";
} else {
    echo "Ein Fehler ist aufgetreten: ".$response\['message']."
\\n";
    var\_dump($response);
}
Du hast Fragen zur HERO Lead API? Wir helfen dir gern | © 2017 REDPIXEL.PL/Shutterstock.com

Noch Fragen?

Du hast noch Fragen zur HERO Lead API? Gern kannst du dich direkt an uns wenden. Hier findest du alle Kontaktmöglichkeiten.

Bild: Hero Handwerkersoftware kostenlos testen
HERO: Handwerker Software für Profis
Kostenlose Beratung