Skip to main content
POST
Check out our Send Calls to Reddy guide for examples of using this endpoint.
This endpoint is used to add a call to Reddy and perform the QA grading process on it. QA grading can be triggered by either uploading a media file or providing a transcript.
Calls are added to a processing queue and may not show up in the dashboard immediately. Processing times vary based on current queue load.
Once the process is completed, the insights will be visible on the dashboard.
409 when two accounts share one address. agent_email is matched without regard to capitalisation, so Jane.Doe@Company.com and jane.doe@company.com reach the same agent. If more than one active user in your company holds that address, Reddy cannot tell them apart and will not guess: the request returns 409 with conflicting_user_ids, and nothing is recorded. Merge the duplicate accounts, then resend.
The filename parameter is optional. If provided, the response will include a signed Google Cloud Storage URL for uploading the media file. If omitted, a simple success response is returned. Media files must be under 250 MB.

Upload content type

When you include filename, you can optionally send content_type: the MIME type of the file you will upload. For audio, content_type can be omitted and the format is auto-detected. For video, content_type is required. When provided, use the same value as the Content-Type header on the GCS PUT. Reddy pins that type in the signed URL; a mismatch returns 403 from Google Cloud Storage.

Audio uploads

Send a supported audio/* type (for example audio/wav, audio/mpeg, audio/mp4). For unknown extensions, application/octet-stream is accepted on the audio path.

Video uploads

Send a supported video/* type (for example video/mp4, video/quicktime, video/webm). The filename extension must match that MIME type. Video files are graded in their uploaded container (no transcode at ingest). Supported video containers and their MIME types: Other extensions (for example mkv, avi, or a missing extension) return 422.

Ambiguous containers (.mp4, .webm)

These containers can hold audio-only or audio-plus-video. Pick the MIME type that matches your file:
  • Audio-only .mp4 → content_type: "audio/mp4"
  • Screen recording .mp4 → content_type: "video/mp4"
  • Audio-only .webm → content_type: "audio/webm"
  • Video .webm → content_type: "video/webm"
Redaction is not applied to the audio if the transcript is provided. If you have sensitive information in the audio that you want to silence, make sure you do that using word-level timestamps in your transcription before sending to Reddy.

Speaker Separation

Control how speakers are separated in the call using the speaker object:
  • speaker.separation: ‘diarize’ (default) or ‘channels’
  • speaker.channel_map (optional, when separation=“channels”): [“agent”, “customer”] or [“customer”, “agent”]. If omitted, roles are identified automatically.
Learn more about speaker separation

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
agent_email
string
required

Email address of the agent handling the call

product_id
integer
required

Product id associated with the call

filename
string | null

Name of the media file to upload. Optional -- if not provided, no upload URL is returned. When content_type is provided, the extension must match it (for example .wav with audio/wav, .mp4 with video/mp4). Video extensions must be one of: 3gp, 3gpp, flv, mov, mp4, mpeg, mpg, webm, or wmv.

content_type
string | null

MIME type of the upload. Optional for legacy audio requests; when provided, use upload_content_type from the response as the Content-Type header on the GCS PUT. Send audio/* (or application/octet-stream) for audio calls. For video, send a supported video/* type whose extension matches filename. For .mp4 or .webm, use audio/mp4 or audio/webm when the file is audio-only.

channels
string[] | null

DEPRECATED: Use speaker.separation and speaker.channel_map instead. Mapping of the channels in the audio file to the customer and agent. If nothing is specified, speakers will be identified automatically with a speaker diarization model.

For example: ['customer', 'agent'] means the left channel contains the customer's audio and right channel contains the agent's audio.

speaker
Speaker · object | null

Configuration for speaker separation and channel mapping. If not provided, defaults to diarization.

transcript
TranscriptLine · object[] | null

Transcript of the call

tags
Tag · object[] | null

Array of tag objects containing key, value, and type

timestamp
number | null

Timestamp of the call start time in seconds since epoch format. If not set, defaults to the current time.

conversation_id
string | null

Unique identifier for the conversation

Response

OK

upload_id
integer
required

Unique identifier for the upload

conversation_id
string
required

Unique identifier for the conversation

upload_url
string
required

Signed Google Cloud Storage URL to upload the media file. Send raw bytes with the correct Content-Type header.

expires_in
integer
required

Time in seconds for which the upload URL is valid

upload_content_type
string
required

Exact Content-Type header to send on the GCS PUT. The signed URL pins this value.