Upload pre-transcribed audio
POST /v1/bulk-ingest-transcription
Upload pre-transcribed audio from your own Automatic Speech Recognition (ASR) engine.
Headers
| Header | Description |
|---|---|
| Authorization (Required) | Requires Bearer and the OAuth access token (see Authentication) |
| Content-Type (Required) | Requires application/json |
| Accept | Requires application/json if used |
For the request URL, always use the base URL for your Experience Cloud instance. For detailed information about identifying the host, see API hosts.
Parameters
| Parameter | Description | Data type |
|---|---|---|
| call_identifier (Required) |
Unique identifier for the call record (must not be blank) | string |
| call_date_and_time (Required) |
Timestamp of the call Example — | string (ISO 8601 with offset) |
| speech_transcription_file_name (Required) |
Path/name of the pre-transcribed JSON file produced by the external ASR vendor Must not be blank and must not end with | string |
| speech_transcription_asr_vendor (Required) |
Name of the external ASR vendor that produced the transcription (must not be blank) Examples — | string |
| speech_file_name |
Path/name of the original audio file If provided, must not end with | string |
| unit_identifier | Identifier for the organizational unit | string |
| call_recording_url |
URL pointing to the call recording (must be a valid URL if provided) | string |
| locale |
BCP 47 locale code for the caller channel The value must be one of the locales listed on the Languages page (Admin Suite > Translations > Languages). Example — | string |
| agent_locale |
BCP 47 locale code for the agent channel The validation rules are the same as | string |
Example request
curl --location 'https://<instance>.medallia.com/speech/v1/bulk-ingest-transcription' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer TOKEN' \
--data '[
{
"call_identifier": "CALL-00123",
"call_date_and_time": "2024-03-15T09:30:00-05:00",
"speech_transcription_file_name": "transcripts/2024/03/CALL-00123.json",
"speech_transcription_asr_vendor": "deepgram",
"speech_file_name": "audio/2024/03/CALL-00123.mp3",
"unit_identifier": "support-team-west",
"call_recording_url": "https://storage.example.com/recordings/CALL-00123.mp3",
"locale": "en-GB",
"agent_locale": "en-GB"
}
]'
Status codes
| Status code | Description |
|---|---|
| 200 OK | Job Accepted, Partially Accepted, or All Rejected |
| 400 Bad Request — Validation Error | Returned when a required field is missing, a restricted field is present, the feature is disabled, or a locale is not supported |
Response model
| Property | Description | Data type |
|---|---|---|
| job_id |
Unique identifier assigned to this job for tracking Use | string(UUID) |
| status |
| string |
| details |
Present only when status is Contains per-task results | array |
| details[].call_identifier | The call_identifier from the request task | string |
| details[].status | ACCEPTED or REJECTED for this individual task | string |
| details[].error_message |
Reason for rejection Present only for rejected tasks | string |
Example responses
200 OK — Job Accepted
{
"job_id": "550z0400-e29b-79d4-a716-446655440200",
"status": "ACCEPTED"
}
200 OK — Partially Accepted
When one or more tasks in the batch were rejected, the details array contains per-task results.
{
"job_id": "550e9000-e29b-41s4-a716-446655440000",
"status": "PARTIALLY_ACCEPTED",
"details": [
{
"call_identifier": "CALL-00123",
"status": "ACCEPTED"
},
{
"call_identifier": "CALL-00124",
"status": "REJECTED",
"error_message": "File not found: transcripts/CALL-00124.json"
}
]
}
200 OK — All Rejected
{
"job_id": "550e0900-e29b-41d4-c916-446655440000",
"status": "REJECTED",
"details": [
{
"call_identifier": "CALL-00123",
"status": "REJECTED",
"error_message": "File not found: transcripts/CALL-00123.json"
}
]
}
400 Bad Request — Validation Error
{
"error_type": "invalid_input",
"message": "Field 'speech_transcription_file_name' is mandatory, task position: 0"
}
{
"error_type": "invalid_input",
"message": "Field 'connector_id' is not allowed for this API. Please remove it from the request and resend, task position: 0"
}
{
"error_type": "invalid_input",
"message": "feature flag not enabled for Bulk Transcription - for tenant acme-corp"
}
