Skip to main content
There are four ways to create an interview, depending on how much you want JobMojito to generate for you:
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

The interview_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.
Filter directly to the modality you want: GET /merchant-avatar-list?type=interactive_elevenlabs for voice-only, or ?type=interactive_heygen for a realtime avatar. The item’s id is the interview_template_id you pass below.
Some options only work on avatar templates. On a voice-only (interactive_elevenlabs) template, early_stop scoring and instructional_video are unsupported and the create call returns 422. Pick an interactive_heygen template if you need those.
To confirm the modality of an interview you’ve already created, read it back with 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 to job-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 name null/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, and company_size are 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 ordered questions array. Same required interview fields as Option A, plus a description.
Each 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. Create the position (or reuse one), enrol a candidate, run pre-screening, and get a tokenised interview URL back — all in one request.
If you already have a position, pass 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.
Need to publish, archive, or unpublish later? Use POST /job-interview-set-state (set_interview_state) with the position_id and a status of active, draft, archived, or deleted. Retrieve a definition with POST /job-interview-get (get_interview_definition).

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. The opening_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.
The interview role-play (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_attempts limits how many times a candidate may take the role-play; it defaults to 3.
The cap is not a hard ceiling. A recruiter can always grant one more go with POST /job-interview-result-request-another-attempt (request_another_interview_attempt) — a released attempt no longer counts against the cap.
The first example creates a coaching persona, the second the interview-portal interview role-play. The role fields are identical for either variant.
Returns 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.
Two rules make the difference between a scenario that assesses something and one that does not:
  • Unlocks when / Done when must 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 goalposts line, a role-play that is supposed to be winnable often is not.
The 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.