You’ll need an
interview_template_id. List your available templates with GET /merchant-avatar-list (MCP tool list_avatars) and pick one.The template picks the interview modality
Theinterview_template_id is not just cosmetic — the template’s type decides whether the candidate gets a voice-only or an avatar experience. Choose it deliberately; there is no separate “voice or avatar” flag on the create call.
offline_elai and offline_synthesia are legacy integrations. They may still appear in list_avatars for older accounts, but they cannot be used to create new interviews — only offline_heygen is supported for the pre-recorded modality.get_interview_definition (POST /job-interview-get) — the response includes interview_template_type and a convenience is_voice_only boolean.
Option A — from a job position (AI-generated questions)
JobMojito writes the description, questions, and candidate expectations for you.1
Choose a template
Call
GET /merchant-avatar-list and note an interview_template_id.2
Create the interview
Send the position details. The required fields are
name, location, interview_template_id, mojito_language_code, status, type, and visibility.3
Personalize the candidate experience & scoring (optional but recommended)
The defaults are generic. In the same create call, set these fields to tailor the interview — they are easy to forget:
welcome_message— the custom message shown to the candidate before they start. Set it to greet the candidate and set expectations.thank_you_message— the custom message shown after they finish.custom_scoring— an object of result-scoring overrides (your custom rubric). It is merged over the platform defaults and any template overrides, so you only need to include what you want to change. Omit it to use the template/default scoring.
custom_scoring is a free-form overrides object — its exact shape follows your account’s scoring model. Fetch an existing interview with get_interview_definition to see the current scoring structure before overriding it.4
Capture the interview id
The response returns
interview_def_set_id — keep it; you’ll use it to invite candidates and review results. Note it is passed back to other endpoints under different field names (position_id, interview_id) — see Identifiers & admin links.Key fields
How many questions fit
interview_length is capped by max_duration, which allows one question per 2 minutes — enough for the question, the answer, and automatic follow-ups.
Asking for more than the cap is not an error — you get the cap. The create response returns
questions_generated with the real count, so check it if the number matters to you.
Additional configuration
These optional fields fine-tune the position, the conversation, and what candidates see. They apply tojob-interview-create and job-interview-create-from-array (and, where noted, job-interview-create-for-candidate-with-token). All are optional — omit any you don’t need.
hiring_for_company describes the end employer so the AI agent can answer candidate questions accurately. All fields are optional; name carries the original meaning:
- Omit the field entirely, or send
namenull/blank → hiring for yourself (no external-client note). { "name": "undisclosed" }→ external client whose name is withheld from the candidate.{ "name": "<company>" }→ named external client;description,location,sector, andcompany_sizeare surfaced to the agent as background context.
pdf_export_auto_config mirrors the report options — every key is optional:
On
job-interview-create-for-candidate-with-token these same fields are honoured (it creates the interview through the multistage flow). They require the interview_create_multi_stage migration to be deployed.Option B — from your own questions
Supply an orderedquestions array. Same required interview fields as Option A, plus a description.
questions item requires question (the text). Useful per-question flags: duration (seconds), is_without_scoring, is_multiple_choice, question_alternatives, is_conditional + conditional_question_main_id (for follow-ups), and knowledge_base_id (ask grounded questions — see Manage a knowledge base).
The personalization fields from Option A — welcome_message, thank_you_message, and custom_scoring — plus everything in Additional configuration apply here too. Set them in the same call so the candidate experience and rubric aren’t left on the generic defaults.
You may also pass candidate_expectations_json — a structured expectations object bucketed by requirement level ({ "weak": [...], "moderate": [...], "strong": [...] }). Omit it and JobMojito auto-generates one for type: "interview".
Returns interview_def_set_id.
Option C — one call per candidate (returns a link)
Create the position (or reuse one), enrol a candidate, run pre-screening, and get a tokenised interview URL back — all in one request.position_def_set_id instead of the position_* fields. The response includes status (e.g. ai_accept, recruiter_action, ai_reject), interview_url, and the created interview_def_set_id / position_def_set_id.
Option D — a role-play persona (no Q&A)
A persona is a different product: the AI avatar plays a defined role in a free-form conversation instead of asking a scored list of questions. Use it for sales role-plays, mock-customer practice, or any “act as X” scenario. There is no AI question generation — the role fields you supply are the configuration. The session flows as: a welcome message → the avatar’s opening line → the candidate replies and the role-play begins → a closing message. Theopening_line is the literal first thing the avatar says; it’s the only scripted line, so set it in character (it defaults to a bare “Hello” if you omit it).
Two variants
POST /persona-create creates one of two variants, chosen with the optional portal parameter. Both run the identical session mechanics — free-form role-play, no question list, the same persona_* and opening_line fields, and the same persona scoring — but they live on different portals and are billed differently.
portal defaults to coaching, so existing callers are unaffected — a persona-create call that doesn’t mention portal behaves exactly as it did before. The coaching persona is otherwise unchanged: coaching portal only, billed against consumer coaching credits, with no attempt limit.portal: "interview") behaves like a persona in the session but like an interview commercially and operationally:
- Recruiters see the results. Interview role-plays are scored on the persona scoring path — you get per-answer and session-level feedback, the same as a coaching persona — and completed sessions appear in the recruiter results list alongside regular interviews. See Review results.
- Candidates are invited normally. Use the standard invitation flow (
POST /job-interview-register-users) to generate links or send email invites — see Invite candidates. - It draws on merchant credits. Cost is the standard interview formula — base format cost × duration multiplier, plus any recording add-ons — not consumer coaching credits. Each completed session is billed, so a candidate who uses every attempt costs a multiple of the single-session price. See How credits work.
- Attempts are capped.
interview_attemptslimits how many times a candidate may take the role-play; it defaults to 3.
interview_def_set_id (and embed_id / embed_signing_key when is_embedded is true).
Key fields
Common optional fields also apply:
code, cover_image_url, interview_location, max_duration (seconds, default 1200), recording, recording_full_session, result_view, interview_conversation_speed, candidate_video_introduction, tags, recruiter_profile_id, merchant_id, and is_embedded.
On the interview role-play variant (portal: "interview"), max_duration, recording, and recording_full_session drive the merchant-credit cost exactly as they do on a standard interview.
Progression
persona_avatar_progress is what stops a role-play from being either trivially easy or unwinnable. It is one plain-text value: the first line picks the mode, and the following lines are that mode’s labels, one per line. Use one mode, not both.
Pick turning point for a scene built on resistance the candidate has to work through, and steps for a difficult conversation the candidate is expected to run to a protocol.
Unlocks when/Done whenmust be observable. “The rep asks about the missed deliveries” is something an assessor can point at in the transcript. “The rep builds rapport” is not, and the avatar will apply it inconsistently.- No moving goalposts. Once the candidate has earned progress, the avatar must not invent a fresh obstacle. Without the
No goalpostsline, a role-play that is supposed to be winnable often is not.
Gates line is the link back to persona_avatar_knowledge: anything listed there should be one of the later personal details you wrote in that field, and none of them should be required to reach the goal.
The same progression is also fed to the grader, so it scores whether the candidate actually did the thing that was meant to unlock progress — not whether the avatar happened to soften.
Next steps
Invite candidates
Turn your new interview into links or email invitations.
Review results
Read transcripts, scores, and export reports once candidates finish.