Get Job Files
curl --request GET \
--url https://api.vachana.ai/stt/v3/batch/jobs/{job_id}/files \
--header 'X-API-Key-ID: <api-key>'import requests
url = "https://api.vachana.ai/stt/v3/batch/jobs/{job_id}/files"
headers = {"X-API-Key-ID": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key-ID': '<api-key>'}};
fetch('https://api.vachana.ai/stt/v3/batch/jobs/{job_id}/files', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"job_id": "019fa79e-81f9-7a8a-a446-6eff16ddec30",
"data": [
{
"file_id": "a5708e96-7a28-4c01-8b07-2fe606fa9785",
"original_path": "customer_call.wav",
"status": "COMPLETED",
"duration_seconds": "6.01",
"transcript_url": "https://example-presigned-url.example/transcript.json",
"error_message": null
}
],
"pagination": {
"has_more": false,
"next_cursor": null,
"total_count": 1
}
}Speech-to-Text (Batch)
Get Job Files
List per-file results and transcript URLs for a batch job.
GET
/
stt
/
v3
/
batch
/
jobs
/
{job_id}
/
files
Get Job Files
curl --request GET \
--url https://api.vachana.ai/stt/v3/batch/jobs/{job_id}/files \
--header 'X-API-Key-ID: <api-key>'import requests
url = "https://api.vachana.ai/stt/v3/batch/jobs/{job_id}/files"
headers = {"X-API-Key-ID": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key-ID': '<api-key>'}};
fetch('https://api.vachana.ai/stt/v3/batch/jobs/{job_id}/files', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"job_id": "019fa79e-81f9-7a8a-a446-6eff16ddec30",
"data": [
{
"file_id": "a5708e96-7a28-4c01-8b07-2fe606fa9785",
"original_path": "customer_call.wav",
"status": "COMPLETED",
"duration_seconds": "6.01",
"transcript_url": "https://example-presigned-url.example/transcript.json",
"error_message": null
}
],
"pagination": {
"has_more": false,
"next_cursor": null,
"total_count": 1
}
}Overview
List per-file results for a job. For completed files, this returnstranscript_url — not the transcript text.
To get full_transcript without webhooks:
- Call this endpoint after the job is terminal (filter with
status=COMPLETED) GETeachtranscript_url(no API key — pre-signed URL)- Read
full_transcriptfrom the JSON
transcript_url expires in 1 hour. Re-call this endpoint for a fresh URL.
Authentication
| Header | Required | Description |
|---|---|---|
X-API-Key-ID | Yes | Your Gnani Prisma v2.5 API key |
Path Parameters
In Try it, paste a real
job_id from Create Job before clicking Send. Leaving the placeholder {job_id} in the URL returns 422.string
default:"019fa854-1db0-7e45-a026-7a6b09ff6d7c"
required
Job ID returned by Create Job. Replace with your own
job_id before sending.Query Parameters
string
default:"COMPLETED"
Filter by file status. Use
COMPLETED for successful transcripts. Omit to include FAILED / SKIPPED.integer
default:"50"
Page size (1–100).
string
Pagination cursor from
pagination.next_cursor.Example cURL
curl --request GET \
--url 'https://api.vachana.ai/stt/v3/batch/jobs/019fa79e-81f9-7a8a-a446-6eff16ddec30/files?status=COMPLETED' \
--header 'X-API-Key-ID: <YOUR_API_KEY>'
curl -L "<transcript_url_from_response>"
Response
Success — completed file (200)
{
"job_id": "019fa79e-81f9-7a8a-a446-6eff16ddec30",
"data": [
{
"file_id": "6f5e3bcd-add2-479c-8883-a9c27b221f10",
"original_path": "customer_call.wav",
"status": "COMPLETED",
"duration_seconds": "6.01",
"transcript_url": "https://gnaniasraudios.s3.amazonaws.com/results/019fa79e-81f9-7a8a-a446-6eff16ddec30/6f5e3bcd-add2-479c-8883-a9c27b221f10.json?X-Amz-Expires=3600&...",
"error_message": null,
"created_at": "2026-07-28T07:26:50.926489Z",
"completed_at": "2026-07-28T07:27:24.513422Z"
}
],
"pagination": {
"has_more": false,
"next_cursor": null,
"total_count": 1
}
}
transcript_url JSON (live-verified)
language_code here is the language the file was actually transcribed in. When you
submit a comma-separated list, this is the single language that was identified — not the
list you sent — so it always tells you what the text is in. Per-segment
language_detected is currently always null.{
"file_id": "6f5e3bcd-add2-479c-8883-a9c27b221f10",
"job_id": "019fa79e-81f9-7a8a-a446-6eff16ddec30",
"original_path": "customer_call.wav",
"language_code": "en-IN",
"duration_seconds": 6.01,
"model": "gnani-prisma-v2.5",
"mode": "transcribe",
"segments": [
{
"segment_id": 0,
"start_time": 0.0,
"end_time": 0.71,
"text": "hello",
"speaker_id": 1,
"confidence": null,
"language_detected": null,
"sentiment": null,
"emotion": null
},
{
"segment_id": 0,
"start_time": 0.71,
"end_time": 2.36,
"text": "how can i help you today",
"speaker_id": 2,
"confidence": null,
"language_detected": null,
"sentiment": null,
"emotion": null
},
{
"segment_id": 0,
"start_time": 2.36,
"end_time": 6.01,
"text": "i am calling about my recent order number 12345",
"speaker_id": 2,
"confidence": null,
"language_detected": null,
"sentiment": null,
"emotion": null
}
],
"full_transcript": "hello how can i help you today i am calling about my recent order number 12345",
"created_at": "2026-07-28T07:27:24Z"
}
Failed file — empty / non-speech audio
{
"job_id": "019fa79b-a07a-7a3e-93bf-4ee73974dfa2",
"data": [
{
"file_id": "e0323a1c-86ee-4898-aee7-7455dfc1eb52",
"original_path": "customer_call.wav",
"status": "FAILED",
"duration_seconds": null,
"transcript_url": null,
"error_message": "Empty transcript after 3 retries",
"created_at": "2026-07-28T07:23:42.170454Z",
"completed_at": "2026-07-28T07:24:32.106034Z"
}
],
"pagination": {
"has_more": false,
"next_cursor": null,
"total_count": 1
}
}
Skipped file — invalid public URL
{
"job_id": "019fa79c-ec88-770c-b498-371fc21fb40e",
"data": [
{
"file_id": "7539fecd-3090-4b62-9172-01c7019430d3",
"original_path": "https://cdn.example.com/audio/missing.wav",
"status": "SKIPPED",
"duration_seconds": null,
"transcript_url": null,
"error_message": "REQUEST_ERROR: [Errno -2] Name or service not known",
"created_at": "2026-07-28T07:27:27.650893Z",
"completed_at": null
}
],
"pagination": {
"has_more": false,
"next_cursor": null,
"total_count": 1
}
}
| File status | Meaning |
|---|---|
COMPLETED | Done — transcript_url available |
FAILED | Failed — see error_message |
SKIPPED | Not processed (bad URL / format / access) |
CANCELLED | Skipped due to job cancel |
string
Pre-signed URL to transcript JSON. Expires in 1 hour. No API key required to download.
string
Present when
status is FAILED or SKIPPED.Use Cases
- Fetching transcript download links after a job completes
- Inspecting failed / skipped files via
error_message
Authorizations
Your Gnani Prisma v2.5 API key
Path Parameters
Job ID returned by Create Job. Paste the UUID from the Create Job response.
Query Parameters
Filter by file status (e.g. COMPLETED)
Page size (1–100)
Required range:
1 <= x <= 100Pagination cursor from pagination.next_cursor
Response
200 - application/json
OK
The response is of type object.
Was this page helpful?