List collections
curl --request GET \
--url https://api.exec.com/rest/v1/collections \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.exec.com/rest/v1/collections"
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/collections', 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/collections",
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/collections"
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/collections")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exec.com/rest/v1/collections")
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{
"data": [
{
"id": "r1a2b3c4d5e6",
"name": "Procurement Scenarios",
"slug": "procurement-scenarios",
"description": "Practice scenarios for procurement conversations.",
"scenario_count": 4,
"created_at": "2026-01-10T09:00:00Z"
}
],
"pagination": {
"page": 1,
"page_size": 50,
"total_count": 1,
"total_pages": 1
}
}{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "Invalid or inactive API key"
}
}Collections
List collections
Returns a paginated list of collections in the workspace, ordered alphabetically by name.
Collections group related scenarios together (e.g. “Procurement Scenarios”, “Onboarding”). Use collection IDs to filter sessions, skills, and scenario analytics by collection.
GET
/
collections
List collections
curl --request GET \
--url https://api.exec.com/rest/v1/collections \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.exec.com/rest/v1/collections"
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/collections', 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/collections",
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/collections"
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/collections")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exec.com/rest/v1/collections")
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{
"data": [
{
"id": "r1a2b3c4d5e6",
"name": "Procurement Scenarios",
"slug": "procurement-scenarios",
"description": "Practice scenarios for procurement conversations.",
"scenario_count": 4,
"created_at": "2026-01-10T09:00:00Z"
}
],
"pagination": {
"page": 1,
"page_size": 50,
"total_count": 1,
"total_pages": 1
}
}{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "Invalid or inactive API key"
}
}Authorizations
API key created in Settings > API.
Format: exec_live_ followed by 40 alphanumeric characters.
Query Parameters
Page number (1-indexed)
Required range:
x >= 1Number of results per page (max 100)
Required range:
1 <= x <= 100⌘I