Skip to content

Latest commit

 

History

History
994 lines (819 loc) · 33.6 KB

File metadata and controls

994 lines (819 loc) · 33.6 KB

Karat GraphQL API Reference

This document describes the Karat technical interview platform's GraphQL API.


Authentication & Endpoint

POST https://{subdomain}.karat.io/api/v1/graphql
Authorization: Bearer {token}
Content-Type: application/json
Environment Variable Purpose
KARAT_SUBDOMAIN Your organization's Karat subdomain
KARAT_TOKEN API bearer token

Pagination

All collection queries use Relay-style cursor pagination:

query {
  candidacies(first: 50, after: "cursor_abc", filter: {...}, search: "term") {
    totalCount
    pageInfo { endCursor hasNextPage }
    nodes { ... }
  }
}
Parameter Type Purpose
first Int Page size (max items to return)
after String Cursor from pageInfo.endCursor of previous page
filter Input Resource-specific filter object
search String Full-text search (available on most queries)
orderBy Input Sort order (available on most queries)

Follow pageInfo.hasNextPage / pageInfo.endCursor to paginate through results.


Domain Model

Organizational Hierarchy

Organization
├── Group (vendor/partner team)
│   ├── Role (job opening)
│   │   ├── RoleStage (interview pipeline stage)
│   │   │   ├── AssessmentSchema (what questions to ask)
│   │   │   ├── AlignmentBar (scoring thresholds)
│   │   │   └── Rubric (evaluation criteria)
│   │   ├── JobRequisition (ATS job ID)
│   │   └── Candidacy (candidate + role = application)
│   │       ├── Interview (live technical interview)
│   │       ├── CodeChallenge (async coding test)
│   │       ├── PlatformAssessment (platform-based assessment)
│   │       └── Quiz (knowledge screening)
│   └── User (recruiter, hiring manager, interviewer)
└── OrgVendor (vendor partner company)

How a Candidate Gets Scored

  1. A Candidacy is created when a candidate applies to a Role
  2. The candidacy moves through RoleStages (quiz → shortform → core → platform → practical)
  3. At each stage, an assessment occurs (Interview, CodeChallenge, PlatformAssessment, or Quiz)
  4. For live interviews, a Karat Interview Engineer fills in a Rubric with observations
  5. The system computes CompetencyScores (one per competency, each containing AtomScores)
  6. CompetencyScores are weighted and summed into an overallScore (in CalibratedResultScoringSummary)
  7. The overallScore is compared against AlignmentBars (hiring thresholds) to produce a Recommendation
  8. The recommendation is one of: FAST_TRACK, INVITE_TO_NEXT_ROUND, REQUIRES_FURTHER_REVIEW, DO_NOT_PURSUE

Where Candidate Scores Live

The Scoring Chain

