Audio Recaps
List a user's progress across audio recaps
Returns recap-level progress for one user on each requested audio recap component: completion, approximate length, listened and remaining seconds. Pass componentIds (public component ids or component Mongo _ids, up to 100) as a comma-separated list or repeated parameter. When componentIds is omitted, every recap the user has progress on is returned. Ids that are not audio recap components in this organization are listed in notFound.
OpenAPI specification/api/v1/audio-recaps/users/{userId}/progressAuthentication
x-api-key
Request
curl --globoff --request GET \
--url 'https://api.example.com/api/v1/audio-recaps/users/%3CuserId%3E/progress' \
--header 'x-api-key: <API_KEY>'Replace credential and <field> placeholders with your own values. URL placeholders appear as %3Cfield%3E. Review the example values before sending your request.
Replace https://api.example.com with the API server URL.
Parameters
userIdpath · string · requiredEmbed-token userId
componentIdsquery · arrayAudio recap component ids (max 100). Omit to return every recap the user has started.
Responses
200
{
"type": "object",
"properties": {
"userId": {
"type": "string"
},
"recaps": {
"description": "One entry per resolved component, in request order.",
"type": "array",
"items": {
"type": "object",
"properties": {
"componentId": {
"type": "string",
"description": "Public component id (audio_recap_…)."
},
"generationStatus": {
"type": "string",
"enum": [
"pending",
"completed",
"failed"
],
"description": "Script generation for the recap."
},
"completionPct": {
"type": "number",
"description": "sectionsCompleted / totalSections, 0–100."
},
"totalSections": {
"type": "number",
"description": "Number of sections in the recap."
},
"sectionsCompleted": {
"type": "number",
"description": "Sections this user has completed."
},
"durationSeconds": {
"type": "number",
"description": "Approximate length of the recap in seconds. Uses the generated audio length per section, or an estimate from the script while audio is not ready."
},
"listenedSeconds": {
"type": "number",
"description": "Approximate seconds the user has listened to."
},
"remainingSeconds": {
"type": "number",
"description": "durationSeconds - listenedSeconds."
},
"lastActivityAt": {
"type": "string",
"format": "date-time",
"nullable": true,
"description": "Most recent progress update from this user. Null if the user has not started."
}
},
"required": [
"componentId",
"generationStatus",
"completionPct",
"totalSections",
"sectionsCompleted",
"durationSeconds",
"listenedSeconds",
"remainingSeconds",
"lastActivityAt"
]
}
},
"notFound": {
"description": "Requested ids that are not audio recap components in this organization.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"userId",
"recaps",
"notFound"
]
}