Skip to main content
POST
/
job-interview-pre-screening-api-resume-text
Run pre-screening on a plaintext resume
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_country_code": "US",
  "candidate_resume": "Experienced software engineer with 8 years ...",
  "candidate_external_id": "ATS-12345",
  "candidate_linkedin_url": "https://www.linkedin.com/in/jane-doe",
  "form": {
    "education": "masters_degree",
    "languages": [
      {
        "code": "en",
        "level": "c2"
      }
    ],
    "residency": "US",
    "nationality": "US",
    "visa": "has_visa",
    "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_country_code": "US",
"candidate_resume": "Experienced software engineer with 8 years ...",
"candidate_external_id": "ATS-12345",
"candidate_linkedin_url": "https://www.linkedin.com/in/jane-doe",
"form": {
"education": "masters_degree",
"languages": [
{
"code": "en",
"level": "c2"
}
],
"residency": "US",
"nationality": "US",
"visa": "has_visa",
"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_country_code: 'US',
candidate_resume: 'Experienced software engineer with 8 years ...',
candidate_external_id: 'ATS-12345',
candidate_linkedin_url: 'https://www.linkedin.com/in/jane-doe',
form: {
education: 'masters_degree',
languages: [{code: 'en', level: 'c2'}],
residency: 'US',
nationality: 'US',
visa: 'has_visa',
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_country_code' => 'US',
'candidate_resume' => 'Experienced software engineer with 8 years ...',
'candidate_external_id' => 'ATS-12345',
'candidate_linkedin_url' => 'https://www.linkedin.com/in/jane-doe',
'form' => [
'education' => 'masters_degree',
'languages' => [
[
'code' => 'en',
'level' => 'c2'
]
],
'residency' => 'US',
'nationality' => 'US',
'visa' => 'has_visa',
'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_country_code\": \"US\",\n \"candidate_resume\": \"Experienced software engineer with 8 years ...\",\n \"candidate_external_id\": \"ATS-12345\",\n \"candidate_linkedin_url\": \"https://www.linkedin.com/in/jane-doe\",\n \"form\": {\n \"education\": \"masters_degree\",\n \"languages\": [\n {\n \"code\": \"en\",\n \"level\": \"c2\"\n }\n ],\n \"residency\": \"US\",\n \"nationality\": \"US\",\n \"visa\": \"has_visa\",\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_country_code\": \"US\",\n \"candidate_resume\": \"Experienced software engineer with 8 years ...\",\n \"candidate_external_id\": \"ATS-12345\",\n \"candidate_linkedin_url\": \"https://www.linkedin.com/in/jane-doe\",\n \"form\": {\n \"education\": \"masters_degree\",\n \"languages\": [\n {\n \"code\": \"en\",\n \"level\": \"c2\"\n }\n ],\n \"residency\": \"US\",\n \"nationality\": \"US\",\n \"visa\": \"has_visa\",\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_country_code\": \"US\",\n \"candidate_resume\": \"Experienced software engineer with 8 years ...\",\n \"candidate_external_id\": \"ATS-12345\",\n \"candidate_linkedin_url\": \"https://www.linkedin.com/in/jane-doe\",\n \"form\": {\n \"education\": \"masters_degree\",\n \"languages\": [\n {\n \"code\": \"en\",\n \"level\": \"c2\"\n }\n ],\n \"residency\": \"US\",\n \"nationality\": \"US\",\n \"visa\": \"has_visa\",\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

Authorization
string
header
required

Supabase JWT — Authorization: Bearer <token>.

Body

application/json
position_id
string
required

Position (position_def_set) id the candidate is being screened against.

Minimum string length: 1
Example:

"00000000-0000-0000-0000-000000000000"

candidate_name
string
required

Candidate full name.

Minimum string length: 1
Example:

"Jane Doe"

candidate_email
string
required

Candidate email (normalised to trimmed lowercase).

Minimum string length: 1
Example:

"jane.doe@example.com"

candidate_country_code
string
required

Candidate country code, used as default residency/nationality.

Minimum string length: 1
Example:

"US"

candidate_resume
string
required

Plaintext candidate resume.

Minimum string length: 1
Example:

"Experienced software engineer with 8 years ..."

candidate_external_id
string

Optional external identifier stored on the candidate profile.

Example:

"ATS-12345"

candidate_linkedin_url
string

Optional LinkedIn profile URL stored on the candidate profile.

Example:

"https://www.linkedin.com/in/jane-doe"

form
object

Optional structured pre-screening form used by the assessment rules. Custom fields (defined via form_fields) are also accepted.

Response

Pre-screening completed, or an early { decision_status, message } result when the candidate is not in the pre-screening candidate_action state.

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.

success
boolean
required
Example:

true

decision_status
string
required

Applied decision status for the pre-screening step.

Example:

"recruiter_action"

recommendation
enum<string>
required

AI recommendation derived from the pre-screening status.

Available options:
ai_accept,
ai_reject,
recruiter_action
Example:

"recruiter_action"

profile_interview_id
string
required

Candidate profile_interview id.

interview_result_pre_screening_id
string
required

Inserted interview_result_pre_screening id.

interview_file_id
string
required

Stored resume interview_file id.

pre_screening_score
number | null
required

AI match score.

resume_ai_analysis
string | null
required

AI resume analysis feedback.

resume_ai_education
string | null
required

AI-detected education level of the candidate.

resume_ai_technical_experience
number | null
required

AI-estimated years of relevant experience.

resume_ai_is_switching_profession
boolean | null
required

Whether the candidate is switching profession.

processing_reason
string | null
required

Reason the candidate failed screening, when applicable.