Datenmodell

Talente

Eine Person im Recruiting-Funnel. Trägt Identität (Name, E-Mail, Telefon), Quelle, Standort, Links (LinkedIn / Portfolio), Tags, Skills, GDPR-Einwilligung + Aufbewahrungsfrist. Ein Talent kann mehrere Bewerbungen zu unterschiedlichen Stellen haben.

Modellname: candidate
Endpunkte: 5
Max. Seitengröße: 200

Felder

Validierungsregeln pro Feld. Werte, die diese Bedingungen verletzen, werden mit 400 abgewiesen, bevor sie die Datenbank erreichen.

FeldTypRegeln
citystring
max. Länge120
namestring
max. Länge200
tagstags-
colorstring
max. Länge24
emailstring
max. Länge320
phonestring
max. Länge64
cv_urlurl
max. Länge2048
githuburl
max. Länge2048
skillstags
max. Anzahl100Item max160
streetstring
max. Länge200
countrystring
max. Länge120
summarystring
max. Länge4000
currencystring
max. Länge8
linkedinurl
max. Länge2048
pronounsstring
max. Länge32
languagestags
max. Anzahl60Item max80
last_namestring
max. Länge120
portfoliourl
max. Länge2048
source_idstring
max. Länge64ref →sourceopt
avatar_urlurl
max. Länge2048
cv_blob_idstring
max. Länge64
first_namestring
max. Länge120
salutationenum
enumherr | frau | divers | neutral
pool_statusenum
enumactive | talent_pool | blocked | withdrawn | anonymised
postal_codestring
max. Länge32
current_rolestring
max. Länge200
gdpr_consentbool-
source_labelstring
max. Länge200
available_fromstring
max. Länge32
avatar_blob_idstring
max. Länge64
current_companystring
max. Länge200
gdpr_consent_atstring
max. Länge32
last_touched_atstring
max. Länge32
preferred_localestring
max. Länge16
years_experiencenumber-
gdpr_anonymised_atstring
max. Länge32
salary_expectationnumber-
cover_letter_blob_idstring
max. Länge64
gdpr_retention_untilstring
max. Länge32

Mutabilität

Welche Felder darfst du senden, und wann? Felder ohne Markierung werden vom Server vergeben - das Senden ist kein Fehler, sie werden stillschweigend ignoriert.

Anlegbar - im POST-Body lesbar.Änderbar - im PATCH-Body lesbar.Server-verwaltet - vom Body ignoriert.
FeldAnlegbarÄnderbar
city
name
tags
color
email
phone
cv_url
github
skills
street
country
summary
currency
linkedin
pronouns
languages
last_name
portfolio
source_id
avatar_url
cv_blob_id
first_name
salutation
pool_status
postal_code
current_role
gdpr_consent
source_label
available_from
avatar_blob_id
current_company
gdpr_consent_at
last_touched_at
preferred_locale
years_experience
gdpr_anonymised_at
salary_expectation
cover_letter_blob_id
gdpr_retention_until

Felder mit Anlegbar, aber ohne Änderbar, sind nach dem Erstellen unveränderlich. Server-verwaltete Felder umfassen id, Zeitstempel, Eigentümerschaft und Status.

Filter & Sortierung

Auf Listen-Endpunkten kombinierbar. Wiederholte Filter-Keys werden zu IN-Bedingungen, ein - vor einem Sort-Key kehrt die Richtung um. Beispiel: ?status=open&status=blocked&sort=-created_at.

Filter-Keys

emaildata__email
namedata__name
locationdata__location
countrydata__country
source_iddata__source_id
tagsdata__tags
skillsdata__skills
pool_statusdata__pool_status
gdpr_consentdata__gdpr_consent
statusstatus
is_archivedis_archived
owned_byowned_by
created_bycreated_by

Sortier-Keys

created_atcreated_at
updated_atupdated_at
namedata__name
last_touched_atdata__last_touched_at

Standard: created_at

Endpunkte

Jeder Endpunkt unten zeigt seine HTTP-Methode, den Pfad und den dafür benötigten PAT-Scope. Code-Beispiele decken curl, JavaScript, TypeScript, Python, Rust, Java und WebSocket ab.

GET/xapi2/data/candidatecandidate:list

Objekte auflisten

Liefert eine paginierte Liste sichtbarer Objekte. Standard-Seitengröße 20; mit ?limit= änderbar (typabhängig begrenzt). ?after=<id> für Keyset-Paginierung bei nach created_at sortierten Listen, ?offset= für Offset-Paginierung.

curl -H "Authorization: Bearer pat_…" \
"https://ki-bewerber-management.de/xapi2/data/candidate?limit=20"
GET/xapi2/data/candidate/{id}candidate:read

Einzelnes Objekt lesen

Liefert das Objekt anhand der ID. 404, falls es nicht existiert oder du keinen Lese-Zugriff hast (beide Fälle sind bewusst zusammengelegt).

curl -H "Authorization: Bearer pat_…" \
https://ki-bewerber-management.de/xapi2/data/candidate/OBJECT_ID
POST/xapi2/data/candidatecandidate:create

Erstellen

Erstellt ein neues Objekt. Der Body ist ein flaches JSON-Dict mit Feldwerten. Server-seitige Felder (id, Zeitstempel, Ownership) werden automatisch gefüllt; nur die unten als anlegbar gelisteten Felder werden aus dem Body übernommen.

curl -H "Authorization: Bearer pat_…" \
-H "Content-Type: application/json" \
-X POST https://ki-bewerber-management.de/xapi2/data/candidate \
-d '{"name": "…"}'
PATCH/xapi2/data/candidate/{id}candidate:update

Aktualisieren

Teilweise Aktualisierung. Nur Felder im Body werden verändert; alles andere bleibt erhalten. Gleiche Erlaubnisliste wie bei Create, abzüglich der nach dem Anlegen unveränderlichen Felder.

curl -H "Authorization: Bearer pat_…" \
-H "Content-Type: application/json" \
-X PATCH https://ki-bewerber-management.de/xapi2/data/candidate/OBJECT_ID \
-d '{"name": "…"}'
DELETE/xapi2/data/candidate/{id}candidate:delete

Löschen

Entfernt das Objekt. Es verschwindet sofort aus allen Standard-Listen und wird von read / list nicht mehr zurückgegeben.

curl -H "Authorization: Bearer pat_…" \
-X DELETE https://ki-bewerber-management.de/xapi2/data/candidate/OBJECT_ID

In der CLI

Dieselben Endpunkte sind auch über die KI BMS CLI verfügbar. Für Skripte, CI und Bulk-Imports ist sie meist die schnellere Wahl.

atscli candidate list --limit 5
atscli candidate get <id>
atscli candidate create --name "Hello"
atscli candidate upsert --unique name --csv items.csv
atscli candidate schema # Felder & Limits

Volle Befehlsreferenz, Profile, CSV-Import, Auto-Retry, NDJSON-Streaming → /docs/cli