curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"agent_email": "agent@company.com",
"product_id": 123,
"transcript": [
{
"role": "agent",
"text": "Hello, how can I help you today?",
"start": 5,
"stop": 36
},
{
"role": "customer",
"text": "I need help with my recent order",
"start": 54,
"stop": 67
}
]
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "call_recording.wav",
"content_type": "audio/wav",
"agent_email": "agent@company.com",
"product_id": 123
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "stereo_call.wav",
"content_type": "audio/wav",
"agent_email": "agent@company.com",
"product_id": 123,
"speaker": {
"separation": "channels",
"channel_map": ["agent", "customer"]
}
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "stereo_call_unknown.wav",
"content_type": "audio/wav",
"agent_email": "agent@company.com",
"product_id": 123,
"speaker": {
"separation": "channels"
}
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "call_recording.mp4",
"content_type": "audio/mp4",
"agent_email": "agent@company.com",
"product_id": 123
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "screen_recording.mp4",
"content_type": "video/mp4",
"agent_email": "agent@company.com",
"product_id": 123
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "screen_recording.mov",
"content_type": "video/quicktime",
"agent_email": "agent@company.com",
"product_id": 123
}'
{
"upload_id": 12345,
"conversation_id": "conv_123",
"upload_url": "https://storage.googleapis.com/...",
"expires_in": 3600
}
{
"success": true
}
Create Call
Creates a call inside Reddy platform
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"agent_email": "agent@company.com",
"product_id": 123,
"transcript": [
{
"role": "agent",
"text": "Hello, how can I help you today?",
"start": 5,
"stop": 36
},
{
"role": "customer",
"text": "I need help with my recent order",
"start": 54,
"stop": 67
}
]
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "call_recording.wav",
"content_type": "audio/wav",
"agent_email": "agent@company.com",
"product_id": 123
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "stereo_call.wav",
"content_type": "audio/wav",
"agent_email": "agent@company.com",
"product_id": 123,
"speaker": {
"separation": "channels",
"channel_map": ["agent", "customer"]
}
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "stereo_call_unknown.wav",
"content_type": "audio/wav",
"agent_email": "agent@company.com",
"product_id": 123,
"speaker": {
"separation": "channels"
}
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "call_recording.mp4",
"content_type": "audio/mp4",
"agent_email": "agent@company.com",
"product_id": 123
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "screen_recording.mp4",
"content_type": "video/mp4",
"agent_email": "agent@company.com",
"product_id": 123
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "screen_recording.mov",
"content_type": "video/quicktime",
"agent_email": "agent@company.com",
"product_id": 123
}'
{
"upload_id": 12345,
"conversation_id": "conv_123",
"upload_url": "https://storage.googleapis.com/...",
"expires_in": 3600
}
{
"success": true
}
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.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 includefilename, 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 supportedaudio/* 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 supportedvideo/* 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:
| Extension | content_type |
|---|---|
3gp, 3gpp | video/3gpp |
flv | video/x-flv |
mov | video/quicktime |
mp4 | video/mp4 |
mpeg, mpg | video/mpeg |
webm | video/webm |
wmv | video/x-ms-wmv |
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"
Speaker Separation
Control how speakers are separated in the call using thespeaker 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.
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"agent_email": "agent@company.com",
"product_id": 123,
"transcript": [
{
"role": "agent",
"text": "Hello, how can I help you today?",
"start": 5,
"stop": 36
},
{
"role": "customer",
"text": "I need help with my recent order",
"start": 54,
"stop": 67
}
]
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "call_recording.wav",
"content_type": "audio/wav",
"agent_email": "agent@company.com",
"product_id": 123
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "stereo_call.wav",
"content_type": "audio/wav",
"agent_email": "agent@company.com",
"product_id": 123,
"speaker": {
"separation": "channels",
"channel_map": ["agent", "customer"]
}
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "stereo_call_unknown.wav",
"content_type": "audio/wav",
"agent_email": "agent@company.com",
"product_id": 123,
"speaker": {
"separation": "channels"
}
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "call_recording.mp4",
"content_type": "audio/mp4",
"agent_email": "agent@company.com",
"product_id": 123
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "screen_recording.mp4",
"content_type": "video/mp4",
"agent_email": "agent@company.com",
"product_id": 123
}'
curl -X POST 'https://app.reddy.io/api/v1/call/create' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"filename": "screen_recording.mov",
"content_type": "video/quicktime",
"agent_email": "agent@company.com",
"product_id": 123
}'
{
"upload_id": 12345,
"conversation_id": "conv_123",
"upload_url": "https://storage.googleapis.com/...",
"expires_in": 3600
}
{
"success": true
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Email address of the agent handling the call
Product id associated with the call
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.
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.
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.
Configuration for speaker separation and channel mapping. If not provided, defaults to diarization.
Show child attributes
Show child attributes
Transcript of the call
Show child attributes
Show child attributes
Array of tag objects containing key, value, and type
Show child attributes
Show child attributes
Timestamp of the call start time in seconds since epoch format. If not set, defaults to the current time.
Unique identifier for the conversation
Response
OK
- UploadURLResponse
- CallCreateSuccess
Unique identifier for the upload
Unique identifier for the conversation
Signed Google Cloud Storage URL to upload the media file. Send raw bytes with the correct Content-Type header.
Time in seconds for which the upload URL is valid
Exact Content-Type header to send on the GCS PUT. The signed URL pins this value.
Was this page helpful?