RESTful API for intelligent candidate evaluation and screening
Navigate to Settings → API Keys in your dashboard and create a new key.
https://tanova.ai/api/v1 Include your API key in the Authorization header:
Authorization: Bearer YOUR_API_KEY curl -X POST https://tanova.ai/api/v1/jobs \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Senior Software Engineer",
"company": "Acme Inc",
"description": "We are looking for a senior engineer with 5+ years experience in JavaScript, React, and Node.js...",
"is_public": true
}'/api/v1/jobsCreate a new job posting
{
"title": "Senior Full-Stack Engineer",
"company": "Acme Inc",
"description": "Full job description including requirements, responsibilities, etc...",
"requirements_json": { // Optional - AI will extract from description if not provided
"must_have_skills": ["React", "Node.js", "PostgreSQL"],
"nice_to_have_skills": ["TypeScript", "Docker"],
"years_experience": 5,
"education_level": "Bachelor's degree"
},
"is_public": true, // optional - default false
"public_slug": "senior-fullstack-engineer" // optional - auto-generated if not provided
}{
"id": 123,
"title": "Senior Full-Stack Engineer",
"company": "Acme Inc",
"is_public": true,
"public_slug": "senior-fullstack-engineer",
"public_url": "https://tanova.ai/jobs/senior-fullstack-engineer",
"created_at": "2025-01-15T10:30:00Z"
}/api/v1/jobs/{id}Retrieve job details
{
"id": 123,
"title": "Senior Full-Stack Engineer",
"company": "Acme Inc",
"description": "Full job description...",
"requirements_json": {...},
"is_public": true,
"public_slug": "senior-fullstack-engineer",
"applicant_count": 15,
"created_at": "2025-01-15T10:30:00Z"
}/api/v1/candidatesCreate a new candidate with CV text or URL
{
"name": "Jane Doe",
"email": "jane@example.com", // optional
"cv_text": "Full CV text...", // either cv_text or cv_url required
"cv_url": "https://example.com/cv.pdf", // alternative to cv_text
"source": "api" // optional
}{
"id": 456,
"name": "Jane Doe",
"email": "jane@example.com",
"cv_url": "https://tanova.ai/storage/cvs/456.pdf",
"skills": ["JavaScript", "React", "Node.js"],
"experience_years": 5,
"created_at": "2025-01-15T10:35:00Z"
}/api/v1/quick-screensFast preliminary evaluation (15-30 seconds, 0.05 credits)
{
"job_id": 123,
"candidate_id": 456 // Use existing candidate by ID
}{
"job_id": 123,
"candidate": {
"name": "John Smith",
"email": "john@example.com",
"cv_text": "Full CV text..."
}
}{
"id": 789,
"candidate_id": 457,
"job_id": 123,
"aggregate_score": 75,
"passed_screen": true,
"screening_reason": "Strong technical skills match",
"hidden_gem_score": 15,
"top_skills": ["JavaScript", "React", "PostgreSQL"],
"experience_years": 6,
"created_at": "2025-01-15T10:40:00Z"
}/api/v1/evaluationsAsynchronous: Creates a new evaluation and queues it for processing. The evaluation takes 60 seconds to complete. Poll the GET endpoint to retrieve results. (1.0 credits)
⚡ Note: This endpoint returns immediately with status "processing". The evaluation runs asynchronously in a background queue. Use the GET endpoint to check when it's complete.
{
"job_id": 123,
"candidate_id": 456 // Use existing candidate by ID
}{
"job_id": 123,
"candidate": {
"name": "Sarah Johnson",
"email": "sarah@example.com",
"cv_text": "Full CV text..."
}
}{
"id": 890,
"candidate_id": 458,
"job_id": 123,
"status": "processing",
"aggregate_score": null,
"recommendation": null,
"summary": null,
"created_at": "2025-01-15T10:45:00Z",
"estimated_completion": "60 seconds"
}{
"id": 890,
"candidate": {
"id": 458,
"name": "Sarah Johnson",
"email": "sarah@example.com",
"cv_url": "https://tanova.ai/storage/cvs/458.pdf"
},
"job": {
"id": 123,
"title": "Senior Full-Stack Engineer",
"company": "Acme Inc"
},
"aggregate_score": 82,
"recommendation": "yes",
"confidence_level": "high",
"summary": "Strong candidate with excellent technical skills...",
"strengths": ["5+ years React experience", "Strong problem-solving"],
"concerns": ["Limited backend experience"],
"scores": {
"qualification": 9,
"capability": 9,
"situational": 7,
"reward": 8,
"culture": 8,
"career": 7,
"compensation": 8
},
"high_level_assessment": {
"skills": 9.0,
"judgment": 8.0,
"agency": 7.0
},
"hidden_gem_potential": "Self-taught developer with strong portfolio despite non-traditional background. Shows exceptional problem-solving ability.",
"interview_questions": [
"Tell me about your experience with React performance optimization",
"How do you approach database design?"
],
"status": "completed",
"created_at": "2025-01-15T10:45:00Z",
"updated_at": "2025-01-15T10:46:23Z"
}/api/v1/evaluations/{id}Retrieve evaluation details
/api/v1/jobs/{slug}/applicantsRetrieve all applicants for a public job posting
min_score - Filter by minimum score (default: 0)passed_only - Show only passed screenings (default: false)limit - Number of results (default: 50, max: 200){
"job": {
"id": 123,
"title": "Senior Full-Stack Engineer",
"applicant_count": 15
},
"applicants": [
{
"id": 890,
"candidate": {
"id": 458,
"name": "Sarah Johnson",
"email": "sarah@example.com",
"cv_url": "https://tanova.ai/storage/cvs/458.pdf"
},
"aggregate_score": 82,
"recommendation": "yes",
"summary": "Strong candidate...",
"applied_at": "2025-01-15T10:45:00Z"
}
],
"total": 15,
"page": 1
}High-level scores (0-10) that consolidate the 7D framework into three research-backed predictors:
Returns null if high-level scores haven't been calculated yet (older evaluations).
Detailed breakdown across seven critical dimensions (scores 1-10):
The aggregate score (0-100) is a weighted combination of the 7D scores, designed to predict overall job success. Scores above 70 typically indicate strong candidates worth interviewing.
A text description identifying candidates who may be undervalued by traditional screening (self-taught developers, career changers, entrepreneurs). Returns null if no hidden gem signals detected.
Professional Plan: 10 requests/minute
API Plan: 60 requests/minute
Enterprise: Custom limits
Rate limit headers included in all responses:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1642252800 400 Bad Request - Invalid parameters
401 Unauthorized - Invalid API key
402 Payment Required - Insufficient credits
403 Forbidden - Insufficient permissions
404 Not Found - Resource not found
429 Too Many Requests - Rate limit exceeded
500 Server Error - Contact support
{
"error": {
"code": "invalid_parameter",
"message": "Missing required field: job_id"
}
}Our team is here to help you integrate Tanova into your workflow