This is the final call in the main API process flow. Use the getResults query to retrieve all AI-generated items for a given protocol — including protocol metadata, agenda items, and task items.
If creationDone is false, processing is still ongoing. Check the creatingStep field of ApiProtocolType for the current phase.
GraphQL Query
fragment protocolDetails on ApiProtocolType {
slug
name
date
language
empty
creatingStep
status
renamedSpeakers
streamingUrl
videoStreamingUrl
streamingUrlsExpiresAt
}
fragment agendaDetails on ApiAgendaItemType {
id
classType
title
depth
maxDepth
metaData
textList
resolutionList {
resolution
decision
}
createdAt
updatedAt
}
fragment taskDetails on ApiTaskType {
id
text
date
assignedTo
done
createdAt
updatedAt
}
query GetResults($protocolSlug: String!) {
getResults(protocolSlug: $protocolSlug) {
creationDone
protocol {
...protocolDetails
}
agendaItemList {
...agendaDetails
}
taskItemList {
...taskDetails
}
}
}
Query Variables
{
"protocolSlug": "PROTOCOL_SLUG"
}
Streaming URLs
The protocol object includes signed CloudFront URLs for streaming or downloading the uploaded media files:
streamingUrl— Signed URL for the audio file.videoStreamingUrl— Signed URL for the video file. This is only usable when a video was uploaded for the protocol.streamingUrlsExpiresAt— Expiry timestamp for both signed URLs. URLs are currently valid for two hours after generation.
The URL fields can be returned even when no file exists for the protocol, for example when the audio was deleted or no video was recorded. In that case, requesting the URL results in a 404 response.
Example JavaScript Implementation
import axios from "axios";
async function getResults(protocolSlug) {
const res = await axios({
method: "POST",
url: "https://api-v2.speechmind.com/external/v2/graphql",
headers: {
"Content-Type": "application/json",
"x-api-key": process.env.SPEECHMIND_API_KEY,
},
data: JSON.stringify({
query: GET_RESULTS,
variables: { protocolSlug },
}),
});
const { creationDone, protocol, agendaItemList, taskItemList } = res.data.data.getResults;
return { creationDone, protocol, agendaItemList, taskItemList };
}
Notes
- Poll this query every 5–10 seconds until
creationDonebecomestrue. Total processing time is typically ~40% of the audio duration (e.g. a 60-minute recording takes ~24 minutes). - The
creatingStepfield shows which phase the AI is currently processing. agendaItem.textListhas different detail levels. For summary the correct textList looks like{"0": [...]}. For politics it looks like{"0": [...], "1": [...], "2": [...]}. An empty value{}means the AI could not map content to that item.