curl --request POST \
--url https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"position_id": "00000000-0000-0000-0000-000000000000",
"candidate_name": "Jane Doe",
"candidate_email": "jane.doe@example.com",
"candidate_resume": "Experienced software engineer with 8 years ...",
"candidate_country_code": "US",
"candidate_external_id": "ATS-12345",
"candidate_linkedin_url": "https://www.linkedin.com/in/jane-doe",
"form": {
"education": "masters",
"languages": [
{
"code": "en",
"level": "advanced"
}
],
"residency": "US",
"nationality": "US",
"visa": "18_transferable",
"age": 30,
"gender": "male"
}
}
'import requests
url = "https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text"
payload = {
"position_id": "00000000-0000-0000-0000-000000000000",
"candidate_name": "Jane Doe",
"candidate_email": "jane.doe@example.com",
"candidate_resume": "Experienced software engineer with 8 years ...",
"candidate_country_code": "US",
"candidate_external_id": "ATS-12345",
"candidate_linkedin_url": "https://www.linkedin.com/in/jane-doe",
"form": {
"education": "masters",
"languages": [
{
"code": "en",
"level": "advanced"
}
],
"residency": "US",
"nationality": "US",
"visa": "18_transferable",
"age": 30,
"gender": "male"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
position_id: '00000000-0000-0000-0000-000000000000',
candidate_name: 'Jane Doe',
candidate_email: 'jane.doe@example.com',
candidate_resume: 'Experienced software engineer with 8 years ...',
candidate_country_code: 'US',
candidate_external_id: 'ATS-12345',
candidate_linkedin_url: 'https://www.linkedin.com/in/jane-doe',
form: {
education: 'masters',
languages: [{code: 'en', level: 'advanced'}],
residency: 'US',
nationality: 'US',
visa: '18_transferable',
age: 30,
gender: 'male'
}
})
};
fetch('https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'position_id' => '00000000-0000-0000-0000-000000000000',
'candidate_name' => 'Jane Doe',
'candidate_email' => 'jane.doe@example.com',
'candidate_resume' => 'Experienced software engineer with 8 years ...',
'candidate_country_code' => 'US',
'candidate_external_id' => 'ATS-12345',
'candidate_linkedin_url' => 'https://www.linkedin.com/in/jane-doe',
'form' => [
'education' => 'masters',
'languages' => [
[
'code' => 'en',
'level' => 'advanced'
]
],
'residency' => 'US',
'nationality' => 'US',
'visa' => '18_transferable',
'age' => 30,
'gender' => 'male'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text"
payload := strings.NewReader("{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"candidate_name\": \"Jane Doe\",\n \"candidate_email\": \"jane.doe@example.com\",\n \"candidate_resume\": \"Experienced software engineer with 8 years ...\",\n \"candidate_country_code\": \"US\",\n \"candidate_external_id\": \"ATS-12345\",\n \"candidate_linkedin_url\": \"https://www.linkedin.com/in/jane-doe\",\n \"form\": {\n \"education\": \"masters\",\n \"languages\": [\n {\n \"code\": \"en\",\n \"level\": \"advanced\"\n }\n ],\n \"residency\": \"US\",\n \"nationality\": \"US\",\n \"visa\": \"18_transferable\",\n \"age\": 30,\n \"gender\": \"male\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"candidate_name\": \"Jane Doe\",\n \"candidate_email\": \"jane.doe@example.com\",\n \"candidate_resume\": \"Experienced software engineer with 8 years ...\",\n \"candidate_country_code\": \"US\",\n \"candidate_external_id\": \"ATS-12345\",\n \"candidate_linkedin_url\": \"https://www.linkedin.com/in/jane-doe\",\n \"form\": {\n \"education\": \"masters\",\n \"languages\": [\n {\n \"code\": \"en\",\n \"level\": \"advanced\"\n }\n ],\n \"residency\": \"US\",\n \"nationality\": \"US\",\n \"visa\": \"18_transferable\",\n \"age\": 30,\n \"gender\": \"male\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"candidate_name\": \"Jane Doe\",\n \"candidate_email\": \"jane.doe@example.com\",\n \"candidate_resume\": \"Experienced software engineer with 8 years ...\",\n \"candidate_country_code\": \"US\",\n \"candidate_external_id\": \"ATS-12345\",\n \"candidate_linkedin_url\": \"https://www.linkedin.com/in/jane-doe\",\n \"form\": {\n \"education\": \"masters\",\n \"languages\": [\n {\n \"code\": \"en\",\n \"level\": \"advanced\"\n }\n ],\n \"residency\": \"US\",\n \"nationality\": \"US\",\n \"visa\": \"18_transferable\",\n \"age\": 30,\n \"gender\": \"male\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"decision_status": "recruiter_action",
"recommendation": "recruiter_action",
"profile_interview_id": "<string>",
"interview_result_pre_screening_id": "<string>",
"interview_file_id": "<string>",
"pre_screening_score": 123,
"resume_ai_analysis": "<string>",
"resume_ai_education": "<string>",
"resume_ai_technical_experience": 123,
"resume_ai_is_switching_profession": true,
"processing_reason": "<string>"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}Run pre-screening on a plaintext resume
Stores a plaintext candidate resume, runs AI pre-screening against the position definition, records the result and returns the AI recommendation and analysis. If the candidate is not in the pre-screening candidate_action state, an early { decision_status, message } object is returned with HTTP 200.
curl --request POST \
--url https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"position_id": "00000000-0000-0000-0000-000000000000",
"candidate_name": "Jane Doe",
"candidate_email": "jane.doe@example.com",
"candidate_resume": "Experienced software engineer with 8 years ...",
"candidate_country_code": "US",
"candidate_external_id": "ATS-12345",
"candidate_linkedin_url": "https://www.linkedin.com/in/jane-doe",
"form": {
"education": "masters",
"languages": [
{
"code": "en",
"level": "advanced"
}
],
"residency": "US",
"nationality": "US",
"visa": "18_transferable",
"age": 30,
"gender": "male"
}
}
'import requests
url = "https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text"
payload = {
"position_id": "00000000-0000-0000-0000-000000000000",
"candidate_name": "Jane Doe",
"candidate_email": "jane.doe@example.com",
"candidate_resume": "Experienced software engineer with 8 years ...",
"candidate_country_code": "US",
"candidate_external_id": "ATS-12345",
"candidate_linkedin_url": "https://www.linkedin.com/in/jane-doe",
"form": {
"education": "masters",
"languages": [
{
"code": "en",
"level": "advanced"
}
],
"residency": "US",
"nationality": "US",
"visa": "18_transferable",
"age": 30,
"gender": "male"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
position_id: '00000000-0000-0000-0000-000000000000',
candidate_name: 'Jane Doe',
candidate_email: 'jane.doe@example.com',
candidate_resume: 'Experienced software engineer with 8 years ...',
candidate_country_code: 'US',
candidate_external_id: 'ATS-12345',
candidate_linkedin_url: 'https://www.linkedin.com/in/jane-doe',
form: {
education: 'masters',
languages: [{code: 'en', level: 'advanced'}],
residency: 'US',
nationality: 'US',
visa: '18_transferable',
age: 30,
gender: 'male'
}
})
};
fetch('https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'position_id' => '00000000-0000-0000-0000-000000000000',
'candidate_name' => 'Jane Doe',
'candidate_email' => 'jane.doe@example.com',
'candidate_resume' => 'Experienced software engineer with 8 years ...',
'candidate_country_code' => 'US',
'candidate_external_id' => 'ATS-12345',
'candidate_linkedin_url' => 'https://www.linkedin.com/in/jane-doe',
'form' => [
'education' => 'masters',
'languages' => [
[
'code' => 'en',
'level' => 'advanced'
]
],
'residency' => 'US',
'nationality' => 'US',
'visa' => '18_transferable',
'age' => 30,
'gender' => 'male'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text"
payload := strings.NewReader("{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"candidate_name\": \"Jane Doe\",\n \"candidate_email\": \"jane.doe@example.com\",\n \"candidate_resume\": \"Experienced software engineer with 8 years ...\",\n \"candidate_country_code\": \"US\",\n \"candidate_external_id\": \"ATS-12345\",\n \"candidate_linkedin_url\": \"https://www.linkedin.com/in/jane-doe\",\n \"form\": {\n \"education\": \"masters\",\n \"languages\": [\n {\n \"code\": \"en\",\n \"level\": \"advanced\"\n }\n ],\n \"residency\": \"US\",\n \"nationality\": \"US\",\n \"visa\": \"18_transferable\",\n \"age\": 30,\n \"gender\": \"male\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"candidate_name\": \"Jane Doe\",\n \"candidate_email\": \"jane.doe@example.com\",\n \"candidate_resume\": \"Experienced software engineer with 8 years ...\",\n \"candidate_country_code\": \"US\",\n \"candidate_external_id\": \"ATS-12345\",\n \"candidate_linkedin_url\": \"https://www.linkedin.com/in/jane-doe\",\n \"form\": {\n \"education\": \"masters\",\n \"languages\": [\n {\n \"code\": \"en\",\n \"level\": \"advanced\"\n }\n ],\n \"residency\": \"US\",\n \"nationality\": \"US\",\n \"visa\": \"18_transferable\",\n \"age\": 30,\n \"gender\": \"male\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cool.jobmojito.com/functions/v1/job-interview-pre-screening-api-resume-text")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"position_id\": \"00000000-0000-0000-0000-000000000000\",\n \"candidate_name\": \"Jane Doe\",\n \"candidate_email\": \"jane.doe@example.com\",\n \"candidate_resume\": \"Experienced software engineer with 8 years ...\",\n \"candidate_country_code\": \"US\",\n \"candidate_external_id\": \"ATS-12345\",\n \"candidate_linkedin_url\": \"https://www.linkedin.com/in/jane-doe\",\n \"form\": {\n \"education\": \"masters\",\n \"languages\": [\n {\n \"code\": \"en\",\n \"level\": \"advanced\"\n }\n ],\n \"residency\": \"US\",\n \"nationality\": \"US\",\n \"visa\": \"18_transferable\",\n \"age\": 30,\n \"gender\": \"male\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"decision_status": "recruiter_action",
"recommendation": "recruiter_action",
"profile_interview_id": "<string>",
"interview_result_pre_screening_id": "<string>",
"interview_file_id": "<string>",
"pre_screening_score": 123,
"resume_ai_analysis": "<string>",
"resume_ai_education": "<string>",
"resume_ai_technical_experience": 123,
"resume_ai_is_switching_profession": true,
"processing_reason": "<string>"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}{
"error": "Field is required.",
"name": "interview_result_id"
}Authorizations
Supabase JWT — Authorization: Bearer <token>.
Body
Position (position_def_set) id the candidate is being screened against.
1"00000000-0000-0000-0000-000000000000"
Candidate full name.
1"Jane Doe"
Candidate email (normalised to trimmed lowercase).
1"jane.doe@example.com"
Plaintext candidate resume.
1"Experienced software engineer with 8 years ..."
Optional ISO country code, used as the default residency/nationality when those are not supplied in form. If the position has a form_nationality or form_residency screening rule and neither this field nor the corresponding form value is provided, the candidate is screened with no nationality/residency and will fail that rule (marked for review or rejected per its action).
"US"
Optional external identifier stored on the candidate profile.
"ATS-12345"
Optional LinkedIn profile URL stored on the candidate profile.
"https://www.linkedin.com/in/jane-doe"
Optional structured pre-screening form used by the assessment rules. Custom fields (defined via form_fields) are also accepted.
Show child attributes
Show child attributes
Response
Pre-screening completed, or an early { decision_status, message } result when the candidate is not in the pre-screening candidate_action state.
- Option 1
- Option 2
Result of the pre-screening analysis. When the candidate is not in the pre-screening candidate_action state, a { decision_status, message } object is returned instead.
true
Applied decision status for the pre-screening step.
"recruiter_action"
AI recommendation derived from the pre-screening status.
ai_accept, ai_reject, recruiter_action "recruiter_action"
Candidate profile_interview id.
Inserted interview_result_pre_screening id.
Stored resume interview_file id.
AI match score.
AI resume analysis feedback.
AI-detected education level of the candidate.
AI-estimated years of relevant experience.
Whether the candidate is switching profession.
Reason the candidate failed screening, when applicable.