---
title: "Store a Vortex Desktop recording from a URL, without transcribing it"
method: POST
path: "/api/vortex/upload-audio-from-url"
tags: ["Vortex"]
---

# Store a Vortex Desktop recording from a URL, without transcribing it

`POST /api/vortex/upload-audio-from-url`

## Request

- Base URL: `https://api.sponsorunited.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.sponsorunited.com/api/vortex/upload-audio-from-url`
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/sponsorunited/apis/sponsorunited-api/docs/api/vortex/upload-audio-from-url/post.ts> (a function with typed inputs; its response is checked against the schema)

Downloads the recording from the presigned URL, stores it where Pro's own audio uploads go and creates the Audio record. It is never transcribed: Vortex Desktop has already detected the brands and assets, so no transcription or matching job is started and the transcription fields stay empty. Attach the returned id to the report with POST /api/vortex/user-event-uploads (media_type audio) so the review screen lists and plays it, and to rows with items.*.audios.*.id on POST /api/vortex/audit/audio-bulk. The URL must be a direct presigned GET whose path ends with m4a, mp4, mp3 or wav; the file must be at most 500 MB and arrive within 120 seconds, so callers should allow at least 300 seconds for the whole request. Each call stores a new recording. Authenticated via X-API-Key.

## Request body

- VortexUploadAudioFromUrlRequest: Stores a finished Vortex Desktop recording as an audio, without transcribing it.
  - `url` string, url, required: A direct (non-redirecting) presigned GET URL for the recording. The path must end with the file extension: m4a, mp4, mp3 or wav. At most 500 MB, downloaded within 120 seconds.
  - `user_id` integer, required: The scout who recorded the session. Part of the stored file name, as in Pro uploads.
  - `item_subplatform_id` integer, required: The subplatform the recording was captured on (for example Radio).
  - `original_name` string, nullable: The name shown for the recording in the Pro Tool. Defaults to the file name in the URL.
  - `language` string, nullable: BCP 47 language of the recording, as in Pro uploads. Defaults to en-US.

## Response `201`

Recording stored

- object
  - `id` integer: Audio id
  - `stored_name` string: The object name under uploads/ on the audio bucket

## Other responses

- `401`: Missing or invalid API key
- `422`: Validation error, a URL with no path or no file extension, an unsupported extension, a redirect, a non-2xx response from the source, an unreachable host, an empty file, a size over the ceiling, a download over the time budget, or a file whose content is not the audio type its extension names

---

[API](https://skmtc.dev/sponsorunited/apis/sponsorunited-api.md) - [All operations](https://skmtc.dev/sponsorunited/apis/sponsorunited-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sponsorunited/apis/sponsorunited-api/revisions/cbf1ca5bff8f?raw)
