curl --request POST \
--url https://api.illocution.ai/analyze \
--header 'Content-Type: multipart/form-data' \
--header 'X-API-Key: <api-key>' \
--form file='@example-file'import requests
url = "https://api.illocution.ai/analyze"
files = { "file": ("example-file", open("example-file", "rb")) }
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
options.body = form;
fetch('https://api.illocution.ai/analyze', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"conversation_id": "analysis_f38de2c0c1",
"utterances": 123,
"timeline": [
{
"utterance_id": "<string>",
"speaker": "<string>",
"t_start": 123,
"t_end": 123,
"text": "<string>",
"asr_confidence": 123,
"prosody": {},
"prosody_desc": "<string>",
"emotion": {},
"sentiment": {},
"polarity": 123,
"subjectivity": 123,
"cognitive": {},
"commitment_score": 123,
"commitment_level": "<string>",
"passion_score": 123,
"passion_level": "<string>",
"conviction_score": 123,
"lexical_markers": {},
"acoustic_reasoning": "<string>",
"confidence": 123
}
],
"summary": {
"overview": "<string>",
"key_insights": [
"<string>"
],
"notable_patterns": [
"<string>"
],
"recommendations": [
"<string>"
],
"what_went_well": [
"<string>"
],
"what_went_wrong": [
"<string>"
],
"speaker_dynamics": {},
"conversation_quality": "<string>"
},
"insights": {
"overall_sentiment": {
"mean": 123,
"std": 123,
"trend": "<string>"
},
"dominant_emotions": [
"<string>"
],
"key_moments": [
{
"moment_id": "<string>",
"speaker_id": "<string>",
"start_ms": 123,
"end_ms": 123,
"utterance_ids": [
"<string>"
],
"summary": "<string>",
"labels": [
"<string>"
],
"confidence": 123
}
],
"speaker_profiles": {},
"conversation_dynamics": {},
"cognitive_profile": {}
},
"transitions": [
{
"transition_id": "<string>",
"at_ms": 123,
"from_state": {},
"to_state": {},
"evidence_utterance_ids": [
"<string>"
],
"drivers": {},
"confidence": 123,
"stability": "<string>"
}
],
"moments": [
{
"moment_id": "<string>",
"speaker_id": "<string>",
"start_ms": 123,
"end_ms": 123,
"utterance_ids": [
"<string>"
],
"summary": "<string>",
"labels": [
"<string>"
],
"confidence": 123
}
],
"segmentation": {
"phases": [
{
"phase_id": "<string>",
"phase_name": "<string>",
"start_timestamp": 123,
"end_timestamp": 123,
"start_utterance_id": "<string>",
"end_utterance_id": "<string>",
"utterance_count": 123,
"theme": "<string>",
"summary": "<string>",
"emotional_tone": "<string>",
"key_moments": [
{
"moment_id": "<string>",
"speaker_id": "<string>",
"start_ms": 123,
"end_ms": 123,
"utterance_ids": [
"<string>"
],
"summary": "<string>",
"labels": [
"<string>"
],
"confidence": 123
}
],
"transition_signal": {
"transition_id": "<string>",
"at_ms": 123,
"from_state": {},
"to_state": {},
"evidence_utterance_ids": [
"<string>"
],
"drivers": {},
"confidence": 123,
"stability": "<string>"
}
}
],
"total_phases": 123,
"segmentation_rationale": "<string>",
"narrative_arc": "<string>",
"key_transitions": [
{
"transition_id": "<string>",
"at_ms": 123,
"from_state": {},
"to_state": {},
"evidence_utterance_ids": [
"<string>"
],
"drivers": {},
"confidence": 123,
"stability": "<string>"
}
]
},
"agent_results": "<array>",
"artifact_dir": "<string>",
"upload_path": "<string>",
"agent_outputs_path": "<string>",
"goal": "<string>"
}{
"detail": "Invalid or missing API key"
}{
"detail": "Invalid or missing API key"
}{
"detail": "Invalid or missing API key"
}Analyze media file
Upload a full recording and receive the complete JSON payload once processing completes. This is the canonical “batch” API.
curl --request POST \
--url https://api.illocution.ai/analyze \
--header 'Content-Type: multipart/form-data' \
--header 'X-API-Key: <api-key>' \
--form file='@example-file'import requests
url = "https://api.illocution.ai/analyze"
files = { "file": ("example-file", open("example-file", "rb")) }
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
options.body = form;
fetch('https://api.illocution.ai/analyze', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"conversation_id": "analysis_f38de2c0c1",
"utterances": 123,
"timeline": [
{
"utterance_id": "<string>",
"speaker": "<string>",
"t_start": 123,
"t_end": 123,
"text": "<string>",
"asr_confidence": 123,
"prosody": {},
"prosody_desc": "<string>",
"emotion": {},
"sentiment": {},
"polarity": 123,
"subjectivity": 123,
"cognitive": {},
"commitment_score": 123,
"commitment_level": "<string>",
"passion_score": 123,
"passion_level": "<string>",
"conviction_score": 123,
"lexical_markers": {},
"acoustic_reasoning": "<string>",
"confidence": 123
}
],
"summary": {
"overview": "<string>",
"key_insights": [
"<string>"
],
"notable_patterns": [
"<string>"
],
"recommendations": [
"<string>"
],
"what_went_well": [
"<string>"
],
"what_went_wrong": [
"<string>"
],
"speaker_dynamics": {},
"conversation_quality": "<string>"
},
"insights": {
"overall_sentiment": {
"mean": 123,
"std": 123,
"trend": "<string>"
},
"dominant_emotions": [
"<string>"
],
"key_moments": [
{
"moment_id": "<string>",
"speaker_id": "<string>",
"start_ms": 123,
"end_ms": 123,
"utterance_ids": [
"<string>"
],
"summary": "<string>",
"labels": [
"<string>"
],
"confidence": 123
}
],
"speaker_profiles": {},
"conversation_dynamics": {},
"cognitive_profile": {}
},
"transitions": [
{
"transition_id": "<string>",
"at_ms": 123,
"from_state": {},
"to_state": {},
"evidence_utterance_ids": [
"<string>"
],
"drivers": {},
"confidence": 123,
"stability": "<string>"
}
],
"moments": [
{
"moment_id": "<string>",
"speaker_id": "<string>",
"start_ms": 123,
"end_ms": 123,
"utterance_ids": [
"<string>"
],
"summary": "<string>",
"labels": [
"<string>"
],
"confidence": 123
}
],
"segmentation": {
"phases": [
{
"phase_id": "<string>",
"phase_name": "<string>",
"start_timestamp": 123,
"end_timestamp": 123,
"start_utterance_id": "<string>",
"end_utterance_id": "<string>",
"utterance_count": 123,
"theme": "<string>",
"summary": "<string>",
"emotional_tone": "<string>",
"key_moments": [
{
"moment_id": "<string>",
"speaker_id": "<string>",
"start_ms": 123,
"end_ms": 123,
"utterance_ids": [
"<string>"
],
"summary": "<string>",
"labels": [
"<string>"
],
"confidence": 123
}
],
"transition_signal": {
"transition_id": "<string>",
"at_ms": 123,
"from_state": {},
"to_state": {},
"evidence_utterance_ids": [
"<string>"
],
"drivers": {},
"confidence": 123,
"stability": "<string>"
}
}
],
"total_phases": 123,
"segmentation_rationale": "<string>",
"narrative_arc": "<string>",
"key_transitions": [
{
"transition_id": "<string>",
"at_ms": 123,
"from_state": {},
"to_state": {},
"evidence_utterance_ids": [
"<string>"
],
"drivers": {},
"confidence": 123,
"stability": "<string>"
}
]
},
"agent_results": "<array>",
"artifact_dir": "<string>",
"upload_path": "<string>",
"agent_outputs_path": "<string>",
"goal": "<string>"
}{
"detail": "Invalid or missing API key"
}{
"detail": "Invalid or missing API key"
}{
"detail": "Invalid or missing API key"
}Authorizations
API key for authentication. Can also be passed as query parameter: api_key=
Query Parameters
When true, behave like /analyze/stream and emit SSE instead of a JSON body
Body
Response
Analysis complete
Unique identifier for the analysis
"analysis_f38de2c0c1"
Count of diarized utterances
Array of enriched utterances
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Affective state transitions
Show child attributes
Show child attributes
Key moment detections
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Per-utterance raw agent payloads (emotion, sentiment, cognitive)
Server-side path for debugging
Server-side path for debugging
Server-side path for debugging
Echo of the provided context string