Results
Once a session reaches completed, you can retrieve its recording and
transcript. Both are served back to you in-platform: the platform fetches
the artifact from ZenHire's interview backend server-to-server and proxies the
content straight through, so results render with no off-domain redirect —
you never handle a presigned storage URL yourself.
Recording
GET https://platform.zenhire.ai/api/v1/interview/sessions/{sessionId}/recording
Streams the audio recording back as raw bytes (audio/wav). Point an
<audio> element directly at this URL, or download the bytes:
curl "https://platform.zenhire.ai/api/v1/interview/sessions/7c3a1b2d-.../recording" \
-H "X-API-Key: zh_api_YOUR_KEY" \
-o interview.wav
<audio
controls
src="https://platform.zenhire.ai/api/v1/interview/sessions/7c3a1b2d-.../recording"
></audio>
(The platform re-fetches the underlying storage object on demand, so there is nothing to cache or refresh on your side.)
Transcript
GET https://platform.zenhire.ai/api/v1/interview/sessions/{sessionId}/transcript
Returns the transcript as JSON (application/json) — the platform proxies
the transcript document straight through; there is no URL to follow.
curl "https://platform.zenhire.ai/api/v1/interview/sessions/7c3a1b2d-.../transcript" \
-H "X-API-Key: zh_api_YOUR_KEY"
The exact shape is the interview backend's transcript document (for example, an array of turns with speaker + text). Treat it as opaque transcript JSON and render it however suits your UI.
Availability
Results exist only after the completion webhook reports them
(i.e. the session is completed and the S3 keys are set). Before then, both
endpoints return:
{
"error": {
"code": "ARTIFACT_NOT_READY",
"message": "No recording is available for this session yet.",
"timestamp": "2026-05-29T10:00:00.000Z",
"details": { "status": "active" }
}
}
Poll GET /api/v1/interview/sessions/{sessionId} until status is completed,
then fetch the artifacts.
Access control
You can only retrieve results for your own client's sessions — a cross-tenant
request returns 403. If the interview service is temporarily unreachable, the
endpoints return 502; retry shortly.