Skip to main content
POST
/
v1
/
criteria
/
questions
Generate clarification questions
curl --request POST \
  --url https://embed.nova.dweet.com/v1/criteria/questions \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <x-tenant-id>' \
  --data '
{
  "jobContext": {
    "jobId": "<string>",
    "jobTitle": "<string>",
    "companyName": "<string>",
    "jobDescription": "<string>",
    "additionalInfo": "<string>",
    "applicationQuestions": [
      {}
    ],
    "language": "English"
  }
}
'
{
  "questionSetId": "<string>",
  "questions": [
    {
      "id": "<string>",
      "type": "singleSelect",
      "question": "<string>",
      "options": [
        "<string>"
      ],
      "placeholder": "<string>",
      "hint": "<string>"
    }
  ],
  "guidance": "<string>"
}
This endpoint is optional but recommended. Clarification questions help your team refine the criteria, resulting in better candidate-job matching.

When to Use

Use this endpoint when you want to:
  • Help your team calibrate importance levels (MUST_HAVE vs PREFERRED)
  • Clarify ambiguous requirements in the job description
  • Capture context that isn’t in the written job description

Workflow

Question Types

The API returns three types of questions:
TypeDescriptionAnswer Format
singleSelectChoose one optionstring
multiSelectChoose multiple optionsstring[]
textFree-form text inputstring

Example Questions

{
  "id": "q1",
  "type": "singleSelect",
  "question": "What level of seniority are you targeting?",
  "options": [
    "Junior (0-2 years)",
    "Mid (2-5 years)",
    "Senior (5+ years)",
    "Lead/Staff"
  ],
  "hint": "Helps calibrate experience requirements"
}

Storing the Question Set ID

Always store the questionSetId returned by this endpoint. You’ll need it when calling /v1/criteria/generate with answers.
const response = await fetch('/v1/criteria/questions', {
  method: 'POST',
  headers: { ... },
  body: JSON.stringify({ jobContext: { ... } }),
});

const { questionSetId, questions } = await response.json();

// Store questionSetId with your job posting
await db.jobPosting.update({
  where: { id: jobId },
  data: { novaQuestionSetId: questionSetId },
});

// Present questions to your team
showQuestionsUI(questions);

Stateful Behavior

Each call creates a new question set with a unique questionSetId. Multiple question sets can exist for the same job if you regenerate questions.
This allows you to:
  • Regenerate questions if the job description changes
  • Keep historical records of questions asked
  • Support multiple drafts before finalizing criteria

Latency

10-20 seconds (synchronous) The AI analyzes the job description to generate contextually relevant questions. This is a one-time operation per job posting.

Next Step

After collecting answers, proceed to Generate Criteria with the questionSetId and answers.

Authorizations

Authorization
string
header
required

API key authentication. Use your environment-specific API key (sk_test_* for sandbox, sk_live_* for production).

Headers

X-Tenant-Id
string
required

Your customer/tenant identifier. Used for data isolation and per-customer metrics. Tenants are created automatically on first request.

Body

application/json
jobContext
object
required

Response

Clarification questions generated successfully

questionSetId
string
required

Unique identifier for this question set. Store this to submit answers.

questions
object[]
required

Clarification questions to present to your team

guidance
string

Human-readable explanation of why these questions help