For AI agents: the complete documentation index is at https://api-doc.talent360.io/llms.txt. Every page is also available as Markdown by appending index.md to its URL or by sending Accept: text/markdown.
Integrationsguide für Drittsysteme

ERP-Integration: Firmenablauf

Überblick

Dieser Leitfaden beschreibt, wie ein ERP-System eine Firma samt Betriebsstätten, Einsatzorten und Ansprechpartnern aus talent.Flow übernimmt und weiterpflegt. Er folgt demselben Muster wie der Bewerberablauf: Ereignis → Referenz → Abruf → Pflege.

Der wesentliche Unterschied zum Bewerberablauf: Firmen tragen eine externe Id. Damit lässt sich die Zuordnung zum ERP-Datensatz direkt im Datensatz führen, statt in einer eigenen Tabelle.

Kurzfassung: Webhook auf das Firmen-Ereignis registrieren, danach GET /v3/customers/{id} aufrufen — dieser eine Aufruf liefert die Firma mit Betriebsstätten, deren Einsatzorten und den Ansprechpartnern vollständig verschachtelt.

Der Ablauf im Bild

sequenceDiagram
    participant U as Anwender in talent.Flow
    participant TF as talent.Flow
    participant ERP as Ihr ERP-System
    U->>TF: Firma anlegen bzw. übertragen
    TF->>ERP: POST auf Ihre Webhook-URL
    ERP-->>TF: 200 OK
    ERP->>TF: GET /v3/customers/{entityId}
    TF-->>ERP: Firma inkl. offices[] und contacts[]
    Note over ERP: Übernahme mit importExternalId als Schlüssel
    ERP->>TF: PUT / POST / DELETE zur Pflege
    TF-->>ERP: 200 OK

Schritt 1: Webhook registrieren

curl -X POST https://api.talent360.io/v3/webhooks/subscribe \
  -H "Authorization: Bearer IHR_ACCESS_TOKEN" \
  -H "User-Agent: Mozilla/5.0 (Kundenname)" \
  -H "Content-Type: application/json" \
  -d '{"event": 1379, "url": "https://erp.example.com/hooks/talent360"}'
Zweck Endpunkt
Webhook registrieren POST /v3/webhooks/subscribe
Registrierungen prüfen GET /v3/webhooks/subscriptions
Verfügbare Ereignistypen GET /v3/webhooks/event/types
Protokoll lesen POST /v3/webhooks/protocol

Ereignisse rund um die Firma

Id Ereignis Cloud-Event Bedeutung
1379 Company created (customer) io.talent360.customercreatedcustomer Firma als Kunde angelegt
1380 Company created (interested party) io.talent360.customercreatedinterestedparty Firma als Interessent angelegt
1381 Company office added io.talent360.customerofficeadded Betriebsstätte hinzugefügt
1382 Company location added io.talent360.customerlocationadded Einsatzort hinzugefügt
1383 Company contact added io.talent360.customercontactadded Ansprechpartner hinzugefügt

Ein ERP, das nur echte Kunden führt, abonniert 1379. Soll auch der Vertriebsvorlauf mitlaufen, kommt 1380 dazu. Die Ereignisse 1381 bis 1383 melden Nachträge an einer bereits übernommenen Firma — sie sind für den laufenden Abgleich relevant, nicht für die Erstübernahme.

Registrierungsregeln, Fehlerschwelle und Wiederherstellung sind identisch zum Bewerberablauf — insbesondere gilt auch hier: sofort mit 200 antworten, sonst wird die Registrierung nach 10 Fehlern pausiert.

Schritt 2: Die Firma abrufen

curl -X GET https://api.talent360.io/v3/customers/815 \
  -H "Authorization: Bearer IHR_ACCESS_TOKEN" \
  -H "User-Agent: Mozilla/5.0 (Kundenname)" \
  -H "Accept: application/json"

Ein Aufruf genügt. Die Antwort enthält die Firma, darin offices[] mit den Betriebsstätten, in jeder Betriebsstätte locations[] mit den zugeordneten Einsatzorten, sowie contacts[] mit den Ansprechpartnern. Sie müssen die Unterobjekte nicht einzeln nachladen.

