Skip to main content

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.