The Broadcastify Calls Upload API allows approved Calls feed providers to programmatically register and upload individual call recordings to Broadcastify Calls. It is one of four Broadcastify APIs (Live Audio Catalog, Calls Client, Calls Ingest / Upload, and Feed Owner), all covered in this Developers section.
Broadcastify Calls is a high-capacity service that ingests individual radio calls from conventional and trunked systems, making them available in real time and through archives (365-day retention). Each call is captured as a discrete audio file with its associated metadata (talkgroup, frequency, source unit, timestamp, and duration).
Who this API is for
This API is for operators of decoding software (Trunk Recorder, SDRTrunk, ProScan, VoxCall, custom decoders, etc.) who want their captured calls to flow into Broadcastify Calls under an approved Calls node. It is not a consumer API; it does not return call audio, system information, or live data. For consuming calls, see the Broadcastify Calls Client API.
Becoming a Calls provider
All Calls providers go through an application and onboarding process before receiving production credentials:
- Apply at https://www.broadcastify.com/apply/calls with details of the system you intend to provide.
- Once approved, you will receive an API Key and one or more System IDs for the development environment, where you build and test your integration.
- After your test data is verified, you will be promoted to production credentials and your node will appear in the Broadcastify Calls catalog.
Endpoints
- Development:
https://api.broadcastify.com/call-upload-dev - Production:
https://api.broadcastify.com/call-upload
Use the development endpoint with development credentials only. Production credentials are issued separately and must be used against the production endpoint.
Upload workflow
Each call follows the same five-step workflow:
- Verify time synchronization on the host system. NTP accuracy is required; calls with bad timestamps are rejected or deduplicated incorrectly.
- Record the call and capture its metadata (talkgroup, frequency, source unit ID, start timestamp, duration).
- Encode the audio to AAC (M4A) or MP3 per the format spec below.
- Register the call with the API. The server returns a single-use, time-limited upload URL.
-
PUT the audio file to the returned upload URL with the correct
Content-Type.
Audio format
M4A / AAC is preferred. Encode at approximately 32 kb/s with an 18 kHz cutoff using libfdk_aac or equivalent.
MP3 is also accepted, using one of the following:
- 32 kb/s, mono, 22050 Hz sample rate, CBR
- 16 kb/s, mono, 22050 Hz sample rate, CBR
Registering a call
POST an RFC 1867 multipart/form-data request to the appropriate endpoint with the following parameters:
| Parameter | Type | Description |
|---|---|---|
apiKey |
string | Authorization credential |
systemId |
int | Assigned system identifier |
callDuration |
float | Call duration in seconds |
ts |
int | Unix timestamp of call start |
tg |
string | Talkgroup (trunked) or frequency slot ID (conventional). See below. |
src |
int | Source unit ID (decimal) |
freq |
float | Frequency in MHz |
enc |
string | Optional encoding hint: m4a (default) or mp3
|
Talkgroup formatting
- Trunked systems: decimal talkgroup number.
- Patched calls: comma-delimited list of all talkgroups in the patch, with the patch ID listed first.
- Conventional systems: the predefined Frequency Slot ID assigned to that frequency on your node.
Response codes
| Response | Meaning |
|---|---|
0 <upload URL> |
Success. PUT the audio file to the returned single-use upload URL. |
1 SKIPPED---ALREADY-RECEIVED-THIS-CALL |
Duplicate detected (same system, talkgroup, and timestamp). No upload needed. |
100 NO-API-KEY-SPECIFIED |
Missing or invalid apiKey. Do not retry without correcting. |
Uploading the audio
Issue an HTTP PUT to the upload URL returned by the registration call, with the audio file as the body and the appropriate Content-Type:
- M4A / AAC:
Content-Type: audio/aac - MP3:
Content-Type: audio/mpeg
Upload URLs are single-use and time-limited; do not reuse or cache them.
Credential testing
Both the development and production endpoints accept a test=1 parameter alongside apiKey and systemId to verify that credentials are valid before sending real calls.
Monitoring
- Development status: https://www.broadcastify.com/calls-dev/status/
- Production status: https://www.broadcastify.com/calls/status/
- Production node management: https://www.broadcastify.com/calls/manage/
Support
For implementation questions, additional system IDs, promotion from development to production, or general support, write to support@broadcastify.com.
Comments
0 comments
Article is closed for comments.