Fetch an analysis
curl --request GET \
--url http://localhost:3000/v1/analyses/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "http://localhost:3000/v1/analyses/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://localhost:3000/v1/analyses/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/v1/analyses/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "http://localhost:3000/v1/analyses/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://localhost:3000/v1/analyses/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/v1/analyses/{id}")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "queued",
"recording_url": "<string>",
"transcript_url": "<string>",
"callback_url": "<string>",
"options": {},
"metadata": {},
"transcript": {
"text": "<string>",
"utterances": [
{
"start": 123,
"end": 123,
"speaker": "<string>",
"transcript": "<string>",
"text": "<string>"
}
],
"words": [
{}
],
"word_count": 1,
"duration_seconds": 1,
"overall_sentiment": "<string>",
"sentiment_score": 123
},
"analysis": {
"prospect_name": "<string>",
"recording_title": "<string>",
"double_down": "<string>",
"ai_summary": "<string>",
"ai_summary_v5": "<string>",
"questions_asked": 1,
"filler_word_count": 1,
"words_per_minute": 1,
"overall_score": 50,
"clarity_score": 50,
"influence_score": 50,
"objection_score": 50,
"discovery_score": 50,
"delivery_score": 50,
"close_score": 50,
"feedback_v5": {
"clarity": {
"positive": "<string>",
"negative": "<string>"
},
"influence": {
"positive": "<string>",
"negative": "<string>"
},
"objection": {
"positive": "<string>",
"negative": "<string>"
},
"discovery": {
"positive": "<string>",
"negative": "<string>"
},
"delivery": {
"positive": "<string>",
"negative": "<string>"
},
"close": {
"positive": "<string>",
"negative": "<string>"
}
},
"action_plan_v5": {
"double_down_implementation": "<string>",
"general_communication_improvement": "<string>",
"quoted_principle": "<string>"
},
"organization_prompt_summary": "<string>",
"organization_feedback": "<string>",
"master_prompt_id": "<string>",
"master_prompt_version": "<string>",
"persona_snapshot": {},
"synthesis_snapshot": {}
},
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"duration_seconds": 123,
"cost_usd_cents": 123,
"created_at": "<string>",
"started_at": "<string>",
"completed_at": "<string>",
"partner_org_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"partner_rep_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}Analyses
Fetch an analysis
Returns the full analysis row. When status === "completed" the analysis field is populated with the canonical six-pillar shape (clarity / influence / objection / discovery / delivery / close), each pillar exposed as a flat *_score field plus feedback_v5.<pillar>.{positive, negative} and action_plan_v5. KPIs (questions_asked, filler_word_count, words_per_minute) are flat at the top of analysis. Mock fixtures emit the same shape so a partner can decode mock://* and real audio with one decoder.
GET
/
v1
/
analyses
/
{id}
Fetch an analysis
curl --request GET \
--url http://localhost:3000/v1/analyses/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "http://localhost:3000/v1/analyses/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://localhost:3000/v1/analyses/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/v1/analyses/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "http://localhost:3000/v1/analyses/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://localhost:3000/v1/analyses/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/v1/analyses/{id}")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "queued",
"recording_url": "<string>",
"transcript_url": "<string>",
"callback_url": "<string>",
"options": {},
"metadata": {},
"transcript": {
"text": "<string>",
"utterances": [
{
"start": 123,
"end": 123,
"speaker": "<string>",
"transcript": "<string>",
"text": "<string>"
}
],
"words": [
{}
],
"word_count": 1,
"duration_seconds": 1,
"overall_sentiment": "<string>",
"sentiment_score": 123
},
"analysis": {
"prospect_name": "<string>",
"recording_title": "<string>",
"double_down": "<string>",
"ai_summary": "<string>",
"ai_summary_v5": "<string>",
"questions_asked": 1,
"filler_word_count": 1,
"words_per_minute": 1,
"overall_score": 50,
"clarity_score": 50,
"influence_score": 50,
"objection_score": 50,
"discovery_score": 50,
"delivery_score": 50,
"close_score": 50,
"feedback_v5": {
"clarity": {
"positive": "<string>",
"negative": "<string>"
},
"influence": {
"positive": "<string>",
"negative": "<string>"
},
"objection": {
"positive": "<string>",
"negative": "<string>"
},
"discovery": {
"positive": "<string>",
"negative": "<string>"
},
"delivery": {
"positive": "<string>",
"negative": "<string>"
},
"close": {
"positive": "<string>",
"negative": "<string>"
}
},
"action_plan_v5": {
"double_down_implementation": "<string>",
"general_communication_improvement": "<string>",
"quoted_principle": "<string>"
},
"organization_prompt_summary": "<string>",
"organization_feedback": "<string>",
"master_prompt_id": "<string>",
"master_prompt_version": "<string>",
"persona_snapshot": {},
"synthesis_snapshot": {}
},
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"duration_seconds": 123,
"cost_usd_cents": 123,
"created_at": "<string>",
"started_at": "<string>",
"completed_at": "<string>",
"partner_org_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"partner_rep_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}Authorizations
Response
200 - application/json
Default Response

