curl --request GET \
--url https://voice-api.onclarity.com/v1/projects/{projectId}/conversations/{id}/artifacts \
--header 'Authorization: Bearer <token>'import requests
url = "https://voice-api.onclarity.com/v1/projects/{projectId}/conversations/{id}/artifacts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://voice-api.onclarity.com/v1/projects/{projectId}/conversations/{id}/artifacts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"project_id": "3c59dc04-8a4b-4f7e-9b1a-6c2a0e5d1f22",
"conversation_id": "8f14e45f-ceea-467f-a0e6-3f1c2b9d7a10",
"bucket": "example-bucket",
"sessions_count": 1,
"sessions_degraded": 0,
"sessions": [
{
"session_id": "AJ_x8Kd2mQp4Vn",
"call_id": "1b6453892473a467d07372d45eb05abc",
"agent_id": "6f4922f4-5568-461a-8f1d-9c3b2a1e7d55",
"joined_at": "2026-10-20T09:15:02.000Z",
"left_at": "2026-10-20T09:18:06.000Z",
"gcs_prefix": "gs://example-bucket/calls/3c59dc04-8a4b-4f7e-9b1a-6c2a0e5d1f22/AJ_x8Kd2mQp4Vn/",
"transcript": "AGENT: Hello, how can I help?\nCALLER: I'd like to move my appointment to Thursday.",
"findings": [],
"fatal_count": 0,
"warning_count": 0,
"recording_signed_url": "https://storage.googleapis.com/example-bucket/calls/3c59dc04-8a4b-4f7e-9b1a-6c2a0e5d1f22/AJ_x8Kd2mQp4Vn/recording.wav?X-Goog-Signature=abc123",
"recording_signed_url_expires_at": "2026-10-20T10:18:06.000Z"
}
],
"merged": {
"transcript": "AGENT: Hello, how can I help?\nCALLER: I'd like to move my appointment to Thursday.",
"findings": [],
"fatal_count": 0,
"warning_count": 0
},
"media_insights": [],
"messages": []
}{
"error": "Invalid or revoked token"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "Artifacts not ready for conversation 8f14e45f-ceea-467f-a0e6-3f1c2b9d7a10 — all 1 session(s) reported ARTIFACTS_NOT_READY (transient upload lag or an aborted call that stored nothing).",
"code": "ARTIFACTS_NOT_READY"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Get conversation artifacts
Returns everything recorded about a finished conversation: for each agent session, the transcript, the event timeline, detected problems (findings), per-turn latency, and optionally a download link for the audio recording; plus a merged view that joins all sessions in time order. This is the endpoint to use for transcripts and recordings.
Artifacts are uploaded shortly after a call ends. Until they arrive — and while personal data is still being redacted from them, on organizations that have redaction switched on — the endpoint answers 404 with code: ARTIFACTS_NOT_READY; retry after a short wait. When only some sessions could be loaded, the response is 200 and the missing sessions carry an error object instead of their artifacts.
curl --request GET \
--url https://voice-api.onclarity.com/v1/projects/{projectId}/conversations/{id}/artifacts \
--header 'Authorization: Bearer <token>'import requests
url = "https://voice-api.onclarity.com/v1/projects/{projectId}/conversations/{id}/artifacts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://voice-api.onclarity.com/v1/projects/{projectId}/conversations/{id}/artifacts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"project_id": "3c59dc04-8a4b-4f7e-9b1a-6c2a0e5d1f22",
"conversation_id": "8f14e45f-ceea-467f-a0e6-3f1c2b9d7a10",
"bucket": "example-bucket",
"sessions_count": 1,
"sessions_degraded": 0,
"sessions": [
{
"session_id": "AJ_x8Kd2mQp4Vn",
"call_id": "1b6453892473a467d07372d45eb05abc",
"agent_id": "6f4922f4-5568-461a-8f1d-9c3b2a1e7d55",
"joined_at": "2026-10-20T09:15:02.000Z",
"left_at": "2026-10-20T09:18:06.000Z",
"gcs_prefix": "gs://example-bucket/calls/3c59dc04-8a4b-4f7e-9b1a-6c2a0e5d1f22/AJ_x8Kd2mQp4Vn/",
"transcript": "AGENT: Hello, how can I help?\nCALLER: I'd like to move my appointment to Thursday.",
"findings": [],
"fatal_count": 0,
"warning_count": 0,
"recording_signed_url": "https://storage.googleapis.com/example-bucket/calls/3c59dc04-8a4b-4f7e-9b1a-6c2a0e5d1f22/AJ_x8Kd2mQp4Vn/recording.wav?X-Goog-Signature=abc123",
"recording_signed_url_expires_at": "2026-10-20T10:18:06.000Z"
}
],
"merged": {
"transcript": "AGENT: Hello, how can I help?\nCALLER: I'd like to move my appointment to Thursday.",
"findings": [],
"fatal_count": 0,
"warning_count": 0
},
"media_insights": [],
"messages": []
}{
"error": "Invalid or revoked token"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "Artifacts not ready for conversation 8f14e45f-ceea-467f-a0e6-3f1c2b9d7a10 — all 1 session(s) reported ARTIFACTS_NOT_READY (transient upload lag or an aborted call that stored nothing).",
"code": "ARTIFACTS_NOT_READY"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Authorizations
Your organization API key (it starts with anek_org_). The same key works on the Voice API and the Support API. See Authentication.
Query Parameters
true adds a short-lived signed download link for each session's audio recording (sessions[].recording_signed_url, expiring at recording_signed_url_expires_at).
true, false true adds each session's effective agent configuration as it ran (sessions[].session_config), when it was stored.
true, false Response
The conversation's artifacts.
"example-bucket"
x >= 0Count of sessions that failed to load (have an error field).
x >= 0Show child attributes
Show child attributes
Cross-session rollup. Findings are tagged with session_id so callers can locate the source session.
Show child attributes
Show child attributes
Caller-side network stats per call (WebRTC RTT/jitter/loss measured at the caller's browser), collected across the conversation's calls. Empty for SIP-only conversations and calls where the widget never reported.
Show child attributes
Show child attributes
In-call WhatsApp / email sends of this conversation with their events (statuses, button taps, replies, no-response notes), including events that arrived after hang-up. The recipient is masked; reply texts are withheld on calls with PII redaction on.
Show child attributes
Show child attributes