This document describes the Karat technical interview platform's GraphQL API.
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 |
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.
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)
- A Candidacy is created when a candidate applies to a Role
- The candidacy moves through RoleStages (quiz → shortform → core → platform → practical)
- At each stage, an assessment occurs (Interview, CodeChallenge, PlatformAssessment, or Quiz)
- For live interviews, a Karat Interview Engineer fills in a Rubric with observations
- The system computes CompetencyScores (one per competency, each containing AtomScores)
- CompetencyScores are weighted and summed into an overallScore (in
CalibratedResultScoringSummary) - The overallScore is compared against AlignmentBars (hiring thresholds) to produce a Recommendation
- The recommendation is one of:
FAST_TRACK,INVITE_TO_NEXT_ROUND,REQUIRES_FURTHER_REVIEW,DO_NOT_PURSUE
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
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
}
}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
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: SCHEDULING → SCHEDULED → INTERVIEWING → PROCESSING → CREATING → AWAITING_QC → QC → HOLD → FINAL_CHECK → CONTENT_CHECK → READY_TO_SHIP → SHIPPING → SHIPPED | 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
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 |
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) |
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 |
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 |
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 |
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 |
Structured breakdown of the interview.
| Field | Type | Description |
|---|---|---|
qualities |
[SummaryQuality] | Candidate strengths and weaknesses |
questions |
[SummaryQuestion] | Per-question performance summary |
AI-generated summary of the interview.
| Field | Type | Description |
|---|---|---|
summary |
String | The generated summary text |
flags |
String | Flags/alerts |
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
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
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
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
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 |
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)
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
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)
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 |
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
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)
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)
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)
A platform user (recruiter, hiring manager, interviewer, admin).
| Field | Type | Description |
|---|---|---|
id |
ID | Unique identifier |
name |
String | Full name |
email |
String | |
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 |
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 |
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 |
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
}
}query {
activityMetrics(
startTime: "2024-01-01T00:00:00Z"
endTime: "2024-12-31T23:59:59Z"
period: "month"
role: ["role-id"]
group: ["group-id"]
) { ... }
}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
}
}query {
roleDistributionStats(
startDate: "2024-01-01T00:00:00Z"
endDate: "2024-12-31T23:59:59Z"
roleIds: ["role-id"]
) { ... }
}| 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 |
| Mutation | Purpose |
|---|---|
createInvitation |
Invite a candidate to interview |
createClientUser |
Create a platform user |
bulkUpdateCandidacyStatus |
Update candidacy statuses in bulk |
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 |
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