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.