import requests
url = "https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interview-drafts/"
payload = {
"topic": "<string>",
"interview_type": "interview",
"questions": ["<string>"],
"topics": [
{
"title": "<string>",
"description": "<string>",
"skill_id": "<string>"
}
],
"assignee_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"invite_emails": ["[email protected]"],
"language": "<string>",
"custom_message": "<string>",
"custom_focus": "<string>",
"scheduled_send_at": "2023-11-07T05:31:56Z",
"reminders_enabled": False,
"reminder_start_after_days": 2,
"reminder_interval_days": 3,
"reminder_max_count": 3,
"source_agent_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_name": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
topic: '<string>',
interview_type: 'interview',
questions: ['<string>'],
topics: [{title: '<string>', description: '<string>', skill_id: '<string>'}],
assignee_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
invite_emails: ['[email protected]'],
language: '<string>',
custom_message: '<string>',
custom_focus: '<string>',
scheduled_send_at: '2023-11-07T05:31:56Z',
reminders_enabled: false,
reminder_start_after_days: 2,
reminder_interval_days: 3,
reminder_max_count: 3,
source_agent_session_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
campaign_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
campaign_name: '<string>'
})
};
fetch('https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interview-drafts/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interview-drafts/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"topic": "<string>",
"interview_type": "interview",
"questions": [
"<string>"
],
"topics": [
{
"title": "<string>",
"description": "<string>",
"skill_id": "<string>"
}
],
"assignee_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"invite_emails": [
"[email protected]"
],
"language": "<string>",
"custom_message": "<string>",
"custom_focus": "<string>",
"scheduled_send_at": "2023-11-07T05:31:56Z",
"reminders_enabled": false,
"reminder_start_after_days": 2,
"reminder_interval_days": 3,
"reminder_max_count": 3,
"source_agent_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_name": "<string>"
}
'{
"topic": "<string>",
"interview_type": "interview",
"questions": [
"<string>"
],
"topics": [
{
"title": "<string>",
"description": "<string>",
"skill_id": "<string>"
}
],
"assignee_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"invite_emails": [
"[email protected]"
],
"language": "<string>",
"custom_message": "<string>",
"custom_focus": "<string>",
"scheduled_send_at": "2023-11-07T05:31:56Z",
"reminders_enabled": false,
"reminder_start_after_days": 2,
"reminder_interval_days": 3,
"reminder_max_count": 3,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"campaign": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"test_runs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"language": "<string>",
"started_from_topic_index": 123,
"started_from_topic_title": "<string>",
"skipped_topic_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"jumps": [
{
"from_topic_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"to_topic_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"at_message_count": 123
}
],
"message_count": 123,
"draft_changed_since_start": true,
"interview_url": "<string>",
"draft_source_session": {
"kind": "clara_fast",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"source_session": {
"kind": "clara_fast",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by_email": "[email protected]",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "User not found"
}{
"error": "Authentication credentials were not provided."
}{
"error": "You do not have permission to perform this action."
}{
"error": "Not found."
}Create an interview draft
Save a draft of an interview assignment. Admin only.
A draft holds the whole assignment payload but creates no interviews and
sends nothing — it only becomes real interviews when a human sends it via
the assign endpoint (passing draft_id). Validation is deliberately
permissive: every field is optional, recipients may be stale, and the
schedule may be in the past — the real rules apply at send time. This is
the endpoint LLM tools use, precisely because it cannot trigger email.
When a topic is provided, a short title is generated from it and
returned as name (regenerated whenever the topic changes on update).
import requests
url = "https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interview-drafts/"
payload = {
"topic": "<string>",
"interview_type": "interview",
"questions": ["<string>"],
"topics": [
{
"title": "<string>",
"description": "<string>",
"skill_id": "<string>"
}
],
"assignee_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"invite_emails": ["[email protected]"],
"language": "<string>",
"custom_message": "<string>",
"custom_focus": "<string>",
"scheduled_send_at": "2023-11-07T05:31:56Z",
"reminders_enabled": False,
"reminder_start_after_days": 2,
"reminder_interval_days": 3,
"reminder_max_count": 3,
"source_agent_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_name": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
topic: '<string>',
interview_type: 'interview',
questions: ['<string>'],
topics: [{title: '<string>', description: '<string>', skill_id: '<string>'}],
assignee_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
invite_emails: ['[email protected]'],
language: '<string>',
custom_message: '<string>',
custom_focus: '<string>',
scheduled_send_at: '2023-11-07T05:31:56Z',
reminders_enabled: false,
reminder_start_after_days: 2,
reminder_interval_days: 3,
reminder_max_count: 3,
source_agent_session_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
campaign_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
campaign_name: '<string>'
})
};
fetch('https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interview-drafts/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interview-drafts/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"topic": "<string>",
"interview_type": "interview",
"questions": [
"<string>"
],
"topics": [
{
"title": "<string>",
"description": "<string>",
"skill_id": "<string>"
}
],
"assignee_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"invite_emails": [
"[email protected]"
],
"language": "<string>",
"custom_message": "<string>",
"custom_focus": "<string>",
"scheduled_send_at": "2023-11-07T05:31:56Z",
"reminders_enabled": false,
"reminder_start_after_days": 2,
"reminder_interval_days": 3,
"reminder_max_count": 3,
"source_agent_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaign_name": "<string>"
}
'{
"topic": "<string>",
"interview_type": "interview",
"questions": [
"<string>"
],
"topics": [
{
"title": "<string>",
"description": "<string>",
"skill_id": "<string>"
}
],
"assignee_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"invite_emails": [
"[email protected]"
],
"language": "<string>",
"custom_message": "<string>",
"custom_focus": "<string>",
"scheduled_send_at": "2023-11-07T05:31:56Z",
"reminders_enabled": false,
"reminder_start_after_days": 2,
"reminder_interval_days": 3,
"reminder_max_count": 3,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"campaign": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"test_runs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"language": "<string>",
"started_from_topic_index": 123,
"started_from_topic_title": "<string>",
"skipped_topic_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"jumps": [
{
"from_topic_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"to_topic_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"at_message_count": 123
}
],
"message_count": 123,
"draft_changed_since_start": true,
"interview_url": "<string>",
"draft_source_session": {
"kind": "clara_fast",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"source_session": {
"kind": "clara_fast",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by_email": "[email protected]",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "User not found"
}{
"error": "Authentication credentials were not provided."
}{
"error": "You do not have permission to perform this action."
}{
"error": "Not found."
}Authorizations
Use Authorization: Bearer
Path Parameters
UUID of the project
Body
Writable fields of an interview draft. Everything is optional — drafts are
deliberately permissive and only sending (assign with draft_id) enforces
the real assignment rules.
The interview focus. When set, a short title is generated from it.
Which conversation type the draft fans out to when sent. Set at creation (form type cards, or the scoping conversation's draft tool) and immutable afterwards — updates that change it are rejected (400).
interview, guided-interview Optional specific topics or questions (max 10). Rejected on
guided-interview drafts — their topics structure the conversation.
Guided drafts only (rejected otherwise): the ordered, editable topics the interview walks through (max 12). The scoping conversation's draft tool pre-seeds them from the standard guide.
Show child attributes
Show child attributes
UUIDs of project members to interview. May go stale; re-validated at send.
Emails of people not yet on the project. Nobody is contacted until the draft is sent.
ISO language code (e.g. fr) the interviews created from this draft must be
conducted in. Null (the default) adapts to each recipient's own preferred
language. Unknown codes are rejected (400).
Optional note replacing the default invitation email copy.
Overrides the "what it's about" focus block in invitation emails without changing the interview focus. Null (the default) shows the topic truncated to a teaser; empty string removes the block; text is shown verbatim.
5001 <= x <= 301 <= x <= 301 <= x <= 10Creation only: the CMA Clara session drafting this (passed by the agent via
the MCP draft_interviews tool). Must be one of the caller's own Clara
sessions scoped to this project, else 400. Ignored on update. In-process
Clara records its conversation directly; both read back as source_session.
Existing campaign (of the same project) to group the draft's interviews
under; null removes the draft from its campaign. Wins over
campaign_name when both are sent.
Campaign to group the draft's interviews under, by name: reuses the project's campaign with that name (case-insensitive) or creates it.
Response
Draft created
A saved, unsent interview-assignment payload. Becomes one interview per
recipient when sent via the assign endpoint (with draft_id), which
also deletes the draft.
The interview focus. When set, a short title is generated from it.
Which conversation type the draft fans out to when sent. Set at creation (form type cards, or the scoping conversation's draft tool) and immutable afterwards — updates that change it are rejected (400).
interview, guided-interview Optional specific topics or questions (max 10). Rejected on
guided-interview drafts — their topics structure the conversation.
Guided drafts only (rejected otherwise): the ordered, editable topics the interview walks through (max 12). The scoping conversation's draft tool pre-seeds them from the standard guide.
Show child attributes
Show child attributes
UUIDs of project members to interview. May go stale; re-validated at send.
Emails of people not yet on the project. Nobody is contacted until the draft is sent.
ISO language code (e.g. fr) the interviews created from this draft must be
conducted in. Null (the default) adapts to each recipient's own preferred
language. Unknown codes are rejected (400).
Optional note replacing the default invitation email copy.
Overrides the "what it's about" focus block in invitation emails without changing the interview focus. Null (the default) shows the topic truncated to a teaser; empty string removes the block; text is shown verbatim.
5001 <= x <= 301 <= x <= 301 <= x <= 10Title generated from the topic at save time; empty when the draft has no topic (clients show "Untitled draft interview").
Campaign the interviews created from this draft will belong to; null
when none. Set via campaign_id / campaign_name.
Show child attributes
Show child attributes
This draft's test runs, newest first (see InterviewTestRun).
Show child attributes
Show child attributes
The Clara session that created a draft (provenance, SET_NULL on both ends).
kind decides the route a client builds: clara_fast = in-process Work with
Clara conversation (/agent/clara-fast?conversation_id=), cma = Managed-Agents
Clara session (/agent/clara?session_id=), coach = any other coach
conversation (e.g. scoping), recorded but not linked from the test page.
Show child attributes
Show child attributes