Skip to main content

Transcription Upload

If you already have text transcriptions and don’t need audio-to-text conversion, submit them directly for LLM analysis and scoring. The process follows the same 3-step pattern as batch upload, but without audio files.
Presigned URLs are valid for 1 hour only. Complete all three steps within that window.

Step 1: Get Presigned URL

Request

POST /api/v1/calls/upload
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

Body

{
  "metadata_filename": "transcriptions.csv"
}
Do not include audios_filename when submitting transcriptions only.

Response 200

{
  "status": "success",
  "data": {
    "metadata_upload_url": "https://s3.amazonaws.com/...",
    "metadata_key": "country/firm/user-uuid/transcriptions.csv",
    "expires_in": 3600
  }
}
Save metadata_upload_url (for Step 2) and metadata_key (for Step 3).

Step 2: Upload CSV

PUT <metadata_upload_url from Step 1>
Content-Type: text/csv
Body: (binary CSV file contents)
Do NOT include the Authorization header. The presigned URL already contains authentication.

Response

200 OK (empty body)

Step 3: Trigger Processing

Request

POST /api/v1/calls/process-upload
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

Body

{
  "metadata_key": "country/firm/user-uuid/transcriptions.csv"
}
Do not include audios_key when submitting transcriptions only.

Response 200

{
  "status": "success",
  "data": {
    "message": "Files validated and queued for processing"
  }
}

CSV Format for Transcriptions

Required Columns

ColumnTypeDescriptionExample
client_phone_numberstringCustomer phone (7–15 digits, may start with +)+77012345678
operator_namestringOperator nameJohn Smith
durationintegerCall duration in seconds180
anonymized_textstringTranscript text with role tagsSee below
start_timedatetimeCall start time2026-01-13T10:30:00
segment_typestringSegment type (must exist in system)sales

Optional Columns

ColumnTypeDescriptionExample
partner_call_idstringExternal call IDCALL-12345
operator_idstringExternal operator IDOP-567
directionstringinbound or outboundinbound
group_namestringOperator group nameSales Team
operator_group_namestringAlternative group name fieldSales Team
disconnect_reasonstringCall end reasoncompleted

Transcript Format (anonymized_text)

Transcripts use HTML-like role tags to identify speakers:
<operator>Hello, ABC company, how can I help?<client>Hi, I'd like to know about your services<operator>I'd be happy to help

Supported Role Tags

Operator tags: <operator>, <оператор>, <operador> Client tags: <client>, <клиент>, <абонент>, <mijoz>, <cliente>, <кардар>

Rules

  • Tags are case-insensitive: <OPERATOR> = <operator>
  • There must be text between tags (no empty tags)
  • Every utterance must have a role tag prefix

Examples

<operator>Hello, ABC company, how can I help?<client>Hi, I'd like to know about your services<operator>I'd be happy to tell you

Date Formats (start_time)

FormatExample
ISO 86012026-01-13T10:30:00 or 2026-01-13 10:30:00
Unix timestamp (integer)1736764200
Unix timestamp (string)"1736764200"
All dates are interpreted as UTC.