NomonoPlatform docs

Concepts

Outputs

When a job is done, you download its files from signed URLs and, if you asked for one, read its analysis.

Listing outputs

GET /v1/jobs/{job_id}/outputs lists the files of a job that's done, each with a download URL. In the curl sample, OUTPUT_URL stands for one of them.

curl "https://platform-api.nomono.co/v1/jobs/job_01a14471b2d47f19b6a3c0e5d8f9a1b2/outputs" \  -H "Authorization: Bearer $NOMONO_API_KEY"curl -o host.wav "$OUTPUT_URL"
200 OK
{  "outputs": [    {      "output_id": "out_01a144729c0e7b31a8f45d2c6e9b0a17",      "type": "tracks",      "label": "Host",      "source_id": "src_01a1446f235c7448abbe096c9b9adf6c",      "format": "wav",      "profile": null,      "size_bytes": 176084204,      "url": "https://....s3.eu-west-1.amazonaws.com/...?X-Amz-Expires=86400&X-Amz-Signature=...",      "expires_at": "2026-10-17T09:45:20Z"    },    {      "output_id": "out_01a144729c0e7b31a8f45d2c6e9b0a18",      "type": "tracks",      "label": "Host",      "source_id": "src_01a1446f235c7448abbe096c9b9adf6c",      "format": "opus",      "profile": null,      "size_bytes": 21208733,      "url": "https://...",      "expires_at": "2026-10-17T09:45:20Z"    },    {      "output_id": "out_01a144729c0e7b31a8f45d2c6e9b0a19",      "type": "tracks",      "label": "Host",      "source_id": "src_01a1446f235c7448abbe096c9b9adf6c",      "format": "waveform",      "profile": null,      "size_bytes": 21402,      "url": "https://...",      "expires_at": "2026-10-17T09:45:20Z"    },    {      "output_id": "out_01a144729c0e7b31a8f45d2c6e9b0a1a",      "type": "tracks",      "label": "Guest",      "source_id": "src_01a1446f8e8f7b23a4c06d1c3e5f7a90",      "format": "wav",      "profile": null,      "size_bytes": 176084204,      "url": "https://...",      "expires_at": "2026-10-17T09:45:20Z"    },    {      "output_id": "out_01a144729c0e7b31a8f45d2c6e9b0a1b",      "type": "tracks",      "label": "Guest",      "source_id": "src_01a1446f8e8f7b23a4c06d1c3e5f7a90",      "format": "opus",      "profile": null,      "size_bytes": 20995120,      "url": "https://...",      "expires_at": "2026-10-17T09:45:20Z"    },    {      "output_id": "out_01a144729c0e7b31a8f45d2c6e9b0a1c",      "type": "tracks",      "label": "Guest",      "source_id": "src_01a1446f8e8f7b23a4c06d1c3e5f7a90",      "format": "waveform",      "profile": null,      "size_bytes": 21388,      "url": "https://...",      "expires_at": "2026-10-17T09:45:20Z"    },    {      "output_id": "out_01a144729c0e7b31a8f45d2c6e9b0a1d",      "type": "mix",      "label": null,      "source_id": null,      "format": "stereo",      "profile": null,      "size_bytes": 352168364,      "url": "https://...",      "expires_at": "2026-10-17T09:45:20Z"    },    {      "output_id": "out_01a144729c0e7b31a8f45d2c6e9b0a1e",      "type": "mix",      "label": null,      "source_id": null,      "format": "opus",      "profile": null,      "size_bytes": 23110587,      "url": "https://...",      "expires_at": "2026-10-17T09:45:20Z"    },    {      "output_id": "out_01a144729c0e7b31a8f45d2c6e9b0a1f",      "type": "mix",      "label": null,      "source_id": null,      "format": "waveform",      "profile": null,      "size_bytes": 21455,      "url": "https://...",      "expires_at": "2026-10-17T09:45:20Z"    }  ],  "analysis": {    "session_id": "ses_01a14471a03b7c56a1e28d9f4b6c7d8e",    "duration_s": 1834.21,    "sources": [      {        "source_id": "src_01a1446f235c7448abbe096c9b9adf6c",        "label": "Host",        "loudness_lufs": -23.8205141512005,        "peak": 0.5196996978667562,        "duration_s": 1834.21,        "problems": []      },      {        "source_id": "src_01a1446f8e8f7b23a4c06d1c3e5f7a90",        "label": "Guest",        "loudness_lufs": -16.402177630913,        "peak": 0.9994,        "duration_s": 1834.21,        "problems": ["clipping"]      }    ]  }}

