# GET /api/files/{source}/{id}/download > Files - Download a File Streams the stored bytes as an attachment. The path is rebuilt from the stored row and the RISE file path settings - never from anything the caller sends - resolved with realpath() and refused unless it sits inside the configured files directory. Files held by Google Drive or a custom storage plugin have no local bytes and answer 409. - **Endpoint:** `GET /api/files/{source}/{id}/download` - **Group:** Files - **Since:** v1.0.0 - **Defined in:** `RestApi/Controllers/FilesController.php` ## Headers | Field | Type | Description | | --- | --- | --- | | `authtoken` | String | Authentication token, generated from admin area | ## Parameters | Field | Type | Required | Description | | --- | --- | --- | --- | | `source` | String | yes | Which file table the id belongs to: project or general | | `id` | Number | yes | File unique ID inside that table | ## Request example ```bash curl -X GET "https://yoursite.com/index.php/api/files/source/123/download" \ -H "authtoken: YOUR_API_TOKEN" ``` ## Responses ### Error - Error-Response: ```json HTTP/1.1 404 Not Found { "status": false, "messages": { "error": "No data were found" } } ``` --- Part of the [REST API for RISE CRM](https://risecrm.themesic.com/apiguide/) documentation. Full page: https://risecrm.themesic.com/apiguide/files/download-file/