Broadcastify Help Center

Broadcastify Calls - Ingest/Upload API

Broadcastify Support
Broadcastify Support
  • Updated

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:

  1. Apply at https://www.broadcastify.com/apply/calls with details of the system you intend to provide.
  2. 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.
  3. 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:

  1. Verify time synchronization on the host system. NTP accuracy is required; calls with bad timestamps are rejected or deduplicated incorrectly.
  2. Record the call and capture its metadata (talkgroup, frequency, source unit ID, start timestamp, duration).
  3. Encode the audio to AAC (M4A) or MP3 per the format spec below.
  4. Register the call with the API. The server returns a single-use, time-limited upload URL.
  5. 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

Support

For implementation questions, additional system IDs, promotion from development to production, or general support, write to support@broadcastify.com.

Was this article helpful?

1 out of 3 found this helpful

Have more questions? Submit a request

Comments

0 comments

Article is closed for comments.