Until the job is done, this returns 404 not_found, "Outputs not found", with the job's status in the hint.

404 Not Found
{  "error": {    "code": "not_found",    "message": "Outputs not found",    "hint": "Outputs are available once the job is done; it is assembling"  }}

Next to the outputs, the response has an analysis, which is null unless the job asked for one. Each output has these fields:

FieldWhat it holds
output_idThe output's ID, starting out_.
typetracks, mix or adm.
labelFor a track, the label its source has in the session, and null otherwise.
source_idFor a track, the source it was made from, and null otherwise.
formatWhat the file is, one of the kinds of output.
profileebu or dolby for an ADM file, and null otherwise.
size_bytesThe file's size in bytes.
urlA signed download URL.
expires_atWhen url expires.

Downloading

Download each url with a plain GET and without your API key. The URLs expire after 24 hours, and listing the outputs again gives you new ones. The files themselves are deleted along with their session.

Kinds of output

typeformatThe file
trackswavThe processed track of one microphone, or of the mixdown, as a WAV file.
tracksopusThe track's compressed copy, in Opus.
trackswaveformThe track's waveform data as JSON, for drawing it in a player.
mixstereo or binauralThe mix as a WAV file.
mixopusThe mix's compressed copy, in Opus.
mixwaveformThe mix's waveform data as JSON.
admwav, with profile ebuAn EBU ADM file.
admwav, with profile dolbyA Dolby Atmos ADM file.

A track of digital silence has only its WAV file, without an Opus copy or waveform data.

The analysis

analysis.sources has one entry for each processed track, in session order. Every value in it is measured on the processed audio.

FieldWhat it holds
source_idThe source the track was made from.
labelThe source's label in the session, or null.
loudness_lufsThe track's integrated loudness in LUFS, or null when the track is silent.
peakThe track's absolute sample peak, linear from 0 to 1, which is null or 0 when the track is silent.
duration_sThe processed track's length in seconds.
problemssilent for a track of digital silence and clipping for a peak of 0.999 or more, about −0.01 dBFS. The list is empty when neither applies.

Binaural mixes

A binaural mix is a stereo mix for headphones with the voices placed around the listener. It needs products.spatialization and a session with a bed.

Warning

For now, every binaural mix is rendered with stage, which arranges the voices in an arc, whatever positions you set. ADM files always use the measured positions.

ADM files

An adm output is an ADM master for Dolby Atmos or EBU workflows. The voices are objects placed at the speakers' measured positions, and each microphone's label names its objects in the metadata. profile sets the file type:

profileThe filebed_configDefault
ebuAn EBU ADM file, which is a BW64 or WAV file with axml and chna chunks.bformat, 7.1.2, 5.1 or 2.0bformat
dolbyA Dolby Atmos ADM file, which has a dbmd chunk as well.7.1.2, 5.1 or 2.07.1.2

bed_config sets how the bed's recording of the room is written into the file, either as 4-channel first-order ambisonics with bformat or decoded to a 7.1.2, 5.1 or 2.0 channel bed.

ADM files come without an Opus copy or waveform data:

200 OK
{  "outputs": [    {      "output_id": "out_01a14473e5b17c02b9a4d6e8f0c2a4b6",      "type": "adm",      "label": null,      "source_id": null,      "format": "wav",      "profile": "ebu",      "size_bytes": 2113262180,      "url": "https://...",      "expires_at": "2026-10-17T10:02:41Z"    },    {      "output_id": "out_01a14473e5b17c02b9a4d6e8f0c2a4b7",      "type": "adm",      "label": null,      "source_id": null,      "format": "wav",      "profile": "dolby",      "size_bytes": 3698090114,      "url": "https://...",      "expires_at": "2026-10-17T10:02:41Z"    }  ],  "analysis": null}