Skip to main content
POST
Create and assign interviews

Authorizations

Authorization
string
header
required

Use Authorization: Bearer

Path Parameters

project_id
string<uuid>
required

UUID of the project

Body

application/json
assignee_ids
string<uuid>[]

UUIDs of existing project members to interview (must be tech/contributor members).

invite_emails
string<email>[]

Email addresses of people to invite on the fly as non-admin Contributors and assign an interview.

topic
string

The interview focus. Used to auto-name the interview and seed its first question.

write_scope
enum<string>
default:local

Whether interview edits stay local to the conversation or write to the shared knowledge store.

Available options:
local,
global
focused_mode
boolean
default:false

Simplified interview: recipients open the distraction-free full-page chat instead of the app. When a draft_id is set, defaults to the draft's value.

questions
string[]

Optional specific topics or questions (max 10). Clara weaves them naturally into the open interview and covers each before closing the topic.

language
string | null

ISO language code (e.g. fr) the interview must be conducted in. Null adapts to each recipient's own preferred language. When a draft_id is set and this field is absent, defaults to the draft's value. Unknown codes are rejected (400).

custom_message
string

Optional note from the assigner; replaces the default invitation email copy.

scheduled_send_at
string<date-time> | null

Optional future time to send the invitation email (in-app visibility stays immediate).

reminders
object

Automatic reminder settings (disabled by default).

interview_type
enum<string>
default:interview

Conversation type to create. Ignored when draft_id is set (the draft's type is authoritative).

Available options:
interview,
guided-interview
topics
object[]

Guided interviews only: the ordered topics the interview walks through (max 12, at least one required for guided sends). Overrides a consumed draft's saved topics when provided.

draft_id
string<uuid> | null

Optional id of a saved interview draft this send consumes. Rejected (400) when the draft no longer exists (already sent or deleted).

campaign_id
string<uuid> | null

Existing campaign to group the created interviews under (must belong to the project). Absent falls back to the consumed draft's saved campaign; an explicit null clears a drafted campaign. Wins over campaign_name when both are sent.

campaign_name
string

Campaign to group the created interviews under, by name: reuses the project's campaign with that name (case-insensitive) or creates it.

Response

Interviews created and assigned

id
string<uuid>
read-only
name
string | null

Interview title (auto-generated from the topic when not provided).

created_by
string<uuid>
read-only

UUID of the user who created the interview.

created_by_email
string<email> | null
read-only

Email of the user who created the interview (the importer, for imported interviews).

type
string

Conversation type: "interview" (standard mono-topic), "guided-interview" (a multi-topic deep-dive whose ordered topics come from the sent draft or assign payload; its focus text lives in type_additional_parameters.interview_focus), or "imported-interview" (a read-only transcript of an interview recorded outside the platform, created via the import-transcript endpoint).

type_additional_parameters
object

Free-form parameters associated with the conversation type.

chat_history
object[]

Ordered list of transcript entries (messages, tool calls, etc.).

chat_memory
object

Assistant memory state accumulated over the conversation.

local_documents
object[]
read-only

Files uploaded during this interview (ordered by upload time). Only the id and name are included; resolve a fresh signed download URL via the project-level local-documents detail endpoint.

assigned_to
string<uuid> | null
read-only

UUID of the assigned user (null while a pending invite has not yet joined).

assigned_by
string<uuid> | null
read-only

UUID of the user who created the assignment.

assigned_to_email
string<email> | null
read-only

Assignee email, falling back to the invite email for not-yet-joined invitees.

assigned_by_email
string<email> | null
read-only
is_pending_invite
boolean
read-only

True when assigned to someone who has not yet joined the project.

invite_config
object | null
read-only

Invitation-email customization and reminder schedule for an assigned interview. Null for self-assigned interviews, non-interview conversations, and interviews created before this feature existed.

interview_focus
object | null
read-only

The seeded interview topic and optional specific questions, for rendering the in-chat intro card. Null for non-interviews and interviews without a topic. For guided interviews this is read from type_additional_parameters.interview_focus (they have no focus issue).

topics
object[]
read-only

Guided interviews only: the ordered topic agenda seeded at send time, with per-topic progress. Empty for every other interview type.

campaign
object | null

Campaign this interview belongs to; null for ad hoc interviews.

is_first_interview
boolean
read-only

True while the requesting user has never started an assigned interview in this project. Drives the intro card's expanded "how it works" explainer.

import_info
object | null

Parse-pipeline state of an imported external transcript (interviews of type "imported-interview"). Null on every other interview type. The raw pasted transcript is never returned — the parsed chat_history is the transcript.

conversation_summary
string
read-only

Background-generated summary of the conversation ("" until generated).

status
enum<string> | null
read-only

Null for imported interviews until their transcript parse completes.

Available options:
pending,
in_progress,
completed
write_scope
enum<string>

Whether edits stay local to the conversation or write to the shared knowledge store.

Available options:
local,
global
focused_mode
boolean
read-only

Simplified interview: when true the invite opens the distraction-free full-page chat (/interview//) instead of the app. Set at assign time; never changed afterwards.

created_at
string<date-time>
read-only
updated_at
string<date-time>
read-only