Interview
├── recommendation: InterviewRecommendation (the headline outcome)
├── result: Result
│   ├── overallThoughts: String (interviewer's written summary)
│   ├── overallFeedback: String
│   ├── wentWellFeedback: String
│   ├── workOnFeedback: String
│   └── recommendation: InterviewRecommendation
├── calibratedResultScoringSummary: CalibratedResultScoringSummary
│   ├── overallScore: Int (total weighted score)
│   ├── calibratedRecommendation: String
│   ├── competencyScores: [CompetencyScore]
│   │   ├── competencyName: String (e.g., "Problem Solving", "Code Quality")
│   │   ├── weightedScore: Int
│   │   ├── maxScore: Int
│   │   └── atomScores: [AtomScore]
│   │       ├── contentAtom: ContentAtom (the rubric item)
│   │       ├── rawScore: Int
│   │       ├── scaledScore: Int
│   │       └── maxScore: Int
│   ├── skillScores: [SkillScore]
│   ├── qualityScores: [...]
│   └── overallScoreBars: [...] (the thresholds that determine the recommendation)
├── performanceStats: PerformanceStats
│   ├── score: Int (overall numeric score)
│   ├── percentile: Int (vs. all candidates for this role)
│   ├── smoothedPercentile: Int
│   ├── totalScores: Int (population size)
│   ├── scoreDistribution: [...]
│   ├── competenciesPerformanceStats: [...] (per-competency percentiles)
│   └── poolCompetenciesPerformanceStats: [...] (cross-role percentiles)
├── richResult: RichResult
│   ├── recommendation: String
│   ├── textSummary: String
│   ├── structuredSummary: StructuredSummary
│   │   ├── qualities: [SummaryQuality] (strengths/weaknesses)
│   │   └── questions: [SummaryQuestion] (per-question summary)
│   ├── integrityState: String
│   ├── submitterEmail: String
│   └── link: String
├── interviewSummary: InterviewSummary
│   ├── summary: String (AI-generated summary)
│   └── flags: String
└── details: InterviewDetails
    ├── competencies: [...] (competency breakdown)
    ├── recommendation: InterviewRecommendation
    ├── interviewState: InterviewState
    └── integrityState: InterviewIntegrityState

How to Retrieve Scores

Option 1: Via the candidacies query — fetch candidacies with nested interviews and scoring:

query {
  candidacies(first: 50, filter: { role: "role-id", interviewState: "SHIPPED" }) {
    nodes {
      id
      status
      candidate { id name email }
      role { id name }
      interviews {
        nodes {
          id
          state
          recommendation
          result {
            id
            overallThoughts
            overallFeedback
            wentWellFeedback
            workOnFeedback
            recommendation
          }
          calibratedResultScoringSummary {
            overallScore
            calibratedRecommendation
            competencyScores {
              competencyName
              weightedScore
              maxScore
              atomScores {
                contentAtom { ... }
                rawScore
                scaledScore
                maxScore
              }
            }
          }
          performanceStats {
            score
            percentile
            smoothedPercentile
            totalScores
          }
          richResult {
            recommendation
            textSummary
            structuredSummary {
              qualities { ... }
              questions { ... }
            }
          }
          interviewSummary {
            summary
            flags
          }
        }
      }
    }
  }
}

Option 2: Via the interviews query — query interviews directly with richer filtering:

query {
  interviews(first: 50, filter: { role: "role-id", state: "SHIPPED" }) {
    nodes {
      id
      recommendation
      candidacy { id candidate { name email } }
      calibratedResultScoringSummary { overallScore competencyScores { ... } }
      performanceStats { score percentile }
    }
  }
}

Option 3: Via interviewDetails — single-interview deep dive:

query {
  interviewDetails(interviewId: "interview-id") {
    id
    recommendation
    competencies { ... }
    interviewState
    integrityState
    candidacyStatus
  }
}

Core Resources

Candidacy

The central entity — represents a candidate applying for a specific role.

Field Type Description
id ID Unique identifier
status CandidacyStatus Current pipeline status
archived Boolean Whether archived
candidate Candidate The person being interviewed
recruiter User Recruiter who owns this candidacy
role Role The job role
group Group The vendor/partner group
vendor OrgVendor The vendor partner
interviews InterviewConnection Live interviews (paginated)
codeChallenges CodeChallengeConnection Code challenges (paginated)
platformAssessments PlatformAssessmentConnection Platform assessments
quizzes QuizConnection Quiz assessments
assessments AssessmentConnection All assessments
atsUrl String ATS application URL
atsCandidateId String ATS candidate identifier
atsApplicationId String ATS application identifier
jobRequisitionId String Job requisition ID
lastStatusUpdate DateTime When status last changed
createdAt DateTime When created
resultSharingLink String Shareable link to results
currentCandidacyStage CandidacyStage Current pipeline stage
interviewSeriesTemplate InterviewSeriesTemplate Multi-stage template
activeFunnelInterviews InterviewConnection Active funnel interviews
activityStream CandidacyActivityConnection Activity history
rejectionReason String Why declined
matchConfidence String ATS match confidence
source String Candidate source

Query: candidacies(filter: CandidacyFilter, search: String)

Filter fields:

Field Description
id Candidacy ID
status Pipeline status
group Group ID (legacy name for vendor filtering)
role Role ID
recruiter Recruiter user ID
candidate Candidate ID
vendor Vendor ID
jobRequisition Job requisition ID
archived Include/exclude archived
demo Include/exclude demo candidacies
interviewState Filter by interview state
codeChallengeState Filter by code challenge state
platformAssessmentState Filter by platform assessment state
quizState Filter by quiz state
integrityState Filter by integrity review state
atsUrl Exact ATS URL match
atsUrlSubstring Partial ATS URL match
applicationId ATS application ID
opportunityId ATS opportunity ID
createdAfter / createdBefore Date range
lastStatusUpdateAfter / lastStatusUpdateBefore Status update date range
activeFunnel Active funnel filter
includeRedoEligible Include redo-eligible candidacies

CandidacyStatus values: CODE_CHALLENGE_PENDING, CODE_CHALLENGE_READY_TO_REVIEW, INTERVIEW_PENDING, INTERVIEW_READY_TO_REVIEW, INVITED_TO_PHONE_SCREEN, INVITED_TO_ONSITE_INTERVIEW, QUIZ_PENDING, QUIZ_READY_TO_REVIEW, DECLINED_AT_KARAT_CODE_CHALLENGE, DECLINED_AT_KARAT_INTERVIEW, DECLINED_AT_PHONE_SCREEN, DECLINED_AT_ONSITE_INTERVIEW, OFFER_OUTSTANDING, OFFER_ACCEPTED, OFFER_DECLINED, INACTIVE


Interview

A live technical interview conducted by a Karat Interview Engineer.

Field Type Description
id ID Unique identifier
state InterviewState Lifecycle state
recommendation InterviewRecommendation Outcome (the "word score")
result Result Interviewer's written feedback
calibratedResultScoringSummary CalibratedResultScoringSummary Numeric scores and competency breakdown
performanceStats PerformanceStats Percentile ranking
richResult RichResult Structured result with summary
interviewSummary InterviewSummary AI-generated summary
structuredResultSummary StructuredSummary Structured quality/question breakdown
details InterviewDetails Competency details
interviewEngineer User The Karat interviewer
interviewSupport User Support engineer
candidacy Candidacy Parent candidacy
role Role Role being interviewed for
schema AssessmentSchema Assessment structure used
questions QuestionConnection Questions asked
recording Recording Interview recording
resultReviews [ResultReview] Client reviews of the result
qualityControl QualityControl QC review
interviewMoments [...] Key moments during interview
isRedo Boolean Whether this is a redo
nextRedoInterview Interview Next redo if applicable
previousRedoInterview Interview Previous attempt
redoEligible Boolean Whether redo is available
cheatingDetected Boolean Cheating flag
cheatingObservations [CheatingObservation] What was observed
integrityState InterviewIntegrityState Integrity review state
startTime / endTime DateTime Interview window
shippedTime DateTime When results were delivered
createdAt / updatedAt DateTime Timestamps
interviewType InterviewType LIVE or KARAT_NOW
resultSummary String Text summary
turnaroundTime Int Result delivery time

Query: interviews(filter: InterviewFilter, search: String)

InterviewFilter fields:

Field Description
id Interview ID
group Group ID
role Role ID
roleStage Role stage ID
recruiter Recruiter user ID
vendor Vendor ID
jobRequisition Job requisition ID
interviewEngineer Interviewer user ID
recommendation Filter by recommendation
state Interview state
integrityState Integrity state
cheatingDetected Boolean
candidacyStatus Candidacy status
archived Include/exclude archived
demo Include/exclude demo
startTimeAfter / startTimeBefore Date range
originalInterviewsOnly Exclude redos
redoInterviewsOnly Only redos
lateCancelsOnly Only late cancellations
resultReviewStatus Result review state
resultReviewSubmitMethod How result was submitted
qualityControlState QC state
qualityControlReviewer QC reviewer
funnelMetrics For funnel analytics

InterviewState values: SCHEDULINGSCHEDULEDINTERVIEWINGPROCESSINGCREATINGAWAITING_QCQCHOLDFINAL_CHECKCONTENT_CHECKREADY_TO_SHIPSHIPPINGSHIPPED | CANCELLED | RESCHEDULED

InterviewRecommendation values: DO_NOT_PURSUE, REQUIRES_FURTHER_REVIEW, INVITE_TO_NEXT_ROUND, FAST_TRACK

InterviewIntegrityState values: NO_CHEATING_DETECTED, POTENTIAL_CHEATING, CLIENT_CONFIRMED_CHEATING, CLIENT_CONFIRMED_NO_CHEATING


Scoring Types

Result

The Interview Engineer's qualitative feedback.

Field Type Description
id ID Unique identifier
overallThoughts String General impressions
overallFeedback String Overall feedback text
wentWellFeedback String What went well
workOnFeedback String Areas to improve
recommendation InterviewRecommendation Recommendation from result
createdAt / updatedAt DateTime Timestamps

CalibratedResultScoringSummary

The numeric score breakdown — this is where individual test scores live.

Field Type Description
overallScore Int Total weighted score across all competencies
calibratedRecommendation String Recommendation after calibration
competencyScores [CompetencyScore] Per-competency score breakdown
skillScores [SkillScore] Per-skill score breakdown
qualityScores [...] Quality dimension scores
overallScoreBars [...] Thresholds (hiring bar)

CompetencyScore

Score for a single competency (e.g., "Problem Solving", "Code Quality", "Communication").

Field Type Description
competencyName String Name of the competency
weightedScore Int Weighted score earned
maxScore Int Maximum possible score
atomScores [AtomScore] Individual rubric item scores

AtomScore

The most granular score — a single rubric item within a competency.

Field Type Description
contentAtom ContentAtom The rubric item being scored
rawScore Int Unweighted score
scaledScore Int Weighted/scaled score
maxScore Int Maximum possible

PerformanceStats

How this candidate compares to others.

Field Type Description
score Int Overall numeric score
percentile Int Percentile rank (vs. same role)
smoothedPercentile Int Smoothed percentile
totalScores Int Population size
scoreDistribution [...] Score distribution data
competenciesPerformanceStats [...] Per-competency percentiles
poolCompetenciesPerformanceStats [...] Cross-role percentiles

RichResult

Client-facing result package.

Field Type Description
recommendation String Recommendation label
textSummary String Plain-text summary
structuredSummary StructuredSummary Structured breakdown
integrityState String Integrity state
submitterEmail String Who submitted the result
link String Link to full result

StructuredSummary

Structured breakdown of the interview.

Field Type Description
qualities [SummaryQuality] Candidate strengths and weaknesses
questions [SummaryQuestion] Per-question performance summary

InterviewSummary

AI-generated summary of the interview.

Field Type Description
summary String The generated summary text
flags String Flags/alerts

CodeChallenge

An asynchronous coding test.

Field Type Description
id ID Unique identifier
state CodeChallengeState Lifecycle state
recommendation CodeChallengeRecommendation Outcome
candidacy Candidacy Parent candidacy
scorer User Who scored it
startTime / endTime DateTime Test window
link String Candidate-facing link
createdAt / updatedAt DateTime Timestamps

Query: codeChallenges(filter: CodeChallengeFilter, search: String)

CodeChallengeState values: INVITED, REGISTERED, IN_PROGRESS, SUBMITTED, SCORING, NEEDS_DECISION, TO_INVITE, INVITE_INTERVIEW, SEND_TO_CLIENT, DECLINED, HOLD, RESET

CodeChallengeRecommendation values: ADVANCE, DECLINE, REVIEW


PlatformAssessment

A platform-based assessment (async, not live).

Field Type Description
id ID Unique identifier
state PlatformAssessmentState Lifecycle state
candidacy Candidacy Parent candidacy
role Role Role being assessed for
roleStage RoleStage Pipeline stage
roleStageAssessmentType RoleStageAssessmentType Assessment type
candidacyStage CandidacyStage Candidacy stage
result JSON Assessment result (JSON blob)
questionsSummary JSON Per-question summary
testRunnerResult TestRunnerResult Automated test results
codeSnapshots JSON Code snapshots
startTime / endTime DateTime Assessment window
video String Video recording URL
published Boolean Whether results are published
link String Assessment link
codePlaybackUrl String Code playback URL
createdAt / updatedAt DateTime Timestamps

Query: platformAssessments(filter: PlatformAssessmentFilter, search: String)

PlatformAssessmentFilter fields: id, group, role, roleStage, recruiter, state, candidacyStatus, vendor, jobRequisition

PlatformAssessmentState values: PLANNED, IN_PROGRESS, READY_TO_REVIEW, COMPLETED


Quiz

A knowledge screening quiz.

Field Type Description
id ID Unique identifier
state QuizState Lifecycle state
recommendation QuizRecommendation Outcome
result QuizResult Score details
candidacy Candidacy Parent candidacy
candidate Candidate The candidate
role Role Role being screened for
selectedTopic QuizTopic Topic chosen
schema QuizSchema Quiz structure
quizTopicResults [...] Per-topic results
source String How the quiz was initiated
wasRedone Boolean Whether it was retaken
startedAt / endedAt DateTime Quiz window
invitedAt DateTime When invited
link String Quiz link
createdAt / updatedAt DateTime Timestamps

QuizResult fields: details (String), recommendation (QuizRecommendation), invitedAt, takenAt

Query: quizzes(filter: QuizFilter, search: String)

QuizState values: INVITED, REGISTERED, STARTED, SHIPPED, ABANDONED


Role

A job opening configured with assessment settings.

Field Type Description
id ID Unique identifier
name String Role title
state RoleState LIVE, PAUSED, CLOSED
type RoleType Role type
assessmentType RoleStageAssessmentType Default assessment type
description String Role description
archived Boolean Whether archived
candidatesCount Int Number of candidates
group Group Parent group
organization Organization Parent organization
jobFamily JobFamily Job family grouping
roleStages [RoleStage] Pipeline stages
initialRoleStage RoleStage First stage
experienceLevels [RoleExperienceLevel] Experience levels
locations [RoleLocation] Locations
interviews InterviewConnection All interviews
memberArchetype Archetype Role archetype
competencyEnabled Boolean Whether competency scoring is enabled
displayCompetencyResults Boolean Whether competency results shown to clients
allowRedos Boolean Whether redos are allowed
passedCandidaciesRate Int Pass rate
calibratedResultCandidaciesCount Int Calibrated results count
calibratedResultCandidaciesPassRate Int Calibrated pass rate
createdAt / updatedAt DateTime Timestamps

RoleState values: LIVE, PAUSED, CLOSED, DRAFT

RoleStageAssessmentType values: quiz, shortform, core, platform, practical


RoleStage

A stage in the interview pipeline for a role.

Field Type Description
id ID Unique identifier
name String Stage name
assessmentType RoleStageAssessmentType What kind of assessment
order Int Position in pipeline
role Role Parent role
schemas [AssessmentSchema] Assessment schemas used
prioritySchema AssessmentSchema Primary schema
rubric Rubric Scoring rubric
alignmentBars [AlignmentBar] Scoring thresholds
questions [Question] Questions available
quizRegistrationLinks [QuizRegistrationLink] Quiz links
state RoleStageState Stage state
recordingEnabled Boolean Whether interviews are recorded

AssessmentSchema

Defines the structure of an interview — what questions to ask.

Field Type Description
id ID Unique identifier
name String Schema name
assessmentType AssessmentType Type (e.g., technical_phone_screen)
competencies [Competency] Competencies being assessed
questions [Question] Questions in this schema
categories [...] Question categories
content [...] Content items
duration Int Expected duration in minutes
archived Boolean Whether archived
roles [Role] Roles using this schema
scriptMessage ScriptMessage Interview script

Query: assessmentSchemas(filter: AssessmentSchemaFilter, search: String) or assessmentSchema(id: ID)


Competency

A skill being evaluated (e.g., "Problem Solving", "Code Quality").

Field Type Description
id ID Unique identifier
name String Competency name
description String What it measures
category CompetencyCategory Category

Query: competencies(filter: CompetencyFilter)

CompetencyFilter fields: id, name

CompetencyCategory values: UNCATEGORIZED, GENERAL, CODING, KNOWLEDGE, QUESTION_AND_ANSWER, CODE_REVIEW, REVIEW_AND_UPDATE_CODE, HANDS_ON_EXERCISE, WHITEBOARD, SCENARIOS, LLM_CODING, PROJECT_CODING


Rubric

Evaluation criteria used by Interview Engineers to score candidates.

Field Type Description
id ID Unique identifier
name String Rubric name
group Group Owner group
criteria [...] Scoring criteria items
roleStages [...] Role stages using this rubric
archived Boolean Whether archived

Query: rubric(id: ID) or rubricsForGroup(filter: RubricsFilter)


AlignmentBar

Scoring thresholds that determine the recommendation for an interview.

Field Type Description
id ID Unique identifier
name String Bar name
lowBar Int Low threshold
mediumBar Int Medium threshold
highBar Int High threshold
weight Int Weight in overall score
competencies [Competency] Competencies measured
group Group Owner group

ResultReview

A client's review of an interview result.

Field Type Description
id ID Unique identifier
interview Interview The interview
result Result The result being reviewed
review ResultReviewReview The review content
reviewerName String Reviewer name
reviewerId ID Reviewer ID
user User Reviewer user
submitMethod String How the review was submitted
createdAt / updatedAt DateTime Timestamps

Query: resultReviews(filter: ResultReviewFilter, search: String) or resultReviewsByInterviewAndUser(interviewUuid: ID, userId: ID)

ResultReviewFilter fields: group, role, alignmentEngineer, recommendation, awaitingReviewOnly


QualityControl

Internal QC review of an interview's quality.

Field Type Description
id ID Unique identifier
interviewId ID The interview
meetsExpectations Boolean Whether it meets standards
state QualityControlState Review state
reviewer User QC reviewer
scoring QualityControlFeedback Scoring quality
conduct QualityControlFeedback Conduct quality
guidelines QualityControlFeedback Guidelines adherence
writeUp QualityControlFeedback Write-up quality
feedback String Written feedback
notes String Notes
priority QualityControlPriority Priority level

Query: qualityControls(filter: QualityControlFilter)


Question

An interview question.

Field Type Description
id ID Unique identifier
title String Question title
internalTitle String Internal title
prompt String Question text
guide String Interviewer guide
competency Competency Competency being assessed
type String Question type
duration Int Expected duration (minutes)
version String Version number
state QuestionState Lifecycle state
content JSON Rich content
automaticTestCases [AutomaticTestCase] Automated test cases
archived Boolean Whether archived

Query: questions(filter: QuestionFilter, search: String) or question(id: ID)


Candidate

A person being interviewed.

Field Type Description
id ID Unique identifier
name String Full name
email String Email address
phone String Phone number
candidacies CandidacyConnection All candidacies for this person
organization Organization Associated organization
resumeUrl / safeResumeUrl String Resume links
githubUrl String GitHub profile
linkedinUrl String LinkedIn profile
stackoverflowUrl String Stack Overflow profile
blogUrl String Blog URL
timeZone String Time zone
similarCandidates CandidateConnection Similar candidates

Query: candidates(...) or candidate(id: ID)


User

A platform user (recruiter, hiring manager, interviewer, admin).

Field Type Description
id ID Unique identifier
name String Full name
email String Email
phone String Phone
clientUserType ClientUserType Role on platform
type UserType Internal type
timeZone String Time zone
lastSeen DateTime Last active
disabled Boolean Whether disabled
groups GroupConnection Group memberships
organization Organization Organization
interviewerLevel InterviewerLevel Interviewer tier
vendor OrgVendor Vendor association
teams [UserTeam] Team memberships
totalInterviewsCompleted Int Interview count
totalQualityControlsCompleted Int QC count

Organization

A client company.

Field Type Description
id ID Unique identifier
name String Company name
groups GroupConnection Groups/teams
vendors OrgVendorConnection Vendor partners
jobRequisitions JobRequisitionConnection Job requisitions
alignmentEngineer User Assigned alignment engineer
customerSuccessManager User Assigned CSM
createdAt / updatedAt DateTime Timestamps

Group

A vendor or partner team.

Field Type Description
id ID Unique identifier
name String Group name
type GroupType Group type
active Boolean Whether active
archived Boolean Whether archived
organization Organization Parent organization
roles RoleConnection Roles in this group
users UserConnection Users in this group
recruiters UserConnection Recruiters
alignmentBars [AlignmentBar] Scoring thresholds
atsStageMappings [AtsStageMapping] ATS stage mappings
candidateFacingName String Display name for candidates
enableJobRequisitionId Boolean Whether job req ID is enabled
enableOrgVendorId Boolean Whether vendor ID is enabled

Analytics Queries

Funnel Statistics

query {
  funnelStats(
    startDate: "2024-01-01T00:00:00Z"
    endDate: "2024-12-31T23:59:59Z"
    organizationId: "org-id"
    roleId: ["role-id"]
  ) {
    total
    fastTrack
    inviteToNextRound
    requireFurtherReview
    doNotPursue
    aboveBar
    belowBar
    integrity
    inactiveOther
  }
}

Activity Metrics

query {
  activityMetrics(
    startTime: "2024-01-01T00:00:00Z"
    endTime: "2024-12-31T23:59:59Z"
    period: "month"
    role: ["role-id"]
    group: ["group-id"]
  ) { ... }
}

Vendor Performance

query {
  vendorPerformanceAggregations(
    organizationId: "org-id"
    startDate: "2024-01-01T00:00:00Z"
    endDate: "2024-12-31T23:59:59Z"
  ) {
    vendorName
    roleName
    interviewsCount
    interviewsAboveBarCount
    interviewsNoShowCount
    interviewsLateCancelCount
    candidaciesCreatedCount
    candidaciesCompletedCount
    shippedCandidaciesCount
    placementsCount
  }
}

Role Distribution Statistics

query {
  roleDistributionStats(
    startDate: "2024-01-01T00:00:00Z"
    endDate: "2024-12-31T23:59:59Z"
    roleIds: ["role-id"]
  ) { ... }
}

Additional Queries

Query Arguments Returns Purpose
interviewDetails interviewId: ID! InterviewDetails Deep interview data with competencies
interviewMoments interviewId: ID!, filter: InterviewMomentFilter [InterviewMoment] Key moments during interview
calculateRecommendations filter: InterviewFilter, recommendationEngine: RecommendationEngine [...] Recalculate recommendations
computeRecommendation resultJson: JSON! [...] Compute recommendation from raw result
recording id: ID Recording Interview recording
interviewByUuid uuid: ID! Interview Lookup by UUID
resultReviewsByInterviewAndUser interviewUuid: ID!, userId: ID! ResultReview Specific review
archetypes / archetype id: ID [Archetype] Role templates
jobFamilies [JobFamily] Job family groupings
languages [Language] Supported programming languages
cohorts [...] Cohort groupings
performanceIncidents filter: PerformanceIncidentFilter [PerformanceIncident] IE performance issues
questionPools filter: QuestionPoolFilter [QuestionPool] Question collections

Mutations

Mutation Purpose
createInvitation Invite a candidate to interview
createClientUser Create a platform user
bulkUpdateCandidacyStatus Update candidacy statuses in bulk

Cheating & Integrity

Interviews have an integrity pipeline:

CheatingObservation Description
someoneElseHeard Someone else heard in the background
pastedSolution Solution was pasted in
perfectSolutionBadExplanation Perfect code but couldn't explain it
matchesOnlineSolution Solution matches online sources
approachDoesntMatchSolution Verbal approach doesn't match written code
topDownCode Code written top-down (unusual for live coding)
looksDown Candidate looks down frequently
noEdgeCases Missing edge case handling
highlightsText Highlights text (copy/paste behavior)
other Other observation

Schema Introspection

The scripts/ directory contains tools for exploring the schema:

# Full schema dump (types + queries)
KARAT_SUBDOMAIN=xxx KARAT_TOKEN=xxx ./scripts/introspect-all.sh
# Output: scripts/schema-full.json

# Scoring and detail types
KARAT_SUBDOMAIN=xxx KARAT_TOKEN=xxx ./scripts/introspect-scoring.sh
# Output: scripts/schema-scoring.json

# Single type
KARAT_SUBDOMAIN=xxx KARAT_TOKEN=xxx ./scripts/introspect-type.sh InterviewResult

# Query arguments
KARAT_SUBDOMAIN=xxx KARAT_TOKEN=xxx ./scripts/introspect-query-args.sh candidacies