---
title: "Get interview status, scorecard, and transcript"
method: GET
path: "/api/public/v1/interviews/{interview_id}"
tags: ["Public API v1", "Public API v1"]
---

# Get interview status, scorecard, and transcript

`GET /api/public/v1/interviews/{interview_id}`

## Request

- Base URL: `https://api.thebetterhire.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.thebetterhire.ai/api/public/v1/interviews/{interview_id}`
- Auth: HTTP bearer

Retrieve the full interview analysis including scorecard with competency scores, timestamped evidence, action plan, communication metrics, and transcript. Evidence items include timestamps — use with recording_url for audio playback. The scorecard covers every interview kind: AI screenings, AI interviews and submitted recordings. Competencies the interview never reached are omitted from `competencies` and listed in `not_assessed`; `coverage_summary`, `score_confidence` and `transcript_quality` say how much of the rubric the score rests on. A completed interview with `scorecard: null` carries a top-level `transcript_quality` whose label ('partial' or 'invalid') says the candidate said too little to score, with the word count the gate measured.

## Path parameters

- `interview_id` string, required

## Response `200`

Successful Response

- InterviewDetailResponse: Full interview detail with scorecard, transcript, and recording.
  - `id` string, required: Unique interview ID.
  - `status` string, required: 'pending', 'processing', 'completed', 'failed'.
  - `transcript_status` string, required: Transcription sub-status.
  - `analysis_status` string, required: Analysis sub-status.
  - `input_mode` string, required: 'meeting' or 'recording'.
  - `created_at` string, required: ISO 8601 timestamp.
  - `candidate` CandidateInfo, required: Candidate identification.
    - `id` string, required: Candidate ID. Use for subsequent interviews and debriefs.
    - `name` string, required: Candidate full name.
    - `email` string, nullable: Candidate email.
  - `role` string, required: Job role.
  - `scorecard` Scorecard: AI-generated interview analysis scorecard. The core product output.
    - `overall_score` integer, required: Overall candidate score 0-100.
    - `recommendation` string, required: Hiring recommendation: 'strong_hire', 'hire', 'maybe', 'no_hire'.
    - `summary` ScorecardSummary, required: Bottom Line Up Front — executive summary of the interview.
      - `strengths` string[]: Key strengths identified.
      - `concerns` string[]: Key areas of concern.
      - `next_steps` string[]: Recommended next steps.
    - `competencies` CompetencyScore[]: Per-competency scores with evidence and concerns.
      - `name` string, required: Competency name.
      - `score` integer, required: Score 0-100.
      - `assessment` string, required: Assessment badge: 'Excellent', 'Strong', 'Good', 'Moderate', 'Needs Work'.
      - `reasoning` string, nullable: AI reasoning for this score.
      - `evidence` EvidenceItem[]: Timestamped quotes from the transcript supporting this score.
        - `text` string, required: Direct quote from the transcript.
        - `speaker` string, nullable: Who said it: 'candidate' or 'interviewer'.
        - `start_seconds` number, nullable: Start time in seconds into the recording. Use with recording_url to play this moment.
        - `end_seconds` number, nullable: End time in seconds into the recording.
      - `concerns` string[]: Specific concerns identified for this competency.
      - `coverage` string, nullable: How much of this competency the interview actually reached: 'covered', 'partial', 'asserted_only', 'resume_only' or 'not_reached'. Null on analyses that predate coverage tracking.
      - `follow_up_questions` string[]: Questions the interviewer would have asked next on this competency (AI screenings). Empty where the analysis carries none.
    - `action_plan` ActionPlanItem[]: Prioritized next steps for the hiring process.
      - `priority` string, required: 'critical', 'high', or 'medium'.
      - `title` string, required: Action title.
      - `action` string, required: Detailed action description.
      - `deadline` string, nullable: Suggested deadline.
    - `communication` CommunicationAnalysis: Speech and communication quality metrics from the interview.
      - `fluency` number, nullable: Fluency score 0-100.
      - `fillers_per_min` number, nullable: Filler words per minute.
      - `avg_pause_seconds` number, nullable: Average pause duration in seconds.
      - `words_per_minute` integer, nullable: Speaking pace.
      - `duration_seconds` integer, nullable: Total interview duration in seconds.
      - `word_count` integer, nullable: Total words spoken by candidate.
      - `rating` string, nullable: Overall communication rating.
      - `filler_words` FillerWord[]: Individual filler word counts.
        - `word` string, required
        - `count` integer, required
    - `not_assessed` string[]: Names of competencies the interview did not reach, so they carry no score and are absent from `competencies`. Empty when everything was scored.
    - `coverage_summary` object, nullable: Counts by coverage level across the role's competencies: total, covered, partial, not_reached, resume_only, asserted_only, unscored_count. Null on analyses that predate coverage tracking.
    - `score_confidence` string, nullable: How much of the rubric the score rests on: 'high', 'medium' or 'low'.
    - `calibrated_for_level` string, nullable: The experience level the scores were calibrated to, when one was applied: 'entry' for intern / graduate / first-job roles, where projects and coursework count as evidence and business outcomes are not expected. Null means the standard bar.
    - `transcript_quality` string, nullable: Transcript-quality gate label: 'full', 'partial' or 'invalid'.
    - `band` string, nullable: Overall band on the canonical ladder: 'Excellent', 'Strong', 'Good', 'Moderate' or 'Needs Work'. Null on analyses that predate banding.
  - `transcript` CoreDomainsPublicApiScorecardTranscriptResponse: Full interview transcript with speaker-labeled, timestamped segments.
    - `text` string, required: Full transcript as plain text.
    - `segments` CoreDomainsPublicApiScorecardTranscriptSegment[]: Speaker-labeled segments with timestamps. Use with recording_url for playback.
      - `speaker` string, required: 'interviewer' or 'candidate'.
      - `text` string, required: What was said.
      - `start_seconds` number, required: Start time in seconds.
      - `end_seconds` number, required: End time in seconds.
    - `duration_seconds` integer, nullable: Total duration in seconds.
  - `recording_url` string, nullable: URL of the interview recording. Use with evidence timestamps for playback.
  - `metadata` object, nullable: Custom metadata from submission.
  - `error` string, nullable: Error message if failed.
  - `failure_reason` string, nullable: Why the interview ended without a call, when it did. 'never_joined': nobody started it within its join window; 'cancelled_by_integrator': you cancelled it before it started. Both mean nothing was charged and nothing went wrong — read them as 'did not happen', not as a failure. Other values describe a meeting bot or processing failure. Null otherwise.
  - `joinable` boolean, nullable: For interviews the candidate joins by link: true while the link can still be started. False once started or finished, once cancelled, or once its join window passed. Null for meeting and recording interviews. Reuse the link while true; start a new interview when false.
  - `join_expires_at` string, nullable: For interviews created through this API: when the link stops working if nobody has started it — one hour after `scheduled_at`, or after creation when unbooked. Null when no window applies.
  - `transcript_quality` TranscriptQualitySummary: Why a completed interview has, or has not, a scorecard (0003 §6c).
    - `label` string, required: 'full' — scored. 'partial' or 'invalid' — the transcript-quality gate skipped scoring (the candidate said too little), so `scorecard` is null.
    - `candidate_word_count` integer, required: Words the candidate spoke, as the gate measured them.
    - `reasons` string[]: The gate's reasons, when it recorded any.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/thebetterhire/apis/interanalysis-b2b-api.md) · [All operations](https://skmtc.dev/thebetterhire/apis/interanalysis-b2b-api/llms.txt) · [OpenAPI document](https://skmtc.dev/thebetterhire/apis/interanalysis-b2b-api/revisions/c8ad03e900ea?raw)
