Skip to main content
POST
/
v1
/
jobs
/
{jobId}
/
applications
/
{applicationId}
/
scoring-jobs
@nova-sdk/api
import { Nova } from "@nova-sdk/api";

const nova = new Nova({
  apiKey: "sk_test_...",
  tenantId: "acme-corp",
});

const result = await nova.jobs.applications.scoringJobs.submit({
  jobId: "job_abc123",
  applicationId: "app_xyz789",
  body: {
    resume: { type: "url", url: "https://example.com/resumes/candidate-123.pdf" },
    jobDescription: "We are looking for a senior engineer...",
  },
});
{
  "scoringJob": {
    "id": "<string>",
    "criteriaVersionId": "<string>",
    "jobId": "<string>",
    "applicationId": "<string>",
    "status": "pending",
    "isRescore": true,
    "score": 123,
    "assessment": {
      "verdict": "<string>",
      "strengths": [
        "<string>"
      ],
      "concerns": [
        "<string>"
      ],
      "interviewFocus": [
        "<string>"
      ]
    },
    "errorCode": "UNAUTHORIZED",
    "errorMessage": "<string>",
    "queuedAt": "2023-11-07T05:31:56Z",
    "startedAt": "2023-11-07T05:31:56Z",
    "completedAt": "2023-11-07T05:31:56Z",
    "failedAt": "2023-11-07T05:31:56Z"
  }
}
Submit an application for scoring. Asynchronous. Nova loads the job’s active criteria automatically.

Request

FieldRequiredDescription
resumeYesThe candidate’s resume
resume.typeYes"url" for file URL, "text" for inline text
resume.urlConditionalHTTPS URL to resume file (PDF, DOC, DOCX)
resume.contentConditionalInline plain text or markdown (min 50 chars, max 100KB)
jobDescriptionYesJob posting description for AI scoring context
roleKnowledgeNoFree-text: hiring team priorities, scoring preferences. Max 15,000 chars
applicationData.applicationAnswersNoStructured Q&A pairs from screening questions
applicationData.contextNoFree-text: cover letters, hiring notes. Max 15,000 chars
rescore.enabledYes (if rescore provided)When true, create a new scoring job
rescore.criteriaVersionIdNoPin re-scoring to a specific criteria version
See Supported Formats for resume format and URL requirements.
jobDescription is passed per-request. Each request’s data expires after 90 days. See Data Retention.

Response

Returns 202 Accepted with a scoring job.
{
  "scoringJob": {
    "id": "cmlz26dl3001bwp61r8sjf2ka",
    "criteriaVersionId": "cmlz26ck2000awp61q9qcjcne",
    "jobId": "job-123",
    "applicationId": "app-456",
    "status": "pending",
    "isRescore": false,
    "score": null,
    "assessment": null,
    "errorCode": null,
    "errorMessage": null,
    "queuedAt": "2025-12-14T10:30:45Z",
    "startedAt": null,
    "completedAt": null,
    "failedAt": null
  }
}

Status Values

StatusDescription
pendingQueued or currently scoring
completedFinished successfully
failedFinished with an error

Result Delivery

Results come via webhook. Use polling as a fallback.

Example

import { Nova } from '@nova-sdk/api';

const nova = new Nova({
  apiKey: process.env.NOVA_API_KEY!,
  tenantId: 'acme-corp',
});

const { scoringJob } = await nova.jobs.applications.scoringJobs.submit({
  jobId: 'job-123',
  applicationId: 'app-456',
  body: {
    resume: { type: 'url', url: 'https://storage.example.com/resumes/abc123.pdf' },
    jobDescription: 'We are looking for a Senior Software Engineer with 5+ years experience...',
    roleKnowledge: 'Team values candidates who have built systems from scratch.',
  },
});

Idempotency

Re-submitting the same jobId and applicationId returns the existing job. See Idempotency for details on rescore.

Batch Scoring

Score multiple applications at once with POST /v1/jobs/{jobId}/scoring-batches.

Authorizations

Authorization
string
header
required

Use Authorization: Bearer sk_test_* or Authorization: Bearer sk_live_*.

Headers

X-Tenant-Id
string
required

Your customer identifier. Tenants are auto-provisioned on first request.

Path Parameters

jobId
string
required

Your job identifier (external ID).

applicationId
string
required

Your application identifier (external ID).

Body

application/json
resume
object
required
jobDescription
string
required

The job posting description. Provides context for AI scoring alongside criteria

Required string length: 1 - 50000
applicationData
object
jobTitle
string
Minimum string length: 1
companyName
string
Minimum string length: 1
roleKnowledge
string

Free-text context about the role: hiring team priorities, scoring preferences, or any additional guidance that helps the AI evaluate candidates. Max 15,000 chars

Required string length: 1 - 15000
rescore
object

Re-scoring configuration. When provided with enabled: true, creates a new scoring job

Response

Accepted

scoringJob
object
required