Firmendetails
7 endpoints
Firmen anlegen, ändern und lesen — samt Kunden- und Vertragsstatus.
GET /customers/{id} liefert die Firma vollständig verschachtelt: Betriebsstätten, deren Einsatzorte und die Ansprechpartner in einem einzigen Aufruf. Sie müssen die Unterobjekte nicht einzeln nachladen.
Das Feld importExternalId nimmt die Id Ihres Quellsystems auf — beim Anlegen schreibbar, beim Lesen sichtbar. Damit brauchen Sie keine eigene Zuordnungstabelle und kein Matching über den Firmennamen.
Löschen ist im Firmenbereich nicht vorgesehen; der Weg führt über den Statuswechsel.
Konzerne lesen
GET /customers/corporations
Neu in V 3.4.0: Liefert die aktiven Konzerne (Unternehmensgruppen) des Accounts mit Id, Name und externer Id. Die hier gelieferten Ids sind die zulässigen Werte für corporationId an POST /customers und PUT /customers/{customerId}.
Der Katalog liegt bewusst nicht unter /masterdata: Konzerne sind Kundenstammdaten des Accounts, keine systemweit geteilten Stammdaten. Die Antwort trägt zusätzlich die einheitliche Form values, die alle Katalog-Endpunkte verwenden.
Neue Konzerne legt die Public API nicht an; das bleibt Stammdatenpflege in der Oberfläche.
Responses
200 — OK
| Property | Type | Required | Description |
|---|---|---|---|
corporations |
CorporationDto[] | no | Liste der aktiven Konzerne des Accounts |
values |
MasterDataEnumValueDto[] | no | Derselbe Katalog in der einheitlichen Form aller Katalog-Endpunkte: value enthält den Konzernnamen. Die externe Id steht ausschließlich in corporations[].importExternalId. |
400 — Ungültige Anfrage oder Validierungsfehler
| Property | Type | Required | Description |
|---|---|---|---|
messageGuid |
string (uuid) | null | no |
message |
string | null | no |
validationErrors |
ValidationError[] | no | Liste der Validierungsfehler |
Firmendetails lesen
GET /customers/{id}
Dieser Endpunkt gibt eine spezifische Firma zurück.
Neu in V 3.4.0:
notesundrankingwerden gelesen. Bisher ließen sich beide Felder nur überPOST /customersschreiben, aber nicht auslesen.corporationIdundcorporationliefern den zugeordneten Konzern (Id und Name). Gültige Werte fürcorporationIdliefertGET /customers/corporations.contacts[].linkedInUrlundcontacts[].xingUrlwerden vollständig mit Host geliefert (https://www.linkedin.com/…,https://www.xing.com/…), ohne Wertnull, dasselbe Format wie anGET /customers/contacts/{contactId}. Bisher stand hier nur der gespeicherte Profilpfad.- Der Aufruf ohne Token liefert 401. Bisher endete er in einem 500.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer | yes | Identifikation des Kunden |
Responses
200 — OK
| Property | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | no | Eindeutige Identifikation des Kunden |
name |
string | null | no |
description |
string | null | no |
notes |
string | null | no |
corporationId |
integer (int32) | null | no |
corporation |
string | null | no |
companyTypeId |
CompanyType | no | Firmentyp (Id) |
companyType |
string | null | no |
ranking |
CustomerRanking | null | no |
customerStatus |
string | null | no |
customerStatusChangedAtUtc |
string (date-time) | null | no |
importExternalId |
string | null | no |
importedAtUtc |
string (date-time) | null | no |
createdAtUtc |
string (date-time) | no | Zeitpunkt der Erstellung (UTC) |
modifiedAtUtc |
string (date-time) | no | Zeitpunkt der letzten Änderung (UTC) |
responsibility |
ResponsibilityReadDto | no | Zuständigkeit für den Kunden |
address |
AddressReadDto | no | Adresse des Kunden |
offices |
OfficeReadDto[] | no | Niederlassungen des Kunden |
contacts |
ContactReadDto[] | no | Ansprechpartner des Kunden |
404 — Firma nicht gefunden
| Property | Type | Required | Description |
|---|---|---|---|
messageGuid |
string (uuid) | null | no |
message |
string | null | no |
validationErrors |
ValidationError[] | no | Liste der Validierungsfehler |
Firma anlegen
POST /customers
Legt eine Firma an und liefert deren Id zurück.
Pflichtfelder sind name, companyTypeId und responsibility (mit userId und officeId). Fehlt eines davon, antwortet die API mit 400 und einem Validierungsfehler auf dem jeweiligen Feld.
companyTypeId ist die Rechtsform und wird oft übersehen, weil sie in Quellsystemen häufig Teil des Firmennamens ist. Gültige Werte liefert GET /masterdata/CompanyTypes; für „keine Angabe" ist 130 (Unknown) vorgesehen. Beim PUT /customers/{customerId} und an der Betriebsstätte ist das Feld optional.
Adresszeilen (addressLine1/addressLine2) führt die Firma nicht; die gibt es nur an der Betriebsstätte. geoLat/geoLon sind nicht schreibbar, die Koordinaten werden aus der Adresse berechnet.
Neu in V 3.4.0:
- Endet
nameauf die Anzeigebezeichnung einer Rechtsform ausGET /masterdata/CompanyTypes(z. B. „Musterfirma GmbH"), wird sie serverseitig abgetrennt: Gespeichert wird „Musterfirma",companyTypeIdwird aus dem Suffix gesetzt und gewinnt über einen mitgeschickten Wert. Der längste Treffer gilt („GmbH & Co. KG" vor „GmbH"), Groß-/Kleinschreibung spielt keine Rolle, nur ein ganzes Wort am Ende zählt („Musterfirma Agrar" bleibt unangetastet), und ein Name, der nur aus der Rechtsform besteht, bleibt unverändert. Wer den Namen bewusst mit Rechtsform führt, muss damit rechnen, dass er gekürzt wird. corporationIdordnet der Firma einen bestehenden Konzern zu. Gültige Werte liefertGET /customers/corporations; eine unbekannte Id liefert 400.- Enthält
location.streetStraße und Hausnummer und fehltstreetNumber, zerlegt die API den Wert selbst: Das letzte Wort wird zur Hausnummer, wenn es mit einer Ziffer beginnt. - Der Aufruf ohne Token liefert 401. Bisher endete er in einem 500.
Request body
Content type: application/json
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | null | yes |
companyTypeId |
integer | yes | Kennung des Firmentyps (Rechtsform). Pflichtfeld beim Anlegen; fehlt der Wert, wird der Aufruf mit 400 und einem Validierungsfehler auf CompanyTypeId abgelehnt. Gültige Werte liefert GET /masterdata/CompanyTypes; für keine Angabe ist 130 (Unknown) vorgesehen. Beim PUT und an der Betriebsstätte ist das Feld optional. Neu in V 3.4.0: Trägt name eine Rechtsform am Ende, wird der Wert daraus abgeleitet und überschreibt den mitgeschickten. |
corporationId |
integer (int32) | null | no |
description |
string | null | no |
notes |
string | null | no |
location |
AddressCreateDto | no | Adresse des Kunden. Der Kunde führt keine Adresszeilen; addressLine1 und addressLine2 gibt es nur an der Betriebsstätte, Zusätze zur Anschrift gehören hier in street. |
customerStatus |
CustomerStatus | no | Status des Kunden |
ranking |
CustomerRanking | no | Ranking des Kunden |
importExternalId |
string | null | no |
createdAtUtc |
string (date-time) | null | no |
candidateProfileTemplateConfigurationForEmployeeLeasingId |
integer (int32) | null | no |
candidateProfileTemplateConfigurationForPersonnelPlacementId |
integer (int32) | null | no |
responsibility |
ResponsibilityCreateDto | yes | Zuständigkeit für den Kunden. Pflichtfeld; fehlt der Block oder ist eine der beiden Ids 0, wird der Aufruf mit 400 und Validierungsfehlern auf Responsibility.UserId bzw. Responsibility.OfficeId abgelehnt. |
Responses
200 — OK
| Property | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | no | Eindeutige Identifikation des erzeugten Datensatzes |
400 — Ungültige Anfrage oder Validierungsfehler
| Property | Type | Required | Description |
|---|---|---|---|
messageGuid |
string (uuid) | null | no |
message |
string | null | no |
validationErrors |
ValidationError[] | no | Liste der Validierungsfehler |
Beruf anlegen
POST /customers/{customerId}/professions
Mit diesem Endpunkt kann man einen Beruf anlegen.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
customerId |
path | integer | yes | Identifikation des Kunden |
Request body
Content type: application/json
| Property | Type | Required | Description |
|---|---|---|---|
workingTitleId |
integer (int32) | no | Kennung des Berufstitels (Id) |
locationId |
integer (int32) | no | Kennung des Standorts (Id) |
contactId |
integer (int32) | null | no |
placementTypeId |
PlacementType | no | Art der Vermittlung |
Responses
200 — OK
| Property | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | no | Eindeutige Identifikation des erzeugten Datensatzes |
400 — Ungültige Anfrage oder Validierungsfehler
| Property | Type | Required | Description |
|---|---|---|---|
messageGuid |
string (uuid) | null | no |
message |
string | null | no |
validationErrors |
ValidationError[] | no | Liste der Validierungsfehler |
404 — Firma nicht gefunden
| Property | Type | Required | Description |
|---|---|---|---|
messageGuid |
string (uuid) | null | no |
message |
string | null | no |
validationErrors |
ValidationError[] | no | Liste der Validierungsfehler |
Firma ändern
PUT /customers/{customerId}
Ändert die Stammdaten einer Firma. Es werden ausschließlich die im Request-Body übermittelten Felder geändert; nicht übermittelte Felder bleiben unverändert (einzige Ausnahme: das Bundesland beim Länderwechsel, siehe unten). Für den Firmenstatus und den Vertragsstatus gibt es eigene Endpunkte (PUT /customers/{customerId}/customerstatus bzw. PUT /customers/{customerId}/contractstatus).
companyTypeId ist beim Ändern optional; wer nur den Namen ändert, muss die Rechtsform nicht mitschicken. Eine Adressänderung berechnet die Koordinaten neu; geoLat/geoLon sind nicht schreibbar.
Neu in V 3.4.0:
responsibility(userId,officeId) wird ausgewertet und geändert; eine unbekannte Id ergibt 400. Bisher wurde das Objekt stillschweigend verworfen.corporationIdordnet der Firma einen bestehenden Konzern zu. Gültige Werte liefertGET /customers/corporations; eine unbekannte Id liefert 400.createdAtUtcwird auch beim Ändern übernommen, gedacht für Importe, die das Erstelldatum des Quellsystems nachtragen. Der Änderungszeitpunkt bleibt der Zeitpunkt des Aufrufs.- Endet ein mitgeschickter
nameauf die Anzeigebezeichnung einer Rechtsform ausGET /masterdata/CompanyTypes(z. B. „Musterfirma GmbH"), wird sie serverseitig abgetrennt: Gespeichert wird „Musterfirma",companyTypeIdwird aus dem Suffix gesetzt, auch ohne mitgeschicktes Feld, und überschreibt einen mitgeschickten Wert. Der längste Treffer gilt, Groß-/Kleinschreibung spielt keine Rolle, nur ein ganzes Wort am Ende zählt, und ein Name, der nur aus der Rechtsform besteht, bleibt unverändert. Wirdnamenicht mitgeschickt, passiert nichts. - Länderwechsel: Wird
location.countryIdauf ein anderes Land geändert undlocation.federalStateIdnicht mitgeschickt, leert die API das gespeicherte Bundesland, so wie talent.Flow beim Länderwechsel. Bisher wurde der Aufruf mit 400 abgelehnt. Ein mitgeschicktesfederalStateIdmuss zum neuen Land gehören, sonst 400NotMatchCountryaufFederalStateId. BleibtcountryIdunverändert, bleibt auch das Bundesland stehen. - Schlägt die Geokodierung fehl, bleiben vorhandene Koordinaten erhalten, statt auf
nullzurückzufallen. - Enthält
location.streetStraße und Hausnummer und fehltstreetNumber, zerlegt die API den Wert selbst: Das letzte Wort wird zur Hausnummer, wenn es mit einer Ziffer beginnt.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
customerId |
path | integer | yes | Identifikation des Kunden |
Request body
Required.
Zu ändernde Firmendaten. Nur die übermittelten Felder werden geändert.
Content type: application/json
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | null | no |
companyTypeId |
integer (int32) | no | Kennung des Firmentyps (Rechtsform). Beim Ändern optional; wer nur den Namen ändert, muss den Firmentyp nicht mitschicken. Gültige Werte liefert GET /masterdata/CompanyTypes; für keine Angabe ist 130 (Unknown) vorgesehen. Neu in V 3.4.0: Trägt ein mitgeschickter name eine Rechtsform am Ende, wird der Wert daraus abgeleitet und überschreibt den mitgeschickten. |
corporationId |
integer (int32) | null | no |
description |
string | null | no |
notes |
string | null | no |
location |
AddressCreateDto | no | Adresse des Kunden. Der Kunde führt keine Adresszeilen; addressLine1 und addressLine2 gibt es nur an der Betriebsstätte, Zusätze zur Anschrift gehören hier in street. |
ranking |
CustomerRanking | no | Ranking des Kunden |
importExternalId |
string | null | no |
createdAtUtc |
string (date-time) | null | no |
responsibility |
ResponsibilityCreateDto | no | Zuständigkeit für den Kunden. Neu in V 3.4.0: Wird beim Ändern ausgewertet; bisher still verworfen. |
Responses
204 — Firma geändert — die API antwortet ohne Inhalt.
400 — Ungültige Anfrage oder Validierungsfehler
| Property | Type | Required | Description |
|---|---|---|---|
messageGuid |
string (uuid) | null | no |
message |
string | null | no |
validationErrors |
ValidationError[] | no | Liste der Validierungsfehler |
404 — Firma nicht gefunden
| Property | Type | Required | Description |
|---|---|---|---|
messageGuid |
string (uuid) | null | no |
message |
string | null | no |
validationErrors |
ValidationError[] | no | Liste der Validierungsfehler |
Firmen Status ändern
PUT /customers/{customerId}/customerstatus
Erlaubte Werte:
Kunde: Active oder 5000
Interessent: Prospect oder 5001
Ehemaliger Kunde: Former oder 5002
Abgelehnt: Rejected oder 5003
Erlaubte Übergänge, jede andere Kombination wird mit 400 abgelehnt:
| Ist-Status | Erlaubte Zielstatus |
|---|---|
| Prospect (5001) | Active (5000), Rejected (5003) |
| Rejected (5003) | Prospect (5001) |
| Active (5000) | Former (5002), Prospect (5001) |
| Former (5002) | Active (5000) |
Rejected ist nur aus Prospect erreichbar.
Bei einem unzulässigen Übergang enthält validationErrors neben dem allgemeinen Eintrag mit errorType InvalidData einen zweiten Eintrag mit errorType InvalidStatusTransition auf customerStatusId. Dessen value ist ein Objekt mit currentStatus, requestedStatus und allowedTargetStatus (Statusnamen, z. B. "Active"), damit der Client sieht, welche Ziele vom aktuellen Status aus möglich sind.
Das Senden des bereits gesetzten Status ist ein No-op und antwortet mit 204.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
customerId |
path | integer | yes | Identifikation des Kunden |
Request body
Content type: application/json
| Property | Type | Required | Description |
|---|---|---|---|
customerStatusId |
CustomerStatusCode | no | Status des Kunden |
Responses
204 — Status geändert — die API antwortet ohne Inhalt.
400 — Ungültige Anfrage oder Validierungsfehler. Fachliche Prüfungen antworten als ErrorResponse; scheitert dagegen schon das Binden des Requests (z.B. nicht konvertierbare customerId), liefert das Framework ValidationProblemDetails mit Content-Type application/problem+json.
404 — Firma nicht gefunden
| Property | Type | Required | Description |
|---|---|---|---|
messageGuid |
string (uuid) | null | no |
message |
string | null | no |
validationErrors |
ValidationError[] | no | Liste der Validierungsfehler |
Vertragsabschluss melden
PUT /customers/{customerId}/contractstatus
Meldet einen unterzeichneten Vertrag zu einer Anfrage der Firma. Übergeben werden die Anfrage (requestId), optional der vermittelte Bewerber (candidateId) und der Zeitpunkt der Unterzeichnung (contractSignedAtUtc). Trotz des Pfadnamens contractstatus wird hier kein Statuswert gesetzt; der allgemeine Firmenstatus wird über PUT /customers/{customerId}/customerstatus geändert, der Status einer Anfrage über PUT /customers/{customerId}/requests/{requestId}/status.
Bei Arbeitnehmerüberlassung ist candidateId Pflicht; fehlt sie, kommt 400 mit ErrorType Required auf CandidateId. Einen Endpunkt, um einen Bewerber einer Anfrage zuzuordnen, bietet die Public API nicht; ein Vertragsabschluss lässt sich nur für Bewerber melden, die auf einem anderen Weg zugeordnet wurden.
Neu in V 3.4.0:
- Der Endpunkt bedient Arbeitnehmerüberlassung (
EmployeeLeasing) und Personalvermittlung (PersonnelPlacement). Für jede andere Vermittlungsart der Anfrage (None,InternalStaffing,ServiceContract) antwortet er mit 400 und einem Validierungsfehler aufRequestIdmit dem ErrorTypePlacementTypeNotSupported, der die tatsächliche Vermittlungsart als Wert trägt. Bisher kam in diesen Fällen ein 400 ohne Begründung. - Ist der Bewerber der Anfrage nicht zugeordnet, antwortet der Endpunkt mit 404 und einem Validierungsfehler auf
CandidateIdmit dem ErrorTypeNotAssignedToRequest; existiert der Bewerber nicht, mit 404 undNotExisting. Bisher lief der nicht zugeordnete Bewerber in ein 500READDATAERROR.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
customerId |
path | integer | yes | Identifikation des Kunden |
Request body
Content type: application/json
| Property | Type | Required | Description |
|---|---|---|---|
requestId |
integer (int32) | no | Identifikation der Anfrage |
candidateId |
integer (int32) | null | no |
contractSignedAtUtc |
string (date-time) | no | Zeitpunkt der Vertragsunterzeichnung (UTC) |
Responses
204 — Vertragsabschluss gespeichert, die API antwortet ohne Inhalt.
400 — Ungültige Anfrage oder Validierungsfehler
| Property | Type | Required | Description |
|---|---|---|---|
messageGuid |
string (uuid) | null | no |
message |
string | null | no |
validationErrors |
ValidationError[] | no | Liste der Validierungsfehler |
404 — Firma nicht gefunden
| Property | Type | Required | Description |
|---|---|---|---|
messageGuid |
string (uuid) | null | no |
message |
string | null | no |
validationErrors |
ValidationError[] | no | Liste der Validierungsfehler |
