curl --request GET \
--url https://cool.jobmojito.com/functions/v1/merchant-result-list \
--header 'Authorization: Bearer <token>'import requests
url = "https://cool.jobmojito.com/functions/v1/merchant-result-list"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://cool.jobmojito.com/functions/v1/merchant-result-list', 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/merchant-result-list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://cool.jobmojito.com/functions/v1/merchant-result-list"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://cool.jobmojito.com/functions/v1/merchant-result-list")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://cool.jobmojito.com/functions/v1/merchant-result-list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"interview_result_id": "<string>",
"interview_result_pre_screening_id": "<string>",
"merchant_id": "<string>",
"profile_id": "<string>",
"profile_interview_id": "<string>",
"definition_id": "<string>",
"position_id": "<string>",
"position_result_id": "<string>",
"current_position_result_step_id": "<string>",
"candidate_name": "<string>",
"candidate_email": "<string>",
"position_name": "<string>",
"position_step": "pre-screening",
"type": "interview",
"emoji": "<string>",
"external_id": "<string>",
"mojito_language_code": "<string>",
"status": "<string>",
"coach_status": "<string>",
"decision_status": "recruiter_accept",
"interview_started": true,
"is_multi_stage": true,
"is_test": true,
"recruiter_shortlist": true,
"recruiter_risks": "<unknown>",
"duration_ds": 123,
"score": 123,
"score_simulation": 123,
"score_sentiment": 123,
"score_words_per_minute": 123,
"score_interview_ai": 123,
"score_answer_ai": 123,
"score_pronunciation": 123,
"processing_status": "<string>",
"processing_error": "<string>",
"kyc_processing_status": "<string>",
"position_result_step_id": "<string>",
"position_def_step_id": "<string>",
"position_step_name": "<string>",
"position_step_index": 123,
"position_step_count": 123,
"human_interview_request_id": "<string>",
"human_interview_status": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"assigned_profile_id": "<string>",
"owner_profile_id": "<string>",
"owner_name": "<string>",
"step_since": "<string>",
"questionnaire_score": 123,
"questionnaire_score_max": 123,
"outcome": "pending",
"outcome_at": "<string>",
"hire_start_date": "<string>",
"decision_reason_id": "<string>",
"decision_reason_label": "<string>",
"decision_reason_note": "<string>",
"withdrawn_at": "<string>"
}
],
"pagination": {
"total": 137,
"limit": 50,
"offset": 0,
"has_more": true
}
}{
"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"
}List interview results
Paginated list of a merchant’s interview results and multi-stage applications (the admin-portal results list), scoped to your token’s merchant (or a merchant_id override). Rows of positions or candidates hidden from you (position access) are left out. Capped at 1000 records per page. Each read is recorded in the audit log when the company has it on.
curl --request GET \
--url https://cool.jobmojito.com/functions/v1/merchant-result-list \
--header 'Authorization: Bearer <token>'import requests
url = "https://cool.jobmojito.com/functions/v1/merchant-result-list"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://cool.jobmojito.com/functions/v1/merchant-result-list', 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/merchant-result-list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://cool.jobmojito.com/functions/v1/merchant-result-list"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://cool.jobmojito.com/functions/v1/merchant-result-list")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://cool.jobmojito.com/functions/v1/merchant-result-list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"interview_result_id": "<string>",
"interview_result_pre_screening_id": "<string>",
"merchant_id": "<string>",
"profile_id": "<string>",
"profile_interview_id": "<string>",
"definition_id": "<string>",
"position_id": "<string>",
"position_result_id": "<string>",
"current_position_result_step_id": "<string>",
"candidate_name": "<string>",
"candidate_email": "<string>",
"position_name": "<string>",
"position_step": "pre-screening",
"type": "interview",
"emoji": "<string>",
"external_id": "<string>",
"mojito_language_code": "<string>",
"status": "<string>",
"coach_status": "<string>",
"decision_status": "recruiter_accept",
"interview_started": true,
"is_multi_stage": true,
"is_test": true,
"recruiter_shortlist": true,
"recruiter_risks": "<unknown>",
"duration_ds": 123,
"score": 123,
"score_simulation": 123,
"score_sentiment": 123,
"score_words_per_minute": 123,
"score_interview_ai": 123,
"score_answer_ai": 123,
"score_pronunciation": 123,
"processing_status": "<string>",
"processing_error": "<string>",
"kyc_processing_status": "<string>",
"position_result_step_id": "<string>",
"position_def_step_id": "<string>",
"position_step_name": "<string>",
"position_step_index": 123,
"position_step_count": 123,
"human_interview_request_id": "<string>",
"human_interview_status": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"assigned_profile_id": "<string>",
"owner_profile_id": "<string>",
"owner_name": "<string>",
"step_since": "<string>",
"questionnaire_score": 123,
"questionnaire_score_max": 123,
"outcome": "pending",
"outcome_at": "<string>",
"hire_start_date": "<string>",
"decision_reason_id": "<string>",
"decision_reason_label": "<string>",
"decision_reason_note": "<string>",
"withdrawn_at": "<string>"
}
],
"pagination": {
"total": 137,
"limit": 50,
"offset": 0,
"has_more": true
}
}{
"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>.
Query Parameters
Optional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
"28106cba-1c27-4e53-b149-32113e5e8e31"
Product type of results to list. Multi-stage applications count as interview.
interview, coaching, assessment, public_avatar, persona, persona_interview "interview"
Filter by decision/completion state, as the admin results tabs do. Omit (or empty) to include all. undecided: completed and waiting for a recruiter decision, not shortlisted (undecided-interview, undecided-pre-screening and undecided-meeting narrow it to the current step type; undecided-pre-screening and undecided-meeting match multi-stage applications only); shortlist: waiting for a decision and shortlisted; decided: decided either way; decided-selected / decided-rejected: accepted / rejected (by a recruiter or the AI); submitted: the interview was submitted; completed: the candidate is done; incomplete: the candidate still has something to do; failed: the interview or its processing failed; abandoned: abandoned or stopped without speech; archived-interview: archived results; public_avatar / archived-public_avatar: public avatar sessions (single-stage only).
undecided, undecided-interview, undecided-pre-screening, undecided-meeting, shortlist, decided, decided-selected, decided-rejected, submitted, completed, incomplete, failed, abandoned, archived-interview, public_avatar, archived-public_avatar, "undecided"
Filter by the type of the current pipeline step. A single-stage interview counts as interview. Omit for all. Use position_def_step_id instead to filter by one step of a position.
pre-screening, interview, invited, meeting, external_assessment, certo_verification "interview"
Filter to the applications whose current step is this step of a position (position_def_step.id). Matches multi-stage applications only. Not together with step.
Filter to one interview (interview_def_set.id) or position (position_def_set.id).
Filter to a single candidate (profile_interview.id).
Filter by the candidate owner: staff profile ids (profile.id) and/or the word unassigned, comma-separated (a row matches any of them). The owner is the person assigned to the result, else the recruiter of its interview or position. Needs the candidate_assignment switch (else 403).
"unassigned"
true: only results with a candidate video introduction; false: only results without one. Omit for all.
true, false "true"
Comma-separated list of recruiter-risk keys to filter by (matches any).
Sort order of the result set.
score, created_at_newest, created_at_oldest, updated_at_newest "created_at_newest"
Case-insensitive search on candidate name or email, or the interview / position name.
Filter by the candidate emoji marker.
When true, each row also carries its owner (assigned_profile_id, owner_profile_id, owner_name), step_since, the questionnaire score and the decision (outcome, outcome_at, hire_start_date, decision_reason_id, decision_reason_label, decision_reason_note, withdrawn_at). Costs one extra read per page.
true, false "false"
Maximum number of records to return (1–1000).
1 <= x <= 100050
Number of records to skip from the start of the result set.
x >= 00