curl --request POST \
--url https://api-service.fribl.co/api/v1/match \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"candidatesIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"topK": 2,
"weights": {
"experience": 0.25,
"hardSkills": 0.25,
"softSkills": 0.25,
"education": 0.25
},
"cache": true
}
'import requests
url = "https://api-service.fribl.co/api/v1/match"
payload = {
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"candidatesIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"topK": 2,
"weights": {
"experience": 0.25,
"hardSkills": 0.25,
"softSkills": 0.25,
"education": 0.25
},
"cache": True
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
jobId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
candidatesIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
topK: 2,
weights: {experience: 0.25, hardSkills: 0.25, softSkills: 0.25, education: 0.25},
cache: true
})
};
fetch('https://api-service.fribl.co/api/v1/match', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-service.fribl.co/api/v1/match"
payload := strings.NewReader("{\n \"jobId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"candidatesIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"topK\": 2,\n \"weights\": {\n \"experience\": 0.25,\n \"hardSkills\": 0.25,\n \"softSkills\": 0.25,\n \"education\": 0.25\n },\n \"cache\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-service.fribl.co/api/v1/match")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"jobId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"candidatesIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"topK\": 2,\n \"weights\": {\n \"experience\": 0.25,\n \"hardSkills\": 0.25,\n \"softSkills\": 0.25,\n \"education\": 0.25\n },\n \"cache\": true\n}")
.asString();{
"message": "Match result",
"length": 123,
"data": [
[
{
"score_meta": {
"education": 123,
"hard_skills": 123,
"soft_skills": 123,
"experience": 123
},
"score_dict": {
"education": {},
"hard_skills": {},
"soft_skills": {},
"experience": {}
},
"summary_score": 123,
"final_score": 123,
"person_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"code": "INSUFFICIENT_CREDITS",
"message": "Insufficient credits: have 3, need 10",
"balance": 3,
"required": 10
}Match CVs to a job
Match one or more candidate CVs against a job description using AI-powered scoring. Configure optional weights to prioritize specific dimensions such as experience, hard skills, soft skills, or education. The sum of all weights must not exceed 1.0. Billable — charges the job_matching action once per match request. See GET /credits/costs for live pricing.
curl --request POST \
--url https://api-service.fribl.co/api/v1/match \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"candidatesIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"topK": 2,
"weights": {
"experience": 0.25,
"hardSkills": 0.25,
"softSkills": 0.25,
"education": 0.25
},
"cache": true
}
'import requests
url = "https://api-service.fribl.co/api/v1/match"
payload = {
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"candidatesIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"topK": 2,
"weights": {
"experience": 0.25,
"hardSkills": 0.25,
"softSkills": 0.25,
"education": 0.25
},
"cache": True
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
jobId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
candidatesIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
topK: 2,
weights: {experience: 0.25, hardSkills: 0.25, softSkills: 0.25, education: 0.25},
cache: true
})
};
fetch('https://api-service.fribl.co/api/v1/match', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-service.fribl.co/api/v1/match"
payload := strings.NewReader("{\n \"jobId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"candidatesIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"topK\": 2,\n \"weights\": {\n \"experience\": 0.25,\n \"hardSkills\": 0.25,\n \"softSkills\": 0.25,\n \"education\": 0.25\n },\n \"cache\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-service.fribl.co/api/v1/match")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"jobId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"candidatesIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"topK\": 2,\n \"weights\": {\n \"experience\": 0.25,\n \"hardSkills\": 0.25,\n \"softSkills\": 0.25,\n \"education\": 0.25\n },\n \"cache\": true\n}")
.asString();{
"message": "Match result",
"length": 123,
"data": [
[
{
"score_meta": {
"education": 123,
"hard_skills": 123,
"soft_skills": 123,
"experience": 123
},
"score_dict": {
"education": {},
"hard_skills": {},
"soft_skills": {},
"experience": {}
},
"summary_score": 123,
"final_score": 123,
"person_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"code": "INSUFFICIENT_CREDITS",
"message": "Insufficient credits: have 3, need 10",
"balance": 3,
"required": 10
}Authorizations
API key in UUID format. Include this header with every authenticated request.
Body
Request body for matching CVs to a job.
Unique identifier of the job to match against.
List of CV identifiers to match against the job.
Maximum number of top-scoring candidates to return.
x >= 1Custom weights for each scoring dimension. The sum of all weights must not exceed 1.0. If omitted, equal weights are applied.
Show child attributes
Show child attributes
Whether to cache the match results for later retrieval.