Skip to content

Commit f24f002

Browse files
committed
Update README.md - Remove deprecated client reference and fix Postman documentation links
- Removed reference to deprecated @sharpapi/sharpapi-node-client - Updated Postman documentation URLs to current endpoints - Cleaned up Related Packages section formatting
1 parent 664a6d0 commit f24f002

1 file changed

Lines changed: 38 additions & 274 deletions

File tree

README.md

Lines changed: 38 additions & 274 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
![SharpAPI GitHub cover](https://sharpapi.com/sharpapi-github-php-bg.jpg "SharpAPI Node.js Client")
22

3-
# Resume/Job Match Score API for Node.js
3+
# Resume/CV Job Match Score API for Node.js
44

5-
## 🎯 Calculate resume-job matching scores with AI — powered by SharpAPI.
5+
## 🎯 Calculate resume-to-job match scores — powered by SharpAPI AI.
66

77
[![npm version](https://img.shields.io/npm/v/@sharpapi/sharpapi-node-resume-job-match-score.svg)](https://www.npmjs.com/package/@sharpapi/sharpapi-node-resume-job-match-score)
88
[![License](https://img.shields.io/npm/l/@sharpapi/sharpapi-node-resume-job-match-score.svg)](https://github.com/sharpapi/sharpapi-node-client/blob/master/LICENSE.md)
99

10-
**SharpAPI Resume/Job Match Score** calculates how well a candidate's resume matches a job description, providing a detailed compatibility score and analysis. Perfect for ATS systems, recruitment platforms, and automated candidate screening.
10+
**SharpAPI Resume Job Match Score** analyzes how well a resume matches a job description, providing a compatibility score. Helps recruiters quickly identify the best candidates.
1111

1212
---
1313

@@ -17,9 +17,11 @@
1717
2. [Installation](#installation)
1818
3. [Usage](#usage)
1919
4. [API Documentation](#api-documentation)
20-
5. [Response Format](#response-format)
21-
6. [Examples](#examples)
22-
7. [License](#license)
20+
5. [Examples](#examples)
21+
6. [Use Cases](#use-cases)
22+
7. [API Endpoint](#api-endpoint)
23+
8. [Related Packages](#related-packages)
24+
9. [License](#license)
2325

2426
---
2527

@@ -48,36 +50,24 @@ Visit [SharpAPI.com](https://sharpapi.com/) to get your API key.
4850

4951
```javascript
5052
const { SharpApiResumeJobMatchScoreService } = require('@sharpapi/sharpapi-node-resume-job-match-score');
51-
const fs = require('fs');
5253

53-
const apiKey = process.env.SHARP_API_KEY;
54+
const apiKey = process.env.SHARP_API_KEY; // Store your API key in environment variables
5455
const service = new SharpApiResumeJobMatchScoreService(apiKey);
5556

57+
const fs = require('fs');
58+
59+
const resumePath = './resume.pdf';
60+
const jobDescription = 'Senior Software Engineer position...';
61+
5662
async function calculateMatchScore() {
5763
try {
58-
// Read resume file
59-
const resumeFile = fs.readFileSync('/path/to/resume.pdf');
60-
const jobDescription = `
61-
Senior Software Engineer position requiring 5+ years of experience
62-
with JavaScript, Node.js, React, and AWS. Strong problem-solving
63-
skills and experience leading development teams.
64-
`;
65-
6664
// Submit matching job
67-
const statusUrl = await service.calculateMatchScore(
68-
resumeFile,
69-
'resume.pdf',
70-
jobDescription,
71-
'English'
72-
);
65+
const statusUrl = await service.resumeJobMatchScore(resumePath, jobDescription);
7366
console.log('Job submitted. Status URL:', statusUrl);
7467

75-
// Fetch results
68+
// Fetch results (polls automatically until complete)
7669
const result = await service.fetchResults(statusUrl);
77-
const matchData = result.getResultJson();
78-
79-
console.log('Match Score:', matchData.result.match_score + '%');
80-
console.log('Match Status:', matchData.result.match_status);
70+
console.log('Match score:', result.getResultJson());
8171
} catch (error) {
8272
console.error('Error:', error.message);
8373
}
@@ -92,287 +82,61 @@ calculateMatchScore();
9282

9383
### Methods
9484

95-
#### `calculateMatchScore(resumeFile: Buffer, fileName: string, jobDescription: string, language?: string): Promise<string>`
96-
97-
Calculates the compatibility score between a resume and job description.
98-
99-
**Parameters:**
100-
- `resumeFile` (Buffer, required): The resume file content as a Buffer
101-
- `fileName` (string, required): Original filename with extension
102-
- `jobDescription` (string, required): The job description text to match against
103-
- `language` (string, optional): Language for analysis (default: 'English')
104-
105-
**Supported File Formats:**
106-
- PDF (.pdf)
107-
- Microsoft Word (.doc, .docx)
108-
- Plain Text (.txt)
109-
110-
**Returns:**
111-
- Promise<string>: Status URL for polling the job result
112-
113-
---
85+
This service accepts file uploads. Please refer to the [Postman Documentation](https://documenter.getpostman.com/view/31106842/2sBXVeGsaF) for detailed parameter specifications.
11486

115-
## Response Format
116-
117-
The API returns a detailed matching analysis with score and breakdown:
118-
119-
```json
120-
{
121-
"data": {
122-
"type": "api_job_result",
123-
"id": "7bc5887a-0dfd-49b6-8edb-9280e468c210",
124-
"attributes": {
125-
"status": "success",
126-
"type": "hr_resume_job_match_score",
127-
"result": {
128-
"match_score": 87,
129-
"match_status": "High Match",
130-
"candidate_name": "John Doe",
131-
"job_position": "Senior Software Engineer",
132-
"analysis": {
133-
"skills_match": {
134-
"score": 90,
135-
"matched_skills": [
136-
"JavaScript",
137-
"Node.js",
138-
"React",
139-
"AWS",
140-
"Team Leadership"
141-
],
142-
"missing_skills": [
143-
"Kubernetes"
144-
]
145-
},
146-
"experience_match": {
147-
"score": 95,
148-
"required_experience": "5+ years",
149-
"candidate_experience": "8 years",
150-
"assessment": "Exceeds requirements"
151-
},
152-
"education_match": {
153-
"score": 85,
154-
"required_education": "Bachelor's Degree",
155-
"candidate_education": "Bachelor of Science in Computer Science",
156-
"assessment": "Meets requirements"
157-
}
158-
},
159-
"strengths": [
160-
"Strong technical skill alignment with required technologies",
161-
"Exceeds minimum experience requirements",
162-
"Proven leadership experience mentioned in resume",
163-
"Relevant industry experience"
164-
],
165-
"gaps": [
166-
"No explicit mention of Kubernetes experience",
167-
"Limited details about AWS specific services"
168-
],
169-
"recommendation": "Strong candidate - Recommend for interview. Candidate demonstrates excellent technical alignment and exceeds experience requirements. Consider discussing Kubernetes experience during interview."
170-
}
171-
}
172-
}
173-
}
174-
```
87+
### Response Format
17588

176-
**Match Score Ranges:**
177-
- **90-100%**: Excellent Match - Top candidate
178-
- **75-89%**: High Match - Strong candidate
179-
- **60-74%**: Moderate Match - Potential candidate
180-
- **40-59%**: Low Match - May require development
181-
- **0-39%**: Poor Match - Not recommended
89+
The API returns structured data extracted from the uploaded file. See the product page for example responses.
18290

18391
---
18492

18593
## Examples
18694

187-
### Basic Match Score Calculation
95+
### Basic Example
18896

18997
```javascript
19098
const { SharpApiResumeJobMatchScoreService } = require('@sharpapi/sharpapi-node-resume-job-match-score');
191-
const fs = require('fs');
19299

193100
const service = new SharpApiResumeJobMatchScoreService(process.env.SHARP_API_KEY);
194101

195-
async function evaluateCandidate(resumePath, jobDesc) {
196-
const resumeBuffer = fs.readFileSync(resumePath);
197-
const fileName = resumePath.split('/').pop();
198-
199-
const statusUrl = await service.calculateMatchScore(
200-
resumeBuffer,
201-
fileName,
202-
jobDesc
203-
);
204-
205-
const result = await service.fetchResults(statusUrl);
206-
const data = result.getResultJson().result;
207-
208-
console.log(`Candidate: ${data.candidate_name}`);
209-
console.log(`Match Score: ${data.match_score}%`);
210-
console.log(`Status: ${data.match_status}`);
211-
console.log(`\nStrengths:`);
212-
data.strengths.forEach(s => console.log(`${s}`));
213-
console.log(`\nGaps:`);
214-
data.gaps.forEach(g => console.log(`${g}`));
215-
console.log(`\nRecommendation: ${data.recommendation}`);
216-
}
102+
// Customize polling behavior if needed
103+
service.setApiJobStatusPollingInterval(10); // Poll every 10 seconds
104+
service.setApiJobStatusPollingWait(180); // Wait up to 3 minutes
217105

218-
const jobDescription = `
219-
Marketing Manager with 5+ years experience in digital marketing,
220-
SEO, content strategy, and team management. MBA preferred.
221-
`;
222-
223-
evaluateCandidate('./resumes/candidate_1.pdf', jobDescription);
106+
// Use the service
107+
// ... (implementation depends on specific service)
224108
```
225109

226-
### Automated Candidate Ranking
227-
228-
```javascript
229-
const service = new SharpApiResumeJobMatchScoreService(process.env.SHARP_API_KEY);
230-
const fs = require('fs');
231-
const path = require('path');
232-
233-
async function rankCandidates(resumeDirectory, jobDescription) {
234-
const files = fs.readdirSync(resumeDirectory);
235-
const candidates = [];
236-
237-
for (const file of files) {
238-
if (file.match(/\.(pdf|docx)$/i)) {
239-
const filePath = path.join(resumeDirectory, file);
240-
const resumeBuffer = fs.readFileSync(filePath);
241-
242-
try {
243-
const statusUrl = await service.calculateMatchScore(
244-
resumeBuffer,
245-
file,
246-
jobDescription
247-
);
248-
249-
const result = await service.fetchResults(statusUrl);
250-
const data = result.getResultJson().result;
251-
252-
candidates.push({
253-
fileName: file,
254-
name: data.candidate_name,
255-
score: data.match_score,
256-
status: data.match_status,
257-
recommendation: data.recommendation
258-
});
259-
} catch (error) {
260-
console.error(`Failed to process ${file}:`, error.message);
261-
}
262-
}
263-
}
264-
265-
// Sort by score descending
266-
candidates.sort((a, b) => b.score - a.score);
267-
268-
return candidates;
269-
}
270-
271-
const jobDesc = 'Full Stack Developer with React, Node.js, and PostgreSQL experience...';
272-
const rankedCandidates = await rankCandidates('./applications', jobDesc);
273-
274-
console.log('📊 Candidate Rankings:\n');
275-
rankedCandidates.forEach((candidate, index) => {
276-
console.log(`${index + 1}. ${candidate.name} - ${candidate.score}% (${candidate.status})`);
277-
});
278-
```
279-
280-
### ATS Integration with Thresholds
281-
282-
```javascript
283-
const service = new SharpApiResumeJobMatchScoreService(process.env.SHARP_API_KEY);
284-
285-
async function screenCandidate(resumeBuffer, fileName, jobDescription, minScore = 60) {
286-
const statusUrl = await service.calculateMatchScore(
287-
resumeBuffer,
288-
fileName,
289-
jobDescription
290-
);
291-
292-
const result = await service.fetchResults(statusUrl);
293-
const matchData = result.getResultJson().result;
294-
295-
const decision = {
296-
candidateName: matchData.candidate_name,
297-
score: matchData.match_score,
298-
status: matchData.match_status,
299-
passedScreening: matchData.match_score >= minScore,
300-
nextStep: matchData.match_score >= 90 ? 'Fast-track to final round' :
301-
matchData.match_score >= 75 ? 'Schedule technical interview' :
302-
matchData.match_score >= 60 ? 'Schedule phone screening' :
303-
'Reject - Does not meet minimum requirements',
304-
strengths: matchData.strengths,
305-
gaps: matchData.gaps,
306-
interviewFocus: matchData.gaps.length > 0 ?
307-
`Focus interview on: ${matchData.gaps.join(', ')}` :
308-
'General competency assessment'
309-
};
310-
311-
return decision;
312-
}
313-
314-
const decision = await screenCandidate(
315-
resumeBuffer,
316-
'candidate.pdf',
317-
jobDescription,
318-
70 // 70% minimum threshold
319-
);
320-
321-
if (decision.passedScreening) {
322-
console.log(`${decision.candidateName} passed screening`);
323-
console.log(`Score: ${decision.score}%`);
324-
console.log(`Next Step: ${decision.nextStep}`);
325-
console.log(`Interview Focus: ${decision.interviewFocus}`);
326-
} else {
327-
console.log(`${decision.candidateName} did not meet minimum threshold`);
328-
}
329-
```
110+
For more examples, visit the [Product Page](https://sharpapi.com/en/catalog/ai/hr-tech/resume-cv-job-match-score).
330111

331112
---
332113

333114
## Use Cases
334115

335-
- **Automated Resume Screening**: Filter candidates based on match scores
336-
- **Candidate Ranking**: Rank applicants by compatibility
337-
- **Interview Prioritization**: Identify top candidates for immediate interviews
338-
- **Skills Gap Analysis**: Identify training needs for near-match candidates
339-
- **Recruitment Automation**: Streamline high-volume hiring processes
340-
- **Talent Pool Management**: Match existing candidates to new openings
341-
- **Diversity Hiring**: Ensure objective, skills-based evaluation
342-
343-
---
344-
345-
## Matching Factors
346-
347-
The algorithm evaluates:
348-
349-
- **Skills Match**: Technical and soft skills alignment
350-
- **Experience Level**: Years of experience vs. requirements
351-
- **Education**: Degree level and field of study
352-
- **Job Titles**: Relevant position history
353-
- **Industry Experience**: Domain knowledge match
354-
- **Certifications**: Professional credentials
355-
- **Keywords**: Job-specific terminology presence
356-
- **Career Progression**: Growth trajectory alignment
116+
- **Candidate Screening**: Quickly identify top candidates
117+
- **Resume Ranking**: Sort applicants by match score
118+
- **ATS Optimization**: Improve candidate-job matching accuracy
119+
- **Recruitment Efficiency**: Reduce time spent on unqualified candidates
120+
- **Job Seeker Tools**: Help candidates understand fit for positions
121+
- **Talent Analytics**: Analyze hiring patterns and candidate quality
357122

358123
---
359124

360125
## API Endpoint
361126

362-
**POST** `/hr/resume_job_match_score` (multipart/form-data)
127+
**POST** `/hr/resume_job_match_score`
363128

364129
For detailed API specifications, refer to:
365-
- [Postman Documentation](https://documenter.getpostman.com/view/31106842/2sBXVeGsVP)
130+
- [Postman Documentation](https://documenter.getpostman.com/view/31106842/2sBXVeGsaF)
366131
- [Product Page](https://sharpapi.com/en/catalog/ai/hr-tech/resume-cv-job-match-score)
367132

368133
---
369134

370135
## Related Packages
371136

372-
- [@sharpapi/sharpapi-node-parse-resume](https://www.npmjs.com/package/@sharpapi/sharpapi-node-parse-resume) - Resume parsing
373-
- [@sharpapi/sharpapi-node-job-description](https://www.npmjs.com/package/@sharpapi/sharpapi-node-job-description) - Job descriptions
374-
- [@sharpapi/sharpapi-node-related-skills](https://www.npmjs.com/package/@sharpapi/sharpapi-node-related-skills) - Skills analysis
375-
- [@sharpapi/sharpapi-node-client](https://www.npmjs.com/package/@sharpapi/sharpapi-node-client) - Full SharpAPI SDK
137+
- [@sharpapi/sharpapi-node-parse-resume](https://www.npmjs.com/package/@sharpapi/sharpapi-node-parse-resume)
138+
- [@sharpapi/sharpapi-node-job-description](https://www.npmjs.com/package/@sharpapi/sharpapi-node-job-description)
139+
- [@sharpapi/sharpapi-node-related-skills](https://www.npmjs.com/package/@sharpapi/sharpapi-node-related-skills)
376140

377141
---
378142

0 commit comments

Comments
 (0)