> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aigenda.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Uploading by URL

> AiGenda downloads the file from a direct link.

Use this when the recording is already in cloud storage, telephony, or a CRM. You pass a link, and AiGenda downloads the file in the background.

```bash theme={null}
curl -X POST https://api.aigenda.tech/api/spaces/1024/audio/by_url/ \
  -H "Authorization: Bearer <access>" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://records.example.com/calls/2026-10-17/client-call.mp3",
    "title": "Client call 2026-10-17.mp3",
    "content_type": "audio/mpeg"
  }'
```

```json Response 201 theme={null}
{ "audio_id": 51234 }
```

| Field | Rule |
| - | - |
| `url` | Direct link to the file, up to 255 characters. The file must download with a plain `GET`, without authorization, cookies, or intermediate pages |
| `title` | Up to 255 characters, **ends with the file extension** |
| `content_type` | MIME type of the file, for example `audio/mpeg` |

## What's next

The request responds immediately, and AiGenda downloads the file after the response. Until the file is downloaded, the recording is hidden: it is not in the recording list and has `is_active: false`.

1. Take `audio_id` from the response.
2. Poll [`info/`](/en/api-reference/audio/info) for that `audio_id` every 3–5 seconds until you get `is_uploaded: true`.
3. Start [processing](/en/processing/start).

If the link returns an error page instead of the file (for example, `403` or `404`), AiGenda saves that page as the file: `is_uploaded` becomes `true` and `duration` is `0`. Before calling `classify`, check that `duration` is greater than zero. If the link doesn't open at all, the recording stays at `is_uploaded: false` with no separate error. Set a wait timeout based on file size, for example 10 minutes for a file up to 1 GB, and treat the upload as failed after it.

<Warning>
  Uploading by URL does not start processing. Without a `classify` call the recording stays unprocessed.
</Warning>

## Link longer than 255 characters

```json Response 400 theme={null}
{ "url": ["Ensure this field has no more than 255 characters."] }
```

Signed links from cloud storage (S3, Yandex Cloud) are almost always longer than 255 characters. For those, download the file on your side and upload it [as a file](/en/upload/file).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.