Inhalt

v1 · Beta

Partner-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 anfordern

Ideal 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

1

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.

2

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.

3

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.

4

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.

5

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.

6

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.

Gleicher Client + gleicher Kandidaten-Fingerprint → Cache-Inhalt sofort wiederverwendet (Live: neue Analyse-ID mit metadata.cached; Precompute: dieselbe Analyse-ID)
Anderes Kundenunternehmen + gleicher Kandidat → neuer Bericht wird erstellt und separat abgerechnet
Gleiches Kundenunternehmen + anderer Kandidat → neuer Bericht wird erstellt und abgerechnet

Cache-Schlüsselfelder

candidate.idIhre externe Kandidaten-ID
candidate.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

Genehmigung erforderlich: API-Schlüssel werden nur an genehmigte Partnerplattformen ausgegeben. Fügen Sie Ihren Schlüssel jeder Anfrage hinzu; setzen Sie ihn niemals in clientseitigem Code oder öffentlichen Repositories ein.

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).

POST/api/v1/analyses
{
  "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.

202 Accepted
{
  "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.

Verwenden Sie denselben Endpunkt 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 Accepted und 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.

POST/api/v1/analyses
{
  "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.

POST/api/v1/analyses
{
  "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)

202 Accepted
{
  "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.

GET/api/v1/analyses/{id}
{
  "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.

DELETE/api/v1/analyses/{id}
// 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.

200 OK
{
  "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.

Webhook-Endpunkte werden von TieTalent für Sie registriert, rotiert und überwacht: es gibt keine Selbstbedienungs-Einrichtung für Partner. Wenden Sie sich an Ihren Integrationskontakt, um einen Endpunkt hinzuzufügen oder zu ändern.

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.

report_ready-Payload
{
  "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=…"
  }
}
report_failed-Payload
{
  "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.
Dies ist nur ein schlanker "bereit"-Zeiger: kein Berichtsinhalt, kein Verdikt, und keine Kandidaten-PII wird im Webhook übertragen. Rufen Sie den vollständigen Bericht über das bestehende authentifizierte GET mit den obigen IDs ab.

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 id und 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)

JSON200 OK
{
  "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)

JSON200 OK
{
  "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";
  }
}
Best Practice: Verzweigen Sie über den vollständigen String mit einem sicheren Standardwert 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.

Vorwärtskompatibilität: Neue Felder können im Laufe der Zeit zu beiden Berichtstypen hinzukommen. Ignorieren Sie unbekannte Felder und behandeln Sie jedes Feld als nullable, außer den unten unter Kernfeldern aufgeführten.

Ü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.

POST/api/v1/analyses/{id}/feedback
{
  "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.

200 OK
{
  "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"
}

Datenschutz und Sicherheit

Berichte sind ausschließlich Entscheidungshilfen und dürfen nicht als alleinige Grundlage für Einstellungsentscheidungen dienen. Eine menschliche Prüfung und unabhängige Bewertung sind immer erforderlich.
Jede Partnerintegration ist per API-Schlüssel isoliert: Sie können nur Analysen abrufen, die mit Ihren Zugangsdaten erstellt wurden.
Verwenden Sie client.id und candidate.id, um Analysen Datensätzen in Ihrem ATS zuzuordnen.
Optionaler CV-Text in der Anfrage wird für die Analyse verwendet und nicht als separates Dokument gespeichert; der generierte Bericht (der CV-Inhalte widerspiegeln kann) wird verschlüsselt aufbewahrt, damit er an Ihre Integration zurückgeliefert werden kann.
Daten werden in EU-Infrastruktur mit Verschlüsselung im Ruhezustand gespeichert.
Candidate Intelligence liefert Empfehlungen und Validierungssignale, trifft aber keine automatisierten Einstellungsentscheidungen im Namen der Nutzer.
Die Datenverarbeitung folgt den Grundsätzen der Datenminimierung und Zweckbindung.

⚖️ 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.