HireLayer Skills · Skills Matching API
Skills Matching API that resolves free-text skills to a taxonomy
Send one skill, a compound string or a whole CV skills section, in French or English. HireLayer Skills returns every taxonomy skill the text names, in order, each with a stable id, a type, families and domains, and lists what it cannot resolve instead of guessing.
Schedule a demo- Endpoints
- POST /skills/resolve · GET /skills
- Input
- Free text up to 5,000 characters
- Taxonomy
- 11,061 skills · 25 domains
- Billing
- 1 credit per request
HireLayer Skills
POST /api/v1/skills/resolve
Capabilities
What the Skills Matching API normalizes
Problems it solves
The same skill, many wordings
Candidates, recruiters and job ads describe one competency with different spellings, abbreviations and phrasings.
Search misses relevant profiles
An exact-match filter on free-text skills leaves out people who describe a skill differently.
Taxonomies are costly to maintain
Building and updating your own skill reference, with families and domains, is a project in itself.
01
One skill or a whole section
Send one skill, a compound string such as “Google Sheet/Excel” or a CV skills section with lines, bullets and lists, up to 5,000 characters in French or English.
02
Every skill, in text order
Each taxonomy skill named in the text comes back in the order of the text, with mention: the part of the text it was found in.
03
Resolved or unresolved, never guessed
There is no score or threshold to tune. A part of the text that matches no skill is listed in unresolved, with family hints.
04
Stable ids and types
Store and filter on id, such as excel. Each skill is typed hard, software, certification, soft or language, and named in French or English.
05
Families, domains and a broader skill
Skills sit in families and domains, the primary one first, and can name a broader skill to widen a search, such as Excel to Microsoft Office.
06
The whole taxonomy in one call
GET /api/v1/skills returns all 11,061 skills, most frequent in CVs first, across 25 domains and 236 families. Cache it on your side.
Under the hood
One skill or a whole skills section, in one request
| Input | text | skills[].name |
|---|---|---|
| One skill | react js | React |
| Compound string | Google Sheet/Excel | Google Sheets · Excel |
| Compound mention | Pack Office (Word, Excel) | Microsoft Office · Word · Excel |
| Mixed list, language: en | React, Node, Cobol, gestion de projet | React · Node.js · COBOL · Project management |
Resolved, in text order
Each taxonomy skill comes back with a stable id and its mention, the part of the text it was found in.
Never guessed
No score or threshold: a part of the text that matches no skill is listed in unresolved, with family_hints.
{
"text": "Compétences :\n- Pack Office (Word, Excel, PowerPoint)\n- Gestion de la paie (ADP, Payfit)\n- Anglais courant\n- Permis B\n- Rigueur et sens de l’organisation"
}[
"Word", "Excel", "PowerPoint",
"Gestion de la paie", "ADP", "PayFit",
"Anglais", "Permis B",
"Rigueur", "Organisation"
]Request and response
Resolve a free-text skill string
Values below come from the API reference example. Field names and shapes match the live contract.
curl -X POST https://hirelayer.co/api/v1/skills/resolve \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{"text":"Google Sheet/Excel","language":"fr"}'{
"language": "fr",
"skills": [
{
"id": "google_sheets",
"name": "Google Sheets",
"type": "software",
"mention": "Google Sheet",
"families": [
{ "id": "office_software", "name": "Bureautique", "domain_id": "administration_office" },
{ "id": "data_analysis", "name": "Analyse de données", "domain_id": "data_ai" },
{ "id": "business_intelligence", "name": "Business Intelligence & dataviz", "domain_id": "data_ai" }
],
"domains": [
{ "id": "administration_office", "name": "Administration & Bureautique" },
{ "id": "data_ai", "name": "Data & Intelligence artificielle" }
],
"broader": null
},
{
"id": "excel",
"name": "Excel",
"type": "software",
"mention": "Excel",
"families": [
{ "id": "office_software", "name": "Bureautique", "domain_id": "administration_office" },
{ "id": "data_analysis", "name": "Analyse de données", "domain_id": "data_ai" }
],
"domains": [
{ "id": "administration_office", "name": "Administration & Bureautique" },
{ "id": "data_ai", "name": "Data & Intelligence artificielle" }
],
"broader": { "id": "microsoft_office", "name": "Microsoft Office" }
}
],
"unresolved": [],
"taxonomy_version": "v1"
}- skills[].id
- Stable id to store and filter on; name is the canonical name in the requested language.
- skills[].mention
- The part of the text each skill was found in. Skills follow the order of the text.
- skills[].broader
- A more general skill to widen a search, here Microsoft Office for Excel, or null.
- unresolved[]
- Parts of the text that match no taxonomy skill, with family_hints. Nothing is guessed.
Use cases
Where teams normalize skills
HireLayer Skills is used by recruiting software and recruiting services. Each use case links to the full workflow.
- 01
Normalize recruiter search queries
Resolve what a recruiter types to skill ids before searching profiles saved in your sourcing product, and widen with broader when needed.
Skills for Sourcing tools - 02
Consistent skill tags across profiles
Store the skill id next to the original wording on candidate or employee records in your HR product.
Skills for HR software & SaaS - 03
Skill facets on a job board
Group candidate and job skills by family and domain to power filters both sides understand.
Skills for Job boards & career sites
Integration
Integrate skill normalization in your data flow
Call the API from your backend and keep the key server-side. Your product keeps its records, interface and review process.
STEP 01
Collect skill text
Use the skills section of a CV, the skills returned by HireLayer CV Extract, terms from job criteria, or what users type in your interface.
STEP 02
Resolve it in one call
Send it as one text of up to 5,000 characters. Each taxonomy skill comes back in order; review what is listed in unresolved.
STEP 03
Store both values
Keep the original wording for display and the skill id, families and domains for search and facets.
Technical specifications
- Authentication
- X-API-Key header
- Content-Type
- application/json
- text
- Required · up to 5,000 characters, French or English
- language
- fr (default) or en, for returned names
- Other fields
- Rejected with HTTP 400
- Taxonomy
- GET /api/v1/skills · 11,061 skills, about 4 MB
- Billing
- 1 credit per successful request
No backend to write? Call Skills from Make, Power Automate, Google Sheets, ChatGPT, Claude or your ATS.
Where Skills fits in the HireLayer pipeline
Each API works on its own. Chain them when a workflow needs CV data, job criteria and a decision aid together.
- CV filePDF, DOCX, image…CV ExtractResume Parsing API→ info_resume.text · skills[]MatchCandidate & Job Matching APIjob_text + candidate_text + matching_criteria
- Job descriptionPlain job_textJob ExtractJob Parsing API→ matching_criteria[]RankCandidate Ranking APIjob_text + up to 10 candidate_text
- Free-text skillsFrom CVs, jobs or usersSkillsSkills Matching API→ taxonomy skill ids
Store skill ids on profiles and jobs for search and facets.
Match takes criteria from Job Extract and CV text from Extract. Rank only needs the job text and each candidate’s CV text. One API key and one credit balance cover every call.
Questions
Skills Matching API questions
Answers based on the current API contract.
What can I send in text?
One free text of up to 5,000 characters, in French or English: a single skill such as “MS Excel”, a compound string such as “Pack Office (Word, Excel)”, or a whole CV skills section with lines, bullets, semicolons or long comma lists. language is optional, fr by default or en, and any other field is rejected with a 400.
How do I extract and normalize the skills of a whole CV?
Send the CV file to HireLayer CV Extract: it returns the skills it finds, each typed as a hard, soft or software skill and marked normalized when it resolves to this taxonomy. To normalize skills you already have as text, such as a skills section, a LinkedIn export or the requirements of a job ad, send up to 5,000 characters to POST /api/v1/skills/resolve. Each successful call uses one credit.
How many skills can I resolve in one request?
Every taxonomy skill the text names, within 5,000 characters. A CV skills section with the lines “Pack Office (Word, Excel, PowerPoint)”, “Gestion de la paie (ADP, Payfit)”, “Anglais courant”, “Permis B” and “Rigueur et sens de l’organisation” resolves to 10 skills in one call, from Word to Organisation. A successful request consumes one credit.
Can I browse the skill taxonomy?
Yes. GET /api/v1/skills returns the whole taxonomy in one response: 11,061 skills, most frequent in CVs first, each with its id, name, type, families, domains and broader skill. Add ?language=en for English names. It weighs about 4 MB, has no pagination and costs one credit, so cache it on your side.
What happens to text that matches no skill?
It is listed in unresolved, with family_hints. There are no similarity scores or thresholds to tune: each part of the text is either resolved to taxonomy skills or left unresolved, and nothing is guessed.
HireLayer Skills
Make your first HireLayer Skills call today.
Create an account to get an API key. Credits are shared across all five HireLayer APIs.
Works well with
Related HireLayer APIs
- HireLayer CV ExtractResume Parsing APITurn CV files into structured candidate JSON.
- HireLayer Job ExtractJob Parsing APITurn job descriptions into weighted criteria.
- HireLayer MatchCandidate & Job Matching APIScore one candidate against a job, criterion by criterion.