# Pearl REST API monitor automatic file upload

Automatic File Upload (AFU) transfers recorded files from a Pearl device to a server or USB destination. The API reports AFU state and queue depth but does not configure AFU destinations.

*Applies to: Pearl-2, Pearl Mini, Pearl Nexus, Pearl Nano.*

| Method and path | What it does |
| --- | --- |
| `GET /afu` | Lists AFU IDs |
| `GET /afu/status` | Status of every AFU destination |
| `GET /afu/{aid}/status` | Status of one AFU destination |

As of firmware 4.24.1, the AFU list is limited to a single AFU ID.

**AFU states** are `idle`, `paused`, `uploading`, `error`, and `disabled`.

**Protocols** reported in the `protocol` field are `ftp`, `rsync`, `cifs`, `scp`, `sftp`, `s3`, `webdav`, `edge`, `usbcopy`, `kaltura`, `panopto`, and `opencast`. Container app protocols use the form `container:{app_name}`.

**Queue and file fields.** The `queue` block reports `files` (number of files waiting) and `size` (total bytes waiting). While uploading, a `file` block reports the `recorder` the file came from, the file `id`, `size` in bytes, and `uploaded` bytes. Not all AFU protocols report the `uploaded` byte count, so treat a progress figure as unavailable rather than zero when the protocol does not supply it.

When the state is `error`, an `error.message` field carries the reason.

```json
{
  "status": "ok",
  "result": {
    "state": "uploading",
    "protocol": "webdav",
    "queue": { "files": 1, "size": 184323243 },
    "file": { "recorder": "1", "id": "VGA.1736858583.Test channel.mp4", "uploaded": 0, "size": 184323243 }
  }
}
```

An unknown AFU ID returns 404 with a message such as `AFU destination '15' not found`.

> product: pearl-family · topic: recording · source: pearl-rest-api.md · updated: Oct 7, 2026
