Inhalt
v1 · BetaPartner-API
Candidate Intelligence API-Integration
Mehr Sicherheit für Recruiter vor dem Interview
Führen Sie Candidate Intelligence-Berichte direkt in Ihrem ATS aus, um Kandidateninformationen zu prüfen, unerwartete Signale aufzudecken und Interviewfragen in Sekunden zu generieren.
API-Zugang anfordernIdeal für
Applicant Tracking Systems (ATS)
Recruiting-CRMs
Jobbörsen
Interne Talentplattformen
Executive-Search-Unternehmen
HR-Tech-Anbieter
Partnervorteile
Warum Candidate Intelligence integrieren?
Bieten Sie Ihren Kunden zusätzlichen Kontext vor Interviews und schaffen Sie gleichzeitig neuen Mehrwert in Ihrer Plattform.
Recruiter-Engagement steigern
Halten Sie Recruiter in Ihrem ATS, indem Sie Kandidatenverifizierung, Interviewvorbereitung und zusätzliche Hiring-Insights direkt in den Profilen bereitstellen.
Neue Einnahmequelle schaffen
Bieten Sie Candidate Intelligence-Berichte Ihren Kunden an und erzielen Sie wiederkehrende Einnahmen über das Partnerprogramm.
Ihre Plattform differenzieren
Heben Sie sich von konkurrierenden ATS- und Recruiting-Lösungen mit integrierten Candidate Intelligence-Funktionen ab.
Keine zusätzliche Recherche nötig
Helfen Sie Recruitern, relevante Informationen über den Lebenslauf hinaus zu finden, ohne ihren Workflow zu verlassen.
Einstellungsqualität verbessern
Unterstützen Sie Recruiter und Hiring Manager mit zusätzlichem Kontext über den Lebenslauf hinaus, verifizierten Erkenntnissen, potenziellen Risiken und Punkten zur Validierung.
Schnelle Integration
Die typische Implementierung erfordert nur wenige API-Endpunkte und kann in weniger als einem Tag abgeschlossen werden.
Integrationsablauf
Genehmigung erhalten und API-Schlüssel bekommen
Fordern Sie Zugang bei TieTalent an. Nach der Freigabe erhalten Sie einen API-Schlüssel für Ihre Integration.
Schaltfläche in Kandidatenprofilen hinzufügen
Fügen Sie eine Schaltfläche „Intelligence starten“ in Kandidatenprofilen hinzu. Beim Klick wechselt sie zu „Läuft...“ während der Generierung. Sobald der Bericht fertig ist, öffnet er sich automatisch und die Schaltfläche wird zu „✕ Bericht schließen“. Nach dem Schließen wechselt sie zu „Intelligence-Bericht ansehen“, um einen bereits erstellten Bericht erneut zu öffnen.
TieTalent-API beim Klick aufrufen
POST an /api/v1/analyses mit Kandidaten-, Client- (Recruiter) und Sprachdaten. Verwenden Sie Ihre eigenen externen IDs für client.id und candidate.id.
TieTalent generiert den Bericht
Die Analyse läuft im Hintergrund. Nutzen Sie GET /api/v1/analyses/{id} sowohl zum Polling bei Status queued oder processing (mindestens 10 Sekunden zwischen Anfragen: siehe Retry-After) als auch zum Abrufen des fertigen Berichts bei Status completed. Rufen Sie DELETE auf demselben Pfad auf, um abzubrechen, wenn der Recruiter das Profil verlässt.
Optional: Vorberechnung bei Shortlist
Wenn ein Kandidat shortlistet wird (oder in eine späte Pipeline-Stufe wechselt), senden Sie POST mit mode: "precompute", damit die Generierung vor dem Klick des Recruiters fertig sein kann. Speichern Sie die zurückgegebene ID und holen Sie sie per GET beim Öffnen, oder POST live beim Klick. Live erzeugt immer eine neue ID, nutzt aber gültigen Cache-Inhalt schnell. Lösen Sie Precompute nicht beim ersten Profilöffnen aus. Siehe Analysen vorberechnen.
Bericht im Kandidatenprofil anzeigen
Rendern Sie das Bericht-JSON in Ihrer Oberfläche (siehe Berichtstypen und Felder) oder öffnen Sie den vollständigen gehosteten Bericht über den signierten Link in metadata.pdf_download_url: die gehostete Ansicht bietet auch den PDF-Export.
Leistung und Latenz
Candidate Intelligence ist darauf ausgelegt, Recruitern ein reaktionsschnelles Erlebnis direkt in ihren Workflows zu bieten.
Aktion
Typische Antwortzeit
Vorhandener Bericht gefunden (Live-Cache-Kopie oder Precompute-Wiederverwendung)
< 1 Sekunde
Vorberechneten Bericht öffnen (nach abgeschlossenem Precompute)
Sofort (GET completed)
Neue Berichtserstellung
30–60 Sekunden
Logik zur Berichtswiederverwendung
Berichte werden eindeutig über Plattform + Unternehmen + Kandidat identifiziert.
Der Cache gilt pro Recruiter: Ihr API-Schlüssel identifiziert die Partnerintegration, und client.id identifiziert den Recruiter (Benutzer) in Ihrer Plattform. Unterschiedliche client.id-Werte teilen keinen Cache, auch nicht unter demselben API-Schlüssel.
metadata.cached; Precompute: dieselbe Analyse-ID)Cache-Schlüsselfelder
candidate.idIhre externe Kandidaten-IDcandidate.first_name + candidate.last_nameKandidatenname (normalisiert)candidate.companyAktuelles Unternehmen (normalisiert)candidate.locationStandort (normalisiert)candidate.roleRolle oder Jobtitel (normalisiert)report_typeAufgelöster Berichtstyp (Ihr Partner-Standard oder die Überschreibung report_type pro Aufruf). Ein anderer report_type als bei einem vorherigen zwischengespeicherten Lauf ist immer ein Cache-Miss: ein neuer Bericht des angeforderten Typs wird erstellt.Nicht Teil des Cache-Schlüssels
candidate.cvOptionaler CV-Text: nur bei frischen Läufen verwendet. Eine alleinige CV-Änderung invalidiert den Cache nicht.languageAngeforderte Berichtssprache. Verwenden Sie force_refresh: true, wenn Sie einen Bericht in einer anderen Sprache benötigen.Zwischengespeicherte Berichte werden bis zu 6 Monate wiederverwendet. Ältere abgeschlossene Analysen werden nicht aus dem Cache zurückgegeben.
Aktualisierung erzwingen
Setzen Sie force_refresh: true bei POST /api/v1/analyses, um die Cache-Suche zu überspringen und die vollständige Analyse-Pipeline auszuführen: Anreicherung, Live-Signale und LLM-Berichtserstellung.
Lassen Sie force_refresh weg oder setzen Sie es auf false, um Cache-Wiederverwendung zuzulassen (Standard).
Wann force_refresh: true setzen
Der Recruiter fordert ausdrücklich aktualisierte oder erneuerte Intelligence an
Nur der CV-Text hat sich geändert, die Profilfelder blieben gleich
Sie benötigen einen Bericht in einer anderen Sprache als ein vorheriger Cache-Treffer
Sie möchten Live-Signale und Anreicherung unabhängig vom Cache erneut ausführen
Anfrage für frische Analyse
{
"language": "en",
"client": {
"id": "client_company_123",
"first_name": "Jane",
"last_name": "Smith",
"company": "Acme Recruiting"
},
"candidate": {
"id": "candidate_456",
"first_name": "John",
"last_name": "Doe",
"company": "Example Company",
"location": "London, UK",
"role": "Software Engineer"
},
"force_refresh": true
}Authentifizierung
HTTP-Header
X-API-Key: ats_your_api_key_here Content-Type: application/json
Analyse erstellen
Optionale Body-Felder: candidate.cv (Klartext-CV, nur bei frischen Läufen), force_refresh (Boolean, Standard false (siehe Aktualisierung erzwingen), report_type ("hr" oder "agency", überschreibt Ihren Partner-Standard nur für diesen Aufruf) siehe Berichtstypen und Felder) und mode: "precompute" (siehe Analysen vorberechnen; für Batch candidates statt candidate).
{
"language": "en",
"client": {
"id": "client_company_123",
"first_name": "Jane",
"last_name": "Smith",
"company": "Acme Recruiting"
},
"candidate": {
"id": "candidate_456",
"first_name": "John",
"last_name": "Doe",
"company": "Example Company",
"location": "London, UK",
"role": "Software Engineer",
"cv": "Optional plain-text CV content…"
},
"force_refresh": false
}force_refresh (optional, Standard false) überspringt die Berichtswiederverwendung und erstellt immer einen neuen Bericht: der neue Bericht wird abgerechnet. Lassen Sie das Feld weg, sofern der Recruiter nicht ausdrücklich eine Aktualisierung anfordert.
202 Accepted
Der Location-Header verweist auf GET /api/v1/analyses/{id}. Retry-After: 10 gibt an, wann das nächste Polling erfolgen soll.
{
"id": "cmqp23kgg00067gk0rh6jol5o",
"status": "queued",
"candidate_id": "candidate_456",
"created_at": "2026-06-29T12:00:00.000Z"
}Analysen vorberechnen
Precompute erzeugt einen Candidate Intelligence-Bericht im Voraus (z. B. wenn ein Kandidat shortlistet wird), damit der Recruiter seltener 30–60 Sekunden warten muss. Speichern Sie die zurückgegebene Analyse-ID und holen Sie sie per GET beim Öffnen, oder POST ein normales Live-Create beim Klick. Live liefert weiterhin jedes Mal eine neue ID, nutzt aber gültigen Cache-Inhalt in unter einer Sekunde.
POST /api/v1/analyses mit mode: "precompute". Es gibt keine separate Precompute-URL. Polling und Abruf erfolgen über dasselbe GET /api/v1/analyses/{id} wie bei Live-Läufen.Empfohlene Auslöser
Kandidat shortlistet
Pipeline-Stufenwechsel in eine späte / interviewbereite Phase
Nicht auslösen bei
- Erstem Profilöffnen: aus Datenschutz-/GDPR- und Kostengründen nach Product Review ausgeschlossen
Verhalten
- Antwortet sofort mit
202 Acceptedund einer Analyse-ID: keine lange gehaltene Verbindung und keine gestreamten Vorab-Signale beim Create. - Idempotent: hat derselbe Partner + Client (Recruiter) + Kandidaten-Fingerprint bereits einen laufenden Lauf oder einen gültigen Cache-Bericht (dieselben 6-Monats-Wiederverwendungsregeln wie Live), wird die bestehende Analyse-ID zurückgegeben und keine neue Generierung gestartet.
- Live (non-precompute)
POSTs erzeugen weiterhin jedes Mal eine neue Analyse-ID; Cache-Wiederverwendung für Live kopiert den Bericht auf diese neue ID (unverändert). - Optionales
force_refresh: trueüberspringt die Wiederverwendung abgeschlossener Caches für Precompute (gleiche Semantik wie Live). Ein laufender Lauf für denselben Fingerprint wird weiterhin zurückgegeben, statt ein Duplikat zu starten.
Precompute für einen Kandidaten
Senden Sie mode: "precompute" mit denselben client- und candidate-Objekten wie bei einem Live-Create. Die Antwortform entspricht dem Live-202 Accepted-Body.
{
"mode": "precompute",
"language": "en",
"client": {
"id": "client_company_123",
"first_name": "Jane",
"last_name": "Smith",
"company": "Acme Recruiting"
},
"candidate": {
"id": "candidate_456",
"first_name": "John",
"last_name": "Doe",
"company": "Example Company",
"location": "London, UK",
"role": "Software Engineer"
}
}Batch-Precompute
Senden Sie mode: "precompute" mit candidates (Array) statt candidate. Genau eines von candidate oder candidates angeben. Maximal 50 Kandidaten pro Anfrage.
{
"mode": "precompute",
"language": "en",
"client": {
"id": "client_company_123",
"first_name": "Jane",
"last_name": "Smith",
"company": "Acme Recruiting"
},
"candidates": [
{
"id": "candidate_456",
"first_name": "John",
"last_name": "Doe",
"company": "Example Company",
"location": "London, UK",
"role": "Software Engineer"
},
{
"id": "candidate_789",
"first_name": "Alex",
"last_name": "Nguyen",
"company": "Example Company",
"location": "Berlin, DE",
"role": "Product Manager"
}
]
}202 Accepted (Batch)
{
"items": [
{
"id": "cmqp23kgg00067gk0rh6jol5o",
"status": "queued",
"candidate_id": "candidate_456",
"created_at": "2026-06-29T12:00:00.000Z"
},
{
"id": "cmqp23kgg00067gk0rh6jol5p",
"status": "queued",
"candidate_id": "candidate_789",
"created_at": "2026-06-29T12:00:00.000Z"
}
]
}Pollien oder laden Sie jede zurückgegebene ID mit GET /api/v1/analyses/{id}. Bei Status completed sind report und metadata befüllt: so rufen Sie den fertigen Bericht ab.
Precompute ist pro Partner begrenzt (1.000 net-new Läufe pro UTC-Tag und 10 gleichzeitige in-flight). Überschreitung liefert 429 Too Many Requests mit Fehler precompute-cap-exceeded und Retry-After. Cache- oder In-flight-Treffer zählen nicht zu diesen Caps. Live-Läufe sind ausgenommen.
Analyse abrufen (Polling & Abruf)
Verwenden Sie GET /api/v1/analyses/{id} mit demselben X-API-Key-Header und der ID aus der Create- (oder Precompute-) Antwort. Dieser eine Endpunkt pollt laufende Analysen und liefert den abgeschlossenen Bericht.
Wenn der Status completed ist, enthält die Antwort das vollständige report-Objekt sowie metadata (inkl. pdf_download_url). Es gibt keinen separaten „get report“-Endpunkt: beenden Sie das Polling und rendern oder öffnen Sie diese Payload. Siehe Abgeschlossene Analyse für ein vollständiges Beispiel.
Solange der Status queued oder processing ist, enthält jede GET-Antwort Retry-After: 10: warten Sie mindestens 10 Sekunden vor der nächsten Anfrage.
Beenden Sie das Polling, wenn der Status completed, failed oder canceled ist.
{
"id": "cmqp23kgg00067gk0rh6jol5o",
"status": "processing",
"candidate_id": "candidate_456",
"stage": "enrichment",
"created_at": "2026-06-29T12:00:00.000Z",
"updated_at": "2026-06-29T12:00:20.000Z",
"quick_signal": {
"level": "Green",
"reason": "Identity supported by multiple matching signals.",
"identityConfidence": "Medium"
},
"signals": [
{
"statement": "Senior engineer at Example Company since 2021.",
"sourceType": "web",
"sourceUrl": "https://example.com/…",
"reliability": "High"
}
],
"report": null,
"metadata": null,
"error": null
}Felder, die während der Verarbeitung befüllt werden
quick_signalVorläufiges Identitätssignal (Green, Orange oder Red) mit kurzer Begründung: verfügbar, sobald die Anreicherung beginnt.signalsLive-Web-Signale, die während der Anreicherung gefunden werden. Das Array wächst, sobald externe Suchen abgeschlossen sind.stageAktuelle Pipeline-Phase: identity → enrichment → report → done.reportVollständiger Candidate Intelligence-Bericht: nur befüllt, wenn der Status completed ist. Das ist die Bericht-Payload zum Anzeigen oder Speichern.metadataBerichtsmetadaten: nur befüllt, wenn der Status completed ist. Enthält den signierten Link zum gehosteten Bericht (pdf_download_url) sowie die Wiederverwendungsfelder cached / cached_at.Statuswerte
queuedAngenommen und wartet auf den Start.processingIn Bearbeitung: abfragen für Updates zu quick_signal, signals und stage.completedBericht bereit: nutzen Sie diese GET-Antwort als abgerufenen Bericht (report und metadata sind befüllt).failedAnalyse fehlgeschlagen: error ist befüllt.canceledAnalyse wurde über DELETE /api/v1/analyses/{id} abgebrochen oder hat einen terminalen Abbruchstatus erreicht.Analyse abbrechen
DELETE /api/v1/analyses/{id} stoppt eine wartende oder laufende Analyse, wenn ein Recruiter das Kandidatenprofil verlässt oder einen laufenden Bericht verwirft. Verwenden Sie denselben X-API-Key-Header wie bei POST und GET.
Ist die Analyse bereits completed, failed oder canceled, gibt der Endpunkt die aktuelle Ressource unverändert zurück: keine zusätzlichen Kosten oder Nebenwirkungen.
// Kein Request-Body: nur X-API-Key-Header
200 OK
Gibt die Analyse-Ressource mit Status canceled zurück. Teilweise quick_signal oder signals können vorhanden sein, wenn der Abbruch mitten in der Pipeline erfolgte. Beenden Sie das Polling, sobald der Status canceled ist.
{
"id": "cmqp23kgg00067gk0rh6jol5o",
"status": "canceled",
"candidate_id": "candidate_456",
"stage": "enrichment",
"created_at": "2026-06-29T12:00:00.000Z",
"updated_at": "2026-06-29T12:00:25.000Z",
"quick_signal": null,
"signals": [],
"report": null,
"metadata": null,
"error": null
}Bericht-bereit-Webhooks
Als Alternative zum Polling kann TieTalent eine signierte HTTP-Benachrichtigung an einen für Ihre Integration registrierten Endpunkt senden, sobald eine Analyse einen Endzustand erreicht: report_ready, wenn ein Bericht fertig ist (Live-Analyse, Vorberechnung und Cache-Wiederverwendung zählen alle), oder report_failed bei einem endgültigen Fehlschlag.
Webhooks ergänzen das Polling, sie ersetzen es nie. Betrachten Sie GET /api/v1/analyses/{id} jederzeit als maßgeblich und behalten Sie Polling als Fallback für verpasste Ereignisse bei.
Ereignistypen
report_readyEin finaler Bericht ist bereit: umfasst Live-Analysen, Vorberechnungen und Cache-Wiederverwendungen gleichermaßen.report_failedDer Lauf hat einen endgültigen Fehlschlag erreicht.Ereignis-Umschlag
Jede Zustellung ist ein JSON-Objekt in der Form der folgenden Beispiele. id wird einmal pro Ereignis generiert und bei jedem erneuten Versuch desselben Ereignisses wiederverwendet: verwenden Sie sie als Idempotenzschlüssel zur Deduplizierung.
api_environment spiegelt das Label des API-Schlüssels wider, der den Lauf authentifiziert hat (Production, Staging oder Test): derselbe Wert, der in Ihrer Admin-API-Schlüsselliste angezeigt wird. Ein Schlüssel liefert immer nur an den unter seinem eigenen Label registrierten Webhook-Endpunkt.
{
"id": "evt_1a2b3c4d5e6f7890",
"type": "report_ready",
"created_at": "2026-07-30T14:45:21.650Z",
"api_environment": "Production",
"data": {
"analysis_id": "cmqp23kgg00067gk0rh6jol5o",
"candidate_id": "candidate_456",
"client_id": "client_company_123",
"status": "completed",
"report_url": "https://intelligence.tietalent.com/api/v1/analyses/cmqp23kgg00067gk0rh6jol5o",
"pdf_download_url": "https://intelligence.tietalent.com/api/ats/reports/cmqp23kgg00067gk0rh6jol5o/pdf?sig=…"
}
}{
"id": "evt_9f8e7d6c5b4a3210",
"type": "report_failed",
"created_at": "2026-07-30T14:45:21.650Z",
"api_environment": "Production",
"data": {
"analysis_id": "cmqp23kgg00067gk0rh6jol5p",
"candidate_id": "candidate_789",
"client_id": "client_company_123",
"status": "failed",
"report_url": "https://intelligence.tietalent.com/api/v1/analyses/cmqp23kgg00067gk0rh6jol5p",
"pdf_download_url": null,
"error_code": "internal_error"
}
}data-Felder
analysis_idDieselbe id, die Sie über GET /api/v1/analyses/{id} abrufen würden.candidate_idIhre eigene candidate.id aus der ursprünglichen Anfrage: keine interne TieTalent-Kennung.client_idIhre eigene client.id aus der ursprünglichen Anfrage.statuscompleted oder failed, entsprechend dem Status der Analyse-Ressource.report_urlDie authentifizierte GET /api/v1/analyses/{id}-URL: rufen Sie sie mit Ihrem X-API-Key ab, um den vollständigen Bericht zu erhalten.pdf_download_urlDer signierte Link zum gehosteten Bericht, identisch mit metadata.pdf_download_url in der GET-Antwort. Vorhanden bei report_ready, null bei report_failed.error_codeNur bei report_failed-Ereignissen vorhanden: ein stabiler, maschinenlesbarer Code. Gibt niemals einen internen KI-Anbieter oder Infrastrukturdetails preis.Signatur prüfen
Jede Zustellung trägt einen X-CI-Signature-Header im folgenden Format. Der signierte Inhalt ist {timestamp}.{raw_request_body}, HMAC-SHA256 mit dem für Ihren Endpunkt ausgestellten whsec_...-Secret.
X-CI-Signature-Header
X-CI-Signature: t=1732963521,v1=5d6f2c8a9e1b7340c6a2f5e8b1d9a047c3b6e2f1a8d5c9b4e7f2a1d6c3b8e5f0
Während eines Secret-Rotationsfensters kann der Header zwei v1=-Werte tragen: einen signiert mit dem alten, einen mit dem neuen Secret. Akzeptieren Sie eine Übereinstimmung mit beiden.
Lehnen Sie jede Zustellung ab, deren t=-Zeitstempel mehr als 5 Minuten von Ihrer eigenen Uhr abweicht: das ist Ihr Schutz vor Replay-Angriffen.
Signaturprüfung (Pseudocode)
function isValidSignature(header, rawBody, secret, toleranceSeconds = 300) {
const parts = Object.fromEntries(
header.split(",").map((part) => part.split("=").map((s) => s.trim())),
);
const timestamp = Number(parts.t);
if (Math.abs(Date.now() / 1000 - timestamp) > toleranceSeconds) return false;
const expectedSignature = hmacSha256Hex(secret, `${timestamp}.${rawBody}`);
const candidateSignatures = header
.split(",")
.filter((part) => part.startsWith("v1="))
.map((part) => part.slice(3));
return candidateSignatures.some((signature) => timingSafeEqual(signature, expectedSignature));
}Zustellungssemantik
- Mindestens einmalige Zustellung: eine 2xx-Antwort innerhalb von 5 Sekunden gilt als Erfolg; alles andere wird mit exponentiellem Backoff und Jitter erneut versucht, etwa 10 Versuche über etwa 24 Stunden, danach wird das Ereignis dead-lettered.
- Doppelte und ungeordnete Zustellungen sind zu erwarten: deduplizieren Sie anhand von
idund gehen Sie nie von einer Reihenfolge zwischen Ereignissen aus. - Wird ein Webhook verpasst, verzögert oder dupliziert, hält Ihr bestehendes Polling Ihren Zustand konsistent mit dem authentifizierten GET.
Abgeschlossene Analyse
Wird zurückgegeben, wenn der Status completed ist. Der Bericht unten ist ein Beispiel vom Typ hr und gekürzt: die vollständige Feldliste und das Beispiel vom Typ agency finden Sie unter Berichtstypen und Felder.
Frischer Bericht (metadata.cached: false)
{
"id": "clx_analysis_id",
"status": "completed",
"candidate_id": "candidate_456",
"stage": "done",
"created_at": "2026-06-29T12:00:00.000Z",
"updated_at": "2026-06-29T12:00:45.000Z",
"quick_signal": {
"level": "Green",
"reason": "Identity supported by multiple matching signals.",
"identityConfidence": "Medium"
},
"signals": [
{
"statement": "…",
"sourceType": "web",
"sourceUrl": "https://example.com/…",
"reliability": "High"
}
],
"report": {
"report_type": "hr",
"candidateName": "John Doe",
"profileHeadline": "Software Engineer",
"profileCompany": "Example Company",
"profileLocation": "London, UK",
"sourcesCheckedCount": 24,
"identity": {
"status": "Confirmed",
"confidence": "High",
"confidenceReason": "…",
"risk": { "level": "Low", "reason": "…" }
},
"recommendation": {
"decision": "Go with validation",
"confidence": "Medium",
"confidenceNote": "Identity verified · signals consistent",
"reason": "…",
"nextStepPills": [
{ "variant": "confirmed", "label": "Role and tenure verified" },
{ "variant": "validate", "label": "Validate team leadership scope" }
]
},
"bottomLine": {
"headline": "…",
"detail": "…"
},
"keyTakeaways": {
"standsOut": [{ "label": "…", "detail": "…" }],
"needsChecking": [{ "label": "…", "detail": "…" }]
},
"surprisingInsights": [
{ "title": "…", "text": "…", "source": "…", "polarity": "Favorable" }
],
"externalBackgroundAssessment": [
{ "claim": "…", "summary": "…", "sourceReference": "…", "evidenceBadge": "high" },
{ "claim": "…", "summary": "…", "evidenceBadge": "not_found" }
],
"externalProfileTags": [
{ "kind": "catalog", "id": "linkedin_verified" },
{ "kind": "catalog", "id": "no_adverse_signals" }
],
"roleFit": {
"bestSuited": ["…"],
"considerCarefully": ["…"]
},
"interviewQuestions": [{ "question": "…", "hint": "Explores: …" }],
"alertLevel": "Green",
"externalDataConfidence": "Medium"
},
"metadata": {
"report_id": "clx_analysis_id",
"candidate_id": "candidate_456",
"language": "en",
"generated_at": "2026-06-29T12:00:45.000Z",
"pdf_download_url": "https://intelligence.tietalent.com/api/ats/reports/{id}/pdf?sig=…",
"cached": false,
"cached_at": null,
"report_type": "hr"
},
"error": null
}Zwischengespeicherter Bericht (metadata.cached: true)
{
"id": "clx_new_analysis_id",
"status": "completed",
"candidate_id": "candidate_456",
"stage": "done",
"created_at": "2026-07-15T12:00:00.000Z",
"updated_at": "2026-07-15T12:00:00.500Z",
"quick_signal": { "…": "…" },
"signals": [{ "…": "…" }],
"report": { "…": "…" },
"metadata": {
"report_id": "clx_new_analysis_id",
"candidate_id": "candidate_456",
"language": "en",
"generated_at": "2026-07-15T12:00:00.500Z",
"pdf_download_url": "https://intelligence.tietalent.com/api/ats/reports/{id}/pdf?sig=…",
"cached": true,
"cached_at": "2026-07-15T12:00:00.500Z",
"report_type": "hr"
},
"error": null
}Das metadata-Objekt
metadata.pdf_download_url ist ein signierter Link, der den vollständigen gehosteten TieTalent-Bericht öffnet (dasselbe Berichtsdesign wie in der Web-App); der PDF-Export kann aus dieser Ansicht heruntergeladen werden. Behandeln Sie den Link vertraulich: jeder, der ihn besitzt, kann den Bericht öffnen.
metadata.cached ist true, wenn ein vorhandener Bericht wiederverwendet wurde, anstatt einen neuen zu erstellen (siehe Logik zur Berichtswiederverwendung); cached_at enthält dann den Zeitstempel der Wiederverwendung, andernfalls ist es null.
metadata.report_type (hr oder agency) gibt an, welcher Berichtsstruktur das report-Objekt folgt: siehe Berichtstypen und Felder. Er wird einmalig für Ihre Integration von TieTalent festgelegt und kann nicht pro Anfrage überschrieben werden.
Verdicts und Kompatibilität
report.recommendation.decision ist das zentrale Urteil des Berichts. Es ist immer einer der vier folgenden Werte.
recommendation.decision: mögliche Werte
"Proceed with confidence" "Go with validation" "Requires Validation (Signals flagged)" "Requires Validation (Insufficient data)"
Ordnen Sie jedes Verdict einem von drei UI-Zuständen zu:
Empfohlenes Mapping (JavaScript)
function toUiState(decision) {
switch (decision) {
case "Proceed with confidence":
return "proceed";
case "Go with validation":
return "validation";
case "Requires Validation (Signals flagged)":
case "Requires Validation (Insufficient data)":
return "requires_validation";
default:
return "requires_validation";
}
}requires_validation, damit unerwartete Werte kontrolliert degradieren, statt Ihre Oberfläche zu brechen.Berichtstypen und Felder
Jedes Partnerkonto hat einen Standard-report_type: hr oder agency :, der bei der Genehmigung Ihrer Integration von TieTalent festgelegt wird (Standard ist hr). Sie können ihn pro Aufruf überschreiben: siehe unten. Der für einen Bericht verwendete Typ wird immer in metadata.report_type und report.report_type zurückgegeben. Feldnamen sind in camelCase.
Überschreibung pro Aufruf
Übergeben Sie ein optionales Feld report_type ("hr" oder "agency") bei POST /api/v1/analyses, um diesen Typ für einen einzelnen Aufruf zu verwenden, unabhängig vom Standard Ihres Partnerkontos. Lassen Sie es weg, um Ihren Standard beizubehalten. Die Überschreibung wird nicht gespeichert: sie gilt nur für diesen Aufruf. Ein ungültiger Wert liefert 400 Bad Request mit dem Fehler invalid-report-type. report_type ist außerdem Teil des Cache-Schlüssels: Ein anderer Typ als bei einem vorherigen zwischengespeicherten Lauf für denselben Kandidaten löst immer einen neuen Bericht aus.
Anfrage mit report_type-Überschreibung
{
"language": "en",
"client": {
"id": "client_company_123",
"first_name": "Jane",
"last_name": "Smith",
"company": "Acme Recruiting"
},
"candidate": {
"id": "candidate_456",
"first_name": "John",
"last_name": "Doe",
"company": "Example Company",
"location": "London, UK",
"role": "Software Engineer"
},
"report_type": "agency"
}Kernfelder (bei beiden Berichtstypen vorhanden)
report_typehr oder agency: welcher Struktur dieses report-Objekt folgt.candidateNameName des Kandidaten, wie von der Analyse aufgelöst.profileHeadline / profileCompany / profileLocationKopfzeilen für die Anzeige: Rolle/Titel, aktuelles Unternehmen und Standort. Optional.sourcesCheckedCountAnzahl der für den Bericht konsultierten externen Suchergebnisse. Optional.identityIdentitätsauflösung: status (Confirmed, Likely, Ambiguous, Unknown), confidence, confidenceReason und risk (level, reason).recommendationDas Verdict: decision (siehe Verdicts und Kompatibilität), confidence, reason, evidence[], confidenceNote (kurze Evidenz-Überschrift) und nextStepPills[] (Evidenzstatus-Pills mit variant und label).bottomLineDas Eröffnungsverdikt des Berichts: headline (ein entscheidender Satz) und detail (1-2 Sätze mit unterstützendem Kontext).keyTakeawaysListen standsOut[] und needsChecking[] mit (label, detail)-Einträgen.surprisingInsightsBis zu 3 Karten (title, text, source, polarity): polarity ist Favorable oder Concern.externalBackgroundAssessmentZeilen der Beweistabelle (claim, summary, evidenceBadge, sourceReference?), die CV-/Profilangaben mit externen Signalen abgleichen: inklusive Lücken: Eine Zeile mit evidenceBadge not_found bedeutet, dass für diese Angabe kein externes Signal gefunden wurde.externalProfileTagsAusschließlich Katalog-Tags aus den Gruppen source_presence und adverse_signal_status: siehe Tags unten.alertLevelGesamtwarnstufe: Green, Yellow, Orange oder Red.externalDataConfidenceVertrauen in die externen Daten des Berichts: High, Medium oder Low.Nur für hr
Nur vorhanden, wenn report_type gleich hr ist. Bei agency-Berichten nicht vorhanden (nicht null, sondern fehlend).
roleFitbestSuited[] und considerCarefully[]: Rollen-/Organisationskontexte, die zu diesem Profil passen, vs. Kontexte, die mehr Validierung benötigen.interviewQuestionsVorgeschlagene Interviewfragen: (question, hint).Nur für agency
Nur vorhanden, wenn report_type gleich agency ist. Bei hr-Berichten nicht vorhanden (nicht null, sondern fehlend).
bestFitTagsKatalog-Tags, die beschreiben, wo dieses Profil einzuordnen ist: siehe Tags unten.takeItForward„Wissenswert, bevor Sie weitermachen“: worthItFor[] (Gründe als einfache Sätze) und reflectionQuestions[] (question, answer).Beispiel eines hr-Berichtsobjekts
report (report_type: "hr")
{
"report_type": "hr",
"candidateName": "John Doe",
"profileHeadline": "Software Engineer",
"profileCompany": "Example Company",
"profileLocation": "London, UK",
"sourcesCheckedCount": 24,
"identity": {
"status": "Confirmed",
"confidence": "High",
"confidenceReason": "…",
"risk": { "level": "Low", "reason": "…" }
},
"recommendation": {
"decision": "Go with validation",
"confidence": "Medium",
"confidenceNote": "Identity verified · signals consistent",
"reason": "…",
"nextStepPills": [
{ "variant": "confirmed", "label": "Role and tenure verified" },
{ "variant": "validate", "label": "Validate team leadership scope" }
]
},
"bottomLine": {
"headline": "…",
"detail": "…"
},
"keyTakeaways": {
"standsOut": [{ "label": "…", "detail": "…" }],
"needsChecking": [{ "label": "…", "detail": "…" }]
},
"surprisingInsights": [
{ "title": "…", "text": "…", "source": "…", "polarity": "Favorable" }
],
"externalBackgroundAssessment": [
{ "claim": "…", "summary": "…", "sourceReference": "…", "evidenceBadge": "high" },
{ "claim": "…", "summary": "…", "evidenceBadge": "not_found" }
],
"externalProfileTags": [
{ "kind": "catalog", "id": "linkedin_verified" },
{ "kind": "catalog", "id": "no_adverse_signals" }
],
"roleFit": {
"bestSuited": ["…"],
"considerCarefully": ["…"]
},
"interviewQuestions": [{ "question": "…", "hint": "Explores: …" }],
"alertLevel": "Green",
"externalDataConfidence": "Medium"
}Beispiel eines agency-Berichtsobjekts
report (report_type: "agency")
{
"report_type": "agency",
"candidateName": "John Doe",
"profileHeadline": "Software Engineer",
"profileCompany": "Example Company",
"profileLocation": "London, UK",
"sourcesCheckedCount": 24,
"identity": {
"status": "Confirmed",
"confidence": "High",
"confidenceReason": "…",
"risk": { "level": "Low", "reason": "…" }
},
"recommendation": {
"decision": "Go with validation",
"confidence": "Medium",
"confidenceNote": "Identity verified · signals consistent",
"reason": "…",
"nextStepPills": [
{ "variant": "confirmed", "label": "Role and tenure verified" },
{ "variant": "validate", "label": "Validate team leadership scope" }
]
},
"bottomLine": {
"headline": "…",
"detail": "…"
},
"keyTakeaways": {
"standsOut": [{ "label": "…", "detail": "…" }],
"needsChecking": [{ "label": "…", "detail": "…" }]
},
"surprisingInsights": [
{ "title": "…", "text": "…", "source": "…", "polarity": "Favorable" }
],
"externalBackgroundAssessment": [
{ "claim": "…", "summary": "…", "sourceReference": "…", "evidenceBadge": "high" },
{ "claim": "…", "summary": "…", "evidenceBadge": "not_found" }
],
"externalProfileTags": [
{ "kind": "catalog", "id": "linkedin_verified" },
{ "kind": "catalog", "id": "no_adverse_signals" }
],
"bestFitTags": [
{ "kind": "catalog", "id": "sales_leadership" },
{ "kind": "catalog", "id": "b2b_saas" }
],
"takeItForward": {
"worthItFor": ["…"],
"reflectionQuestions": [{ "question": "…", "answer": "…" }]
},
"alertLevel": "Green",
"externalDataConfidence": "Medium"
}Enumerationen
Enum-Werte
identity.status Confirmed | Likely | Ambiguous | Unknown *.confidence High | Medium | Low identity.risk.level Low | Medium | High nextStepPills[].variant confirmed | validate | partial | insufficient | conflict surprisingInsights[].polarity Favorable | Concern externalBackgroundAssessment[] .evidenceBadge high | single | validate | not_found alertLevel Green | Yellow | Orange | Red
Tags
externalProfileTags und bestFitTags sind bei dieser API ausschließlich Katalog-Tags (jeder Tag trägt eine stabile snake_case-ID, über die Sie verzweigen können. Tag-IDs sind stabile API-Werte und werden nicht lokalisiert) ordnen Sie ihnen eigene Labels zu oder stellen Sie die ID lesbar dar.
Tag-Struktur
// externalProfileTags and bestFitTags are catalog-only for this API:
// every tag is a stable snake_case id from the catalogs below.
{ "kind": "catalog", "id": "linkedin_verified" }externalProfileTags: Katalog-IDs nach Gruppe
// group: source_presence linkedin_verified · press_coverage_found · podcast_appearances company_registry_confirmed · funding_database_found · alumni_record_confirmed personal_website_found · speaking_engagements_found · published_content_found social_media_presence · patent_or_ip_record_found · industry_body_membership // group: adverse_signal_status no_adverse_signals · adverse_signal_flagged · multiple_adverse_signals
bestFitTags: Katalog-IDs nach Gruppe (nur agency-Berichte)
// group: functional_strength fundraising_leadership · brand_and_partnerships · team_leadership operational_execution · product_strategy · commercial_development technical_execution · external_representation · content_and_thought_leadership data_and_analytics · legal_and_compliance · finance_and_pnl_ownership business_development · go_to_market_strategy · sales_leadership // group: sector_fit sustainability_sector · luxury_and_lifestyle · b2b_saas purpose_driven_business · early_stage_startup · enterprise · healthcare fintech · deep_tech · consumer_and_retail · education proptech_and_real_estate · logistics_and_supply_chain · international_markets // group: organisation_type founder_stage_company · scale_up_series_a_c · large_enterprise turnaround_or_transformation · ngo_or_non_profit · pe_or_vc_backed family_business // group: role_type c_suite_or_founder_role · senior_leadership · individual_contributor external_facing_role · operational_role · player_coach // group: geographic_fit switzerland · dach_region · western_europe · north_america asia_pacific · middle_east · latin_america · international
Feedback zu einem Bericht senden
POST /api/v1/analyses/{id}/feedback ermöglicht es Ihren Recruitern, einen abgeschlossenen Bericht zu bewerten (1 bis 5 Sterne, optionale Tags und optionaler Freitext) damit TieTalent die Berichtsqualität auf Ihrer Seite der Integration nachverfolgen kann.
Der Endpunkt führt ein Upsert auf client.id plus die Bericht-id durch: Ein erneutes Senden für denselben Client und Bericht überschreibt die vorherige Bewertung, Tags und den Text: es gibt keinen Versionsverlauf.
{
"client": {
"id": "client_company_123",
"first_name": "Jane",
"last_name": "Smith",
"company": "Acme Recruiting"
},
"rating": 4,
"feedback": "Helped me shortlist quickly, would have liked more sourcing links.",
"tags": ["saved_me_time", "good_signal_quality"]
}Anfragefelder
clientErforderlich. Dasselbe client-Objekt wie bei POST /api/v1/analyses: identifiziert, welcher Ihrer Nutzer das Feedback gibt.ratingErforderlich. Ganzzahl von 1 bis 5.feedbackOptional. Freitext-Kommentar, bis zu 2000 Zeichen.tagsOptional. Bis zu 5 kanonische Tag-Ids aus dem Katalog unten: ungültige Werte oder eine Bewertung außerhalb des Bereichs liefern einen 4xx-Fehler mit klarer Meldung.Feedback-Tag-Katalog
Tags sind nach Bewertungsband gruppiert und ändern sich je nach gesendeter Bewertung: gestalten Sie Ihre eigene Oberfläche, senden Sie aber nur die kanonischen Ids, damit Feedback sprachübergreifend analysierbar bleibt.
Kanonische Tag-Ids nach Bewertungsband
// 1-2 stars missing_info · something_was_wrong · signals_felt_weak too_generic · hard_to_trust // 3 stars useful_but_missing_detail · right_idea_wrong_emphasis some_signals_felt_off · wanted_more_sources // 4-5 stars saved_me_time · helped_me_decide · good_signal_quality easy_to_read · trustworthy
200 OK
Gibt das gespeicherte Feedback zurück und spiegelt die aktuelle Bewertung, Tags und den Text für diesen Client und Bericht wider.
{
"report_id": "cmqp23kgg00067gk0rh6jol5o",
"rating": 4,
"feedback": "Helped me shortlist quickly, would have liked more sourcing links.",
"tags": ["saved_me_time", "good_signal_quality"],
"updated_at": "2026-07-21T12:00:00.000Z"
}Empfohlene Partner-Oberfläche
Schaltfläche in Kandidatenprofilen hinzufügen
Fügen Sie eine Schaltfläche „Intelligence starten“ in Kandidatenprofilen hinzu. Beim Klick wechselt sie zu „Läuft...“ während der Generierung. Sobald der Bericht fertig ist, öffnet er sich automatisch und die Schaltfläche wird zu „✕ Bericht schließen“. Nach dem Schließen wechselt sie zu „Intelligence-Bericht ansehen“, um einen bereits gespeicherten Bericht erneut zu öffnen: ohne erneut POST aufzurufen.
Kein Bericht vorhanden
Bericht wird erstellt
Bericht ist geöffnet
Bericht geschlossen / vorhanden
Datenschutz und Sicherheit
client.id und candidate.id, um Analysen Datensätzen in Ihrem ATS zuzuordnen.⚖️ Hinweis zur KI-Konformität
Candidate Intelligence unterstützt die Entscheidungsfindung von Recruitern, ersetzt sie aber nicht. Einstellungsentscheidungen bleiben in der Verantwortung des Arbeitgebers und sollten stets eine angemessene menschliche Prüfung und Aufsicht einschließen.
Partnerprogramm
Candidate Intelligence integrieren
Fordern Sie Zugang an und wir aktivieren Ihre Partner-API-Zugangsdaten. Die Integration dauert in der Regel weniger als einen Tag.