Skip to content

Ingestion API

The Ingestion API is how you get conversation data into Heard programmatically. Use it when you’re building a custom integration that isn’t covered by Heard’s built-in integrations.


POST /api/v1/ingest/audio

Submit an audio file for transcription and analysis.

Terminal window
curl -X POST https://api.heard.ai/v1/ingest/audio \
-H "X-API-Key: sk_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"audio_url": "https://storage.example.com/call-recording.wav",
"metadata": {
"source": "custom-pbx",
"caller_phone": "+15550123",
"agent_name": "Sarah Chen",
"recorded_at": "2026-03-11T14:30:00Z"
}
}'
ParameterTypeRequiredDescription
audio_urlstringPublic URL to the audio file
audio_filebinary✅*Or upload the file directly (multipart/form-data)
metadata.sourcestringLabel for the ingestion source
metadata.caller_phonestringPhone number for identity resolution
metadata.agent_namestringName of the agent/representative on the call
metadata.recorded_atstringISO 8601 timestamp of the recording

*One of audio_url or audio_file is required.

.wav, .mp3, .flac, .m4a, .webm, .ogg

{
"job_id": "job_abc123",
"status": "processing",
"estimated_duration_seconds": 45
}

POST /api/v1/ingest/transcript

Submit a text transcript directly (skip transcription).

Terminal window
curl -X POST https://api.heard.ai/v1/ingest/transcript \
-H "X-API-Key: sk_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"transcript_text": "Agent: Hi, how can I help you today?\nCustomer: I have a billing question...",
"metadata": {
"source": "zendesk-chat",
"customer_email": "mike@acme.com",
"channel": "chat"
}
}'
ParameterTypeRequiredDescription
transcript_textstringThe conversation transcript
metadata.sourcestringLabel for the ingestion source
metadata.customer_emailstringEmail for identity resolution
metadata.customer_phonestringPhone for identity resolution
metadata.channelstringvoice, email, chat, or meeting
{
"job_id": "job_def456",
"status": "processing",
"estimated_duration_seconds": 10
}

{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid audio format. Supported: wav, mp3, flac, m4a, webm, ogg",
"details": { "field": "audio_url" }
}
}
CodeMeaning
VALIDATION_ERRORInvalid input (bad format, missing field)
AUTH_ERRORInvalid or expired API key
RATE_LIMITEDToo many requests
FILE_TOO_LARGEAudio exceeds max size (500 MB)
UNSUPPORTED_FORMATAudio format not recognized