Skip to main content
POST
Create an interview for a candidate and return an access token URL

Authorizations

Authorization
string
header
required

Supabase JWT — Authorization: Bearer <token>.

Body

application/json
candidate_name
string
required

Candidate full name.

Minimum string length: 1
Example:

"John"

candidate_email
string
required

Candidate email (used as auth identity).

Minimum string length: 1
Example:

"peterson6@hello.com"

candidate_country_code
string
required

ISO country code of the candidate.

Minimum string length: 1
Example:

"HR"

candidate_resume
string
required

Candidate resume parsed text.

Minimum string length: 1
Example:

"Curriculum Vitae ..."

position_def_set_id
string | null

Existing position_def_set id. When provided, the position is looked up instead of created, and position_name/position_location/position_country_code/mojito_language_code become optional.

Example:

"00000000-0000-0000-0000-000000000000"

position_external_id
string | null

External position code used to look up an existing position.

Example:

"JOB-123"

interview_template_id
string | null

Interview template id to base the interview on. Defaults to the platform template when omitted.

Example:

"5d8ea38b-eec4-4866-aa6c-b2ea5bc6e45b"

merchant_id
string | null

Merchant id. Only honoured for admin / sub-merchant tokens; otherwise the token merchant is used.

Example:

"28106cba-1c27-4e53-b149-32113e5e8e31"

position_name
string | null

Position / job title. Required when position_def_set_id is not provided.

Example:

"Entry level coffee boy"

position_location
string | null

Position location. Required when position_def_set_id is not provided.

Example:

"remote"

position_country_code
string | null

ISO country code of the position. Required when position_def_set_id is not provided.

Example:

"SK"

mojito_language_code
enum<string> | null

Interview language code (one of the platform-languages.json codes). Required when position_def_set_id is not provided.

Available options:
ar,
bg,
zh,
hr,
cs,
da,
nl,
en,
fil,
fi,
fr,
de,
el,
hi,
hu,
id,
it,
ja,
ko,
ms,
no,
pl,
pt,
br,
ro,
ru,
sk,
es,
sv,
ta,
th,
tr,
uk,
vi
Example:

"en"

position_description
string | null

Short, two-sentence position description shown to the candidate. Provide it to use it as-is; leave it null/blank and it is AI-generated from the position name and any other context.

position_description_long
string | null

Full position description in Markdown (Job Purpose, Responsibilities, Required & Preferred Qualifications). Provide it to use it as-is; leave it null/blank and it is AI-generated.

candidate_external_id
string | null

External candidate id stored on the profile.

candidate_linkedin_url
string | null

Candidate LinkedIn URL.

candidate_video_introduction
enum<string> | null

Whether a candidate video introduction is optional or required.

Available options:
optional,
required
interview_attempts
number | null

Number of allowed interview attempts (1-20).

Required range: 1 <= x <= 20
Example:

3

seniority_level
enum<string> | null

Seniority level of the position. Auto-detected when omitted.

Available options:
entry-level,
intermediate,
senior,
managerial,
director,
executive
result_view
enum<string> | null

How interview results are shown to the candidate. Defaults to minimal.

Available options:
none,
minimal,
minimal_with_score,
advanced,
full,
full_expand_scores
custom_scoring
object | null

Optional custom scoring overrides merged with platform defaults.

use_enhanced_expectations
boolean | null

Reserved flag for enhanced candidate expectations generation.

include_rapport_question
boolean | null

Include an opening rapport question. Defaults to false.

include_closing_prompt
boolean | null

Include a closing prompt. Defaults to true.

instructional_video
boolean | null

Show an instructional video before the interview. Defaults to false.

instructional_video_custom_text
string | null

Custom text shown with the instructional video.

welcome_message
string | null

Custom welcome message for the interview.

thank_you_message
string | null

Custom thank-you message shown after the interview.

max_duration
number | null

Maximum interview duration in seconds. Scopes how many questions are generated and is stored on the interview as the live session limit and the basis for the credit multiplier. Defaults to 1200 (20 minutes) when omitted.

Example:

1200

is_embedded
boolean | null

Set true when the interview will be embedded as an iframe on an external page. Ensures an embed key exists and returns embed_id/embed_signing_key, used to authenticate/sign the iframe embed.

interview_department
string | null

Department the position belongs to.

Example:

"Engineering"

interview_salary
string | null

Salary range shown for the position.

Example:

"$80k - $100k"

interview_available_till
string | null

ISO date/time after which the interview is no longer available to candidates. null keeps it always available.

Example:

"2026-12-31"

interview_conversation_speed
enum<string> | null

Conversation pace of the AI avatar. Omit/null keeps the template default pace. Options — slower: The avatar speaks more slowly — easier to follow for non-native speakers. | normal: Default speaking pace. | faster: The avatar speaks more quickly for a snappier conversation..

Available options:
slower,
normal,
faster
Example:

"normal"

max_followups
integer | null

Maximum number of AI follow-up questions. 0 disables follow-ups; presets are 0-3 (none/low/normal/high) and custom values start at 4; null uses the template default (Normal).

Required range: 0 <= x <= 999
Example:

2

questions_random_subset
number | null

Ask only a random subset of the questions, expressed as a fraction between 0.01 and 0.9 (e.g. 0.5 = 50%). null asks all questions.

Required range: 0.01 <= x <= 0.9
Example:

0.5

required_pronunciation
boolean | null

Require pronunciation assessment (restricts to pronunciation-capable languages). Defaults to false.

Example:

false

result_enable_edit_transcript
boolean | null

Allow editing the transcript on the result view. Defaults to true.

Example:

true

tags
string[] | null

Free-form tags stored on the interview.

Example:
recruiter_profile_id
string | null

Profile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant.

hiring_for_company
object | null

Who the position is really for. Omit/null (or an object with name null/blank) when hiring for yourself; { name: 'undisclosed' } for an unnamed external client; or { name: '' } plus optional description/location/sector/company_size for a named client. Stored in creation_parameters.hiring_for_company.

Example:
pdf_export_auto_config
object | null

Auto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.

Response

Candidate enrolled. Decision status, ids, and a tokenised interview URL.

Result of creating (or resolving) the position and enrolling the candidate. Fields present depend on the decision branch.

status
enum<string>
required

Decision / lifecycle status for the candidate against this position.

Available options:
ai_accept,
recruiter_accept,
recruiter_action,
ai_reject,
recruiter_reject,
already-applied
interview_url
string
required

URL the candidate should open to continue.

position_def_set_id
string

Created/resolved position id.

interview_def_set_id
string

Created/resolved interview definition set id.

profile_interview_id
string

Candidate profile_interview id.

reason
string

Human-readable reason, present on reject / already-applied branches.

embed_id
string

Embed id, present only when is_embedded=true.

embed_signing_key
string

Embed signing key, present only when is_embedded=true.