Struktur der Antwort:

CustomerReadDto
├─ id, name, description, notes, ranking
├─ corporationId, corporation          Unternehmensgruppe
├─ companyTypeId, companyType
├─ customerStatus, customerStatusChangedAtUtc
├─ importExternalId, importedAtUtc     ← Zuordnung zum Quellsystem
├─ createdAtUtc, modifiedAtUtc
├─ address, responsibility
├─ offices[]                           Betriebsstätten
│   ├─ id, companyType, description
│   ├─ email, telephone, telefax
│   ├─ costCenter, vatId               Kostenstelle, USt-IdNr.
│   ├─ importExternalId, importedAtUtc ← auch je Betriebsstätte
│   ├─ locations[]                     Einsatzorte, je mit importExternalId, importedAtUtc
│   └─ address, responsibility
└─ contacts[]                          Ansprechpartner, je mit importExternalId, assignedOfficeIds

Nutzen Sie importExternalId. Das Feld ist beim Anlegen schreibbar und wird beim Lesen zurückgeliefert — an der Firma, an jeder Betriebsstätte, an jedem Einsatzort und an jedem Ansprechpartner. Legen Sie dort Ihre ERP-Id ab, dann brauchen Sie keine separate Zuordnungstabelle und kein Matching über den Firmennamen. importedAtUtc hält fest, wann der Datensatz übernommen wurde. Neu in V 3.4.0: Auch Einsatzorte liefern beide Felder beim Lesen.

Zweck Endpunkt
Firma inkl. Betriebsstätten und Kontakten GET /v3/customers/{id}
Betriebsstätte einzeln lesen GET /v3/customers/offices/{officeId}
Einsatzort einzeln lesen GET /v3/customers/locations/{locationId}
Ansprechpartner einzeln lesen GET /v3/customers/contacts/{contactId}

Die Einzelabrufe brauchen Sie vor allem für gezielte Nachladungen nach den Ereignissen 1381–1383. Neu in V 3.4.0: Eine unbekannte oder gelöschte Id liefert an allen drei Einzelabrufen 404 mit Fehlerkörper; bisher kam 204 ohne Inhalt.

Schritt 3: Daten ändern

Zweck Endpunkt
Firmenstammdaten ändern PUT /v3/customers/{customerId}
Firmenstatus ändern PUT /v3/customers/{customerId}/customerstatus
Vertragsstatus ändern PUT /v3/customers/{customerId}/contractstatus
Betriebsstätte ändern PUT /v3/customers/{customerId}/offices/{officeId}
Einsatzort ändern (Neu in V 3.4.0) PUT /v3/customers/{customerId}/offices/{officeId}/locations/{locationId}
Ansprechpartner ändern PUT /v3/customers/{customerId}/contacts/{contactId}
Anfrage umhängen (Neu in V 3.4.0) PUT /v3/customers/{customerId}/requests/{requestId}

Alle Änderungsendpunkte sind Teil-Updates: Nur die übermittelten Felder werden geändert. Die Zuständigkeit (responsibility) und createdAtUtc werden dabei ebenfalls übernommen.

Neu in V 3.4.0: Einsatzorte sind änderbar — Bezeichnung, Anfahrtshinweise, Ansprechpartner, externe Id und Adresse. Das Umhängen auf eine andere Betriebsstätte ist weiterhin nicht möglich; in diesem Fall legen Sie einen neuen Einsatzort an und löschen den alten.

Rechtsform im Firmennamen. Endet name an POST/PUT Firma auf eine Rechtsform (z. B. „Musterfirma GmbH"), trennt die API sie ab und setzt companyTypeId daraus. Liefern Sie companyTypeId getrennt und den Namen ohne Rechtsform, wenn der gespeicherte Name dem gesendeten entsprechen soll.

Schritt 4: Daten ergänzen

Zweck Endpunkt
Firma anlegen POST /v3/customers
Betriebsstätte anlegen POST /v3/customers/{customerId}/offices
Einsatzort anlegen POST /v3/customers/{customerId}/offices/{officeId}/locations
Ansprechpartner anlegen POST /v3/customers/{customerId}/contacts
Beruf anlegen POST /v3/customers/{customerId}/professions
Konzerne lesen (Neu in V 3.4.0) GET /v3/customers/corporations

Ein Einsatzort hängt immer an einer Betriebsstätte — die Reihenfolge ist damit vorgegeben: erst Firma, dann Betriebsstätte, dann Einsatzort. Gehört die Firma zu einem Konzern, liefert der Konzernkatalog die zulässigen Werte für corporationId.

Schritt 5: Daten löschen

Neu in V 3.4.0: Für Betriebsstätten, Einsatzorte, Ansprechpartner und Anfragen gibt es Löschendpunkte. Damit lassen sich Löschungen aus dem ERP spiegeln und Testdaten entfernen.

Objekt Endpunkt
Betriebsstätte DELETE /v3/customers/{customerId}/offices/{officeId}
Einsatzort DELETE /v3/customers/{customerId}/offices/{officeId}/locations/{locationId}
Ansprechpartner DELETE /v3/customers/{customerId}/contacts/{contactId}
Anfrage DELETE /v3/customers/{customerId}/requests/{requestId}

Soft-Delete, genau wie in talent.Flow. Der Datensatz wird deaktiviert und liefert im Einzelabruf anschließend 404. Beim Löschen einer Betriebsstätte bleiben ihre Einsatzorte, Kontaktzuordnungen und Anfragen bestehen — wer sie ebenfalls entfernen will, löscht sie vorher einzeln. Ein Datensatz, der nicht zur angegebenen Firma gehört oder bereits gelöscht ist, ergibt 404.

Die Firma selbst lässt sich nicht löschen. Soll eine Firma aus dem operativen Blick verschwinden, führt der Weg über den Status: PUT /v3/customers/{customerId}/customerstatus.

Abgleich ohne Webhook

Falls Sie zusätzlich einen periodischen Abgleich brauchen — etwa zur Kontrolle oder nach einem längeren Ausfall:

Zweck Endpunkt
Firmenänderungen im Zeitraum GET /v3/customers/changes
Firmenänderungen pro Tag GET /v3/customers/changes/{date}
Firmenänderungen pro Stunde GET /v3/customers/changes/{date}/{hour}

Der bevorzugte Weg zur Wiederherstellung bleibt aber das Webhook-Protokoll, weil es exakt die Ereignisse liefert, die Ihr System verpasst hat — siehe Bewerberablauf.

Empfehlungen im Überblick

  • Firma über GET /v3/customers/{id} in einem Aufruf übernehmen, statt Unterobjekte einzeln zu laden.
  • importExternalId beim Anlegen setzen — an der Firma, an jeder Betriebsstätte, an jedem Einsatzort und Ansprechpartner.
  • Im Webhook-Handler sofort 200 antworten, Verarbeitung asynchron anstoßen.
  • Ereignis-id als Idempotenzschlüssel speichern.
  • Reihenfolge einhalten: Firma → Betriebsstätte → Einsatzort.
  • Unterobjekte per DELETE entfernen; für die Firma selbst den Statuswechsel vorsehen.
  • Auf 404 statt 204 prüfen, wenn ein Einzelabruf ins Leere geht.
  • Access Token zwischenspeichern (siehe Authentifizierung).

Checkliste vor dem Go-Live

  • Registrierung für das passende Firmen-Ereignis ist angelegt und über GET /v3/webhooks/subscriptions geprüft.
  • Entschieden ist, ob auch Interessenten (1380) übernommen werden.
  • Nachtrags-Ereignisse (1381–1383) werden verarbeitet oder bewusst ignoriert.
  • importExternalId wird gesetzt und beim Rücklesen ausgewertet.
  • Einsatzorte werden über PUT geändert; ein Wechsel der Betriebsstätte ist als Neuanlage plus Löschung umgesetzt.
  • Löschungen im ERP werden über die DELETE-Endpunkte gespiegelt, die Firma selbst über den Statuswechsel.
  • Ein Wiederherstellungslauf über /webhooks/protocol ist implementiert und getestet.