Skip to main content
GET
/
sessions
/
{session_id}
Get session detail
curl --request GET \
  --url https://api.exec.com/rest/v1/sessions/{session_id} \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://api.exec.com/rest/v1/sessions/{session_id}"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch('https://api.exec.com/rest/v1/sessions/{session_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_URL => "https://api.exec.com/rest/v1/sessions/{session_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 := "https://api.exec.com/rest/v1/sessions/{session_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("https://api.exec.com/rest/v1/sessions/{session_id}")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.exec.com/rest/v1/sessions/{session_id}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
{
  "id": "abc123def456",
  "user": {
    "id": "u1a2b3c4d5e6",
    "email": "[email protected]",
    "first_name": "Jane",
    "last_name": "Smith"
  },
  "scenario": {
    "id": "s1a2b3c4d5e6",
    "name": "Procurement Discovery",
    "slug": "procurement-discovery"
  },
  "score": 82.5,
  "rank": "gold",
  "duration_seconds": 347,
  "is_valid_attempt": true,
  "outcome_feedback": "Strong discovery questioning with good rapport building.",
  "positive_feedback": "Excellent use of open-ended questions to uncover needs.",
  "constructive_feedback": "Consider probing deeper into budget constraints.",
  "created_at": "2026-03-15T14:30:00Z",
  "transcript": [
    {
      "speaker": "ai",
      "text": "Hi, I'm the procurement lead at Globex. Thanks for meeting with me today.",
      "seconds_from_start": 0
    },
    {
      "speaker": "user",
      "text": "Thanks for your time. I'd love to learn more about your current process.",
      "seconds_from_start": 4.2
    }
  ],
  "evaluations": [
    {
      "criterion_name": "Communication Skills",
      "items": [
        {
          "name": "Discovery Questions",
          "grade": "good",
          "feedback": "Asked targeted questions about pain points and current workflow.",
          "feedback_examples": [
            {
              "quote": "Tell me about your current procurement process.",
              "feedback": "Great open-ended discovery question.",
              "suggestion_quote": null,
              "grade": "good",
              "salience": "high"
            }
          ]
        }
      ]
    },
    {
      "criterion_name": "Objection Handling",
      "items": [
        {
          "name": "Budget Concerns",
          "grade": "mid",
          "feedback": "Addressed the budget concern but could have reframed value more clearly.",
          "feedback_examples": []
        }
      ]
    }
  ]
}
{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "Invalid or inactive API key"
}
}
{
"error": {
"type": "not_found",
"message": "Scenario not found: abc123"
}
}

Authorizations

Authorization
string
header
required

API key created in Settings > API.

Format: exec_live_ followed by 40 alphanumeric characters.

Path Parameters

session_id
string
required

The session's unique identifier (UUID)

Query Parameters

include
string

Comma-separated list of optional sections to include in the response. Available values: transcript (conversation lines), evaluations (rubric criteria with grades).

Example:

"transcript,evaluations"

Response

Session detail

Full roleplay session detail with optional transcript and evaluations.

id
string

Unique session identifier

user
object
scenario
object

A compact scenario reference for embedding in other responses.

score
number | null

Session score (0-100 scale)

rank
enum<string> | null

Performance rank based on score

Available options:
gold,
silver,
bronze,
unranked
duration_seconds
number | null

Session duration in seconds

is_valid_attempt
boolean

Whether this session counts as a valid graded attempt. A session is valid when it was completed (not abandoned), received AI grading, and has a score. Use valid attempts for analytics; non-valid sessions may be incomplete or ungraded.

outcome_feedback
string | null

Overall outcome summary from the AI evaluator

positive_feedback
string | null

What the participant did well

constructive_feedback
string | null

Areas for improvement

transcript
object[] | null

Conversation transcript lines, excluding system messages (only included when requested via ?include=transcript)

evaluations
object[] | null

Evaluation criteria with grades (only included when requested via ?include=evaluations)

created_at
string<date-time>

When the session was created