---
title: "Get full interview data"
method: GET
path: "/api/v2/interviews/{interview_id}/data"
tags: ["Interviews"]
---

# Get full interview data

`GET /api/v2/interviews/{interview_id}/data`

Retrieve the full interview results across all workflow steps. Includes per-agent results (scorecard, transcript, resume evaluation, SMS screening, form results). Returns status 'not_ready' if the candidate has not finished.

## Path parameters

- `interview_id` string, required

## Headers

- `X-API-KEY` string, nullable
- `Authorization` string, nullable
- `X-Workspace-Id` string, nullable

## Response `200`

Successful Response

- SingleResponseInterviewDataResponse
  - `data` InterviewDataResponse, required — Full interview results across all workflow steps. Contains the candidate details plus per-agent results. Fields for agents not in the posting's workflow will be null.
    - `object` 'interview_data' — Object type identifier.
    - `interview_id` string, required — Unique interview identifier.
    - `candidate_id` string, nullable — Candidate identifier (shared across postings).
    - `posting_id` string, required — Posting this interview belongs to.
    - `name` string, required — Candidate's full name.
    - `email` string, required — Candidate's email.
    - `score` number, nullable — Overall match score (0-100).
    - `status` string, required — Current candidate status: 'pending', 'in_progress', 'evaluating', 'completed', 'shortlisted', 'dismissed', 'knocked_out'. 'evaluating' means all workflow steps are done but the final score is still being computed.
    - `workflow` CandidateWorkflow — Overall workflow progress for a candidate.
      - `steps` WorkflowStepStatus[], required — Ordered list of workflow step statuses.
        - `step_id` string, required — Workflow step identifier.
        - `order` integer, required — Position in the workflow (1-based).
        - `status` string, required — Step status: 'not_started', 'in_progress', 'completed', 'knocked_out'.
        - `started` boolean, required — Whether the candidate has started this step.
        - `completed` boolean, required — Whether the candidate has completed this step.
        - `knocked_out` boolean — Whether the candidate was disqualified at this step.
        - `last_updated_at` number, nullable — Unix timestamp of the last status change.
      - `all_complete` boolean, required — True when every step has been completed.
      - `last_activity_at` number, nullable — Unix timestamp of the candidate's most recent interaction with any step.
    - `web_interview` WebInterviewResult — Complete results for the web interview (voice/video) step.
      - `object` 'web_interview_result' — Object type identifier.
      - `interview_id` string, required — Interview this result belongs to.
      - `match_score` integer, required — Overall match score (0-100).
      - `highlights` string[] — Candidate strengths identified by AI.
      - `lowlights` string[] — Areas for improvement.
      - `scorecard` ScorecardQuestion[] — Question-by-question evaluation.
        - `question_id` string, required — Unique question identifier.
        - `question_text` string, required — The question as asked to the candidate.
        - `score` integer, required — Score (1-10). 1 = weak, 10 = exceptional.
        - `score_weight` integer — Importance weight (1-10). Higher = more important.
        - `evaluation_summary` string, required — AI-generated summary of the candidate's response.
        - `evaluation_criteria` string, required — Criteria used to evaluate this question.
        - `score_1_description` string, nullable — What constitutes a score of 1.
        - `score_5_description` string, nullable — What constitutes a score of 5 (midpoint anchor on 1-10 scale).
        - `not_scored` boolean — If true, this question was informational only.
        - `rank` integer, required — Order in which this question was asked (1-based).
        - `transcript` TranscriptEntry[] — Dialogue for this specific question.
          - `speaker` string, required — Who spoke: 'Interviewer', 'Candidate', or 'System'.
          - `text` string, required — The spoken or written text.
          - `timestamp` number, required — Seconds from the start of the interview.
          - `timestamp_str` string, required — Human-readable timestamp (MM:SS).
      - `speech_score` number, nullable — Communication/speech score (0.0-5.0).
      - `transcript` TranscriptEntry[] — Full chronological interview transcript.
        - `speaker` string, required — Who spoke: 'Interviewer', 'Candidate', or 'System'.
        - `text` string, required — The spoken or written text.
        - `timestamp` number, required — Seconds from the start of the interview.
        - `timestamp_str` string, required — Human-readable timestamp (MM:SS).
      - `audio_recording_url` string, nullable — Signed URL to audio recording.
      - `video_recording_url` string, nullable — Signed URL to video recording (if enabled).
      - `tags` string[] — Tags extracted from the interview.
    - `resume` ResumeResult — Complete results for the resume screening step.
      - `object` 'resume_result' — Object type identifier.
      - `interview_id` string, required — Interview this result belongs to.
      - `overall_score` number, nullable — Weighted score across all criteria (0.0-100.0).
      - `is_eligible` boolean, nullable — Whether the candidate meets all eligibility criteria.
      - `score_criteria` ResumeScoreCriterion[] — Individual scoring criterion results.
        - `criteria_id` string, required — Unique criterion identifier.
        - `criteria_text` string, required — The criterion as defined by the recruiter.
        - `score` number, required — Score (0.0-10.0).
        - `confidence` number, required — AI confidence (0.0-1.0).
        - `reasons` string[] — AI reasoning for the score.
      - `eligibility_criteria` ResumeEligibilityCriterion[] — Individual eligibility criterion results.
        - `criteria_id` string, required — Unique criterion identifier.
        - `criteria_text` string, required — The criterion description.
        - `passed` boolean, required — Whether the candidate meets this criterion.
        - `confidence` number, required — AI confidence (0.0-1.0).
        - `reasons` string[] — AI reasoning for the pass/fail.
      - `resume_url` string, nullable — URL to the uploaded resume.
    - `sms` SMSResult — Complete results for the SMS screening step.
      - `object` 'sms_result' — Object type identifier.
      - `interview_id` string, required — Interview this result belongs to.
      - `is_eligible` boolean, required — Overall eligibility verdict.
      - `confidence` number, required — Overall AI confidence (0.0-1.0).
      - `criteria` SMSCriterionResult[] — Individual criterion results.
        - `criteria_id` string, required — Unique criterion identifier.
        - `criteria_text` string, required — The question asked via SMS.
        - `passed` boolean, required — Whether the candidate passed this criterion.
        - `confidence` number, required — AI confidence (0.0-1.0).
        - `is_dealbreaker` boolean — Whether failing this criterion disqualifies the candidate.
        - `reasons` string[] — AI reasoning.
      - `transcript` SMSMessage[] — Full SMS conversation.
        - `role` string, required — Message sender: 'agent' or 'candidate'.
        - `text` string, required — Message content.
        - `timestamp` number, nullable — Unix timestamp when the message was sent.
      - `messages_sent` integer, nullable — Total messages sent by the agent.
      - `messages_received` integer, nullable — Total messages received from the candidate.
    - `form` FormResult — Complete results for the form screening step.
      - `object` 'form_result' — Object type identifier.
      - `interview_id` string, required — Interview this result belongs to.
      - `overall_status` string, required — Overall form status: 'passed', 'failed', 'pending'.
      - `questions` FormQuestionResult[] — Individual question results.
        - `question_id` string, required — Unique question identifier.
        - `question_text` string, required — The question displayed on the form.
        - `question_type` string, required — Form field type: textarea, number, multiple-choice, file-upload, slider, date.
        - `is_knockout` boolean, required — Whether this is a knockout (pass/fail) question.
        - `passed` boolean, required — Whether the candidate's answer passed validation.
        - `candidate_answer` string, nullable — The candidate's submitted answer.
        - `expected_answer` string, nullable — The expected correct answer (for knockout questions).
    - `cheat_detection` CheatDetection — Aggregated cheat / integrity detection across interview steps. Present only when the posting has cheat detection configured. When ``enabled`` is false, detection sub-blocks are typically null (tab-switch activity may still be reported).
      - `object` 'cheat_detection' — Object type identifier.
      - `overall_confidence` number, nullable — Aggregate confidence across all signals (0.0-1.0).
      - `overall_ranking` integer, nullable — Severity ranking (1=no cheating, 5=highly detected).
      - `enabled` boolean, nullable — Whether cheat detection is enabled for the posting.
      - `threshold` integer, nullable — Configured detection threshold (0-100).
      - `types` string[], nullable — Enabled detection types, e.g. 'tab_switching', 'ai_scripted_answer', 'multiple_people', 'multiple_speakers', 'phone_detection', 'unusual_delays', 'facial_behaviour'.
      - `web_interview` WebInterviewCheat — Cheat-detection signals for the web (voice/video) interview step. Carries both the v1 detection signals (transcript / LLM / unusual-delay / video-integrity) and the cheat-detection v2 analysis (``integrity_analysis_v2``). ``tab_switch_detection`` is reported independently of either version.
        - `cheat_detection_result` TranscriptCheatResult — Transcript-based cheat detection (AI/scripted answers).
          - `cheating_detected` boolean, required — Whether cheating was detected in the transcript.
          - `cheating_confidence` number, required — Confidence of the detection (0.0-1.0).
          - `cheating_instances` CheatingInstance[] — Individual detected instances.
            - `reasoning` string, required — Why this was flagged as cheating.
            - `transcript_references` CheatTranscriptReference[] — Transcript snippets supporting this instance.
              - …
        - `llm_detection_result` LLMDetectionResult — Detection of LLM-generated speech during the interview.
          - `llm_generated_detected` boolean, required — Whether LLM-generated speech was detected.
          - `detection_confidence` number, required — Confidence of the detection (0.0-1.0).
          - `llm_detected_segments` LLMDetectedSegment[] — Segments flagged as LLM-generated.
            - `segment_text` string, required — The flagged segment text.
            - `segment_confidence` number, required — Confidence the segment is LLM-generated (0.0-1.0).
            - `reasoning` string, required — Why this segment was flagged.
          - `gptzero_metrics` GPTZeroMetrics — GPTZero scoring metrics for LLM detection.
            - `completely_generated_probability` number, required — Probability the content is fully AI-generated (0.0-1.0).
            - `overall_ai_score` number, required — Overall AI score (0.0-1.0).
            - `average_generated_probability` number, required — Average per-segment generated probability (0.0-1.0).
        - `unusual_delay_detection` UnusualDelayResult — Detection of unusual response delays (possible external assistance).
          - `delay_detected` boolean, required — Whether unusual delays were detected.
          - `delay_confidence` number, required — Confidence of the detection (0.0-1.0).
          - `unusual_delay_instances` object[] — Individual delay instances. Each references the question and response text along with timing details.
          - `overall_score` number, required — Overall suspiciousness score (0.0-1.0).
          - `confidence_level` number, required — Aggregate confidence level (0.0-1.0).
        - `tab_switch_detection` object, nullable — Tab-switch activity: total_count, events, and first/last switch timestamps.
        - `interview_integrity` InterviewIntegrityResult — Video integrity analysis (multiple people, eye/head tracking, phone, etc.).
          - `job_id` string, nullable — Integrity analysis job identifier.
          - `status` string, nullable — Analysis status.
          - `filename` string, nullable — Analyzed video filename.
          - `file_type` string, nullable — Analyzed file type.
          - `created_at` string, nullable — When the analysis was created.
          - `updated_at` string, nullable — When the analysis was last updated.
          - `result` object, nullable — Raw integrity result payload (multiple people, tracking, etc.).
          - `error` string, nullable — Error message, if the analysis failed.
          - `comprehensive` object, nullable — Comprehensive integrity breakdown (e.g. cheating timeline).
          - `aggregated` IntegrityAggregated — Aggregated, time-sorted movement events from video integrity analysis.
            - `movements` IntegrityMovementEvent[] — Chronologically sorted movement events.
              - …
        - `integrity_analysis_v2` object, nullable — Cheat-detection v2 analysis result — the raw multi-modal breach-detection payload from the integrity service (categories, breaches, alerts, scores). Null when v2 analysis is unavailable.
      - `resume` ResumeCheat — Cheat-detection signals for the resume step.
        - `gpt_detection` ResumeGptDetectionResult — AI-generation detection for the candidate's resume.
          - `version` string, required — Detector version.
          - `scanId` string, required — Scan identifier.
          - `documents` object[] — Per-document detection results (probabilities, etc.).
          - `neatVersion` string, nullable — Internal detector sub-version, if available.
          - `editorDocumentId` string, nullable — Associated editor document id, if available.
    - `metadata` object, nullable — Set of key-value pairs for storing additional information. Up to 50 keys, each key max 40 chars, each value max 500 chars.
    - `data` object, nullable — Additional candidate data supplied at ingestion time.
  - `meta` object, nullable — Optional metadata. Shape varies by endpoint.

## Other responses

- `401` — Invalid or missing API key.
- `404` — Resource not found.
- `422` — Validation Error
- `429` — Rate limit exceeded.

---

[API](https://skmtc.net/heymilo/apis/heymilo-public-api.md) · [All operations](https://skmtc.net/heymilo/apis/heymilo-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/heymilo/heymilo-public-api/revisions/a93ca9c2c777/schema)
