Skip to main content
GET
/
v1
/
jobs
/
{jobId}
/
applications
/
{applicationId}
/
scoring-jobs
/
{scoringJobId}
Get scoring job
curl --request GET \
  --url https://embed.nova.dweet.com/v1/jobs/{jobId}/applications/{applicationId}/scoring-jobs/{scoringJobId} \
  --header 'Authorization: Bearer <token>' \
  --header 'X-Tenant-Id: <x-tenant-id>'
{
  "scoringJob": {
    "id": "<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"
  }
}
Retrieve score results using Nova’s scoring job ID. Use this if you missed the webhook or need to re-fetch results.

When to Use

Missed Webhook

Your webhook endpoint was down or returned an error

Polling Fallback

As a backup to webhook delivery

Status Check

Check if a job is still processing

Re-fetch Results

Need the score data again after processing

Response States

StatusDescription
PENDINGJob is waiting to be processed
PROCESSINGJob is currently being scored
COMPLETEDScoring finished successfully
FAILEDScoring could not be completed

Understanding the Score

Score (0-10)

RangeMeaning
9-10Exceptional match. Prioritize outreach. Strong fit on must-haves with verified evidence.
7-8Strong fit. Worth a conversation. Solid match with minor questions to explore.
5-6Promising but needs clarification. Mixed signals or unverified must-haves.
3-4Significant gaps. Unlikely fit but worth a second look.
0-2Missing fundamental requirements. Clear disqualifiers or no relevant experience.

Assessment Fields

FieldDescription
verdict2-3 sentence summary with hiring recommendation
strengthsEvidence-backed positive observations from resume
concernsGaps or potential issues identified
interviewFocusSuggested topics to explore in interviews

Polling Pattern

If you need to poll for results:
async function pollForResult({ jobId, applicationId, scoringJobId }, maxAttempts = 20) {
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
    const response = await fetch(
      `https://embed.nova.dweet.com/v1/jobs/${jobId}/applications/${applicationId}/scoring-jobs/${scoringJobId}`,
      {
        headers: {
          'Authorization': `Bearer ${apiKey}`,
          'X-Tenant-Id': tenantId,
        },
      }
    );

    const data = await response.json();

    const status = data.scoringJob.status;

    if (status === 'COMPLETED' || status === 'FAILED') {
      return data.scoringJob;
    }

    // Wait 3 seconds between polls
    await sleep(3000);
  }

  throw new Error('Polling timeout');
}
Prefer webhooks over polling. Polling uses your rate limit and adds latency.

Caching Results

Results are stored indefinitely. You can re-fetch them at any time.

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).

scoringJobId
string
required

Scoring job ID.

Response

Scoring job

scoringJob
object
required