---
title: API Media POST | Datasquirel docs
description: Upload a media file via the Datasquirel API
page_title: Media POST
page_description: Upload images and files to your Datasquirel media storage programmatically.
---

## Overview

Use the Media POST endpoint to upload one or more files to your media storage. Files are stored in the folder you specify, and image thumbnails are generated automatically.

## npm Package

```javascript
import datasquirel from "@moduletrace/datasquirel";
import fs from "fs";

// Read the file and convert to base64
const fileBuffer = fs.readFileSync("./photo.jpg");
const base64 = fileBuffer.toString("base64");

const result = await datasquirel.media.add({
    media: [
        {
            name: "photo.jpg",
            base64: `data:image/jpeg;base64,${base64}`,
        },
    ],
    folder: "profile-images",
    type: "image",
    apiKey: process.env.DATASQUIREL_API_KEY,
});

console.log(result.payload); // Uploaded media object(s)
```

## Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `media` | `array` | Yes | Array of files to upload. Each item has a `name` and `base64` string |
| `folder` | `string` | No | Destination folder name. Created automatically if it does not exist |
| `type` | `string` | Yes | File type — `"image"`, `"video"`, `"audio"`, or `"file"` |
| `apiKey` | `string` | No | API key. Falls back to `DATASQUIREL_API_KEY` |

### media Array Items

| Field | Type | Description |
|-------|------|-------------|
| `name` | `string` | The file name including extension (e.g. `"photo.jpg"`) |
| `base64` | `string` | Base64-encoded file data. Must include the data URL prefix (e.g. `data:image/jpeg;base64,...`) |

## REST API

```
POST /api/v1/media
```

**Headers:**
```
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
```

**Body:**
```json
{
    "media": [
        {
            "name": "photo.jpg",
            "base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ..."
        }
    ],
    "folder": "profile-images",
    "type": "image"
}
```

## Response

```json
{
    "success": true,
    "payload": [
        {
            "id": 23,
            "name": "photo.jpg",
            "folder": "profile-images",
            "url": "https://your-instance.com/media/profile-images/photo.jpg"
        }
    ]
}
```

## Notes

- A **Full Access** API key is required. Read-only keys cannot upload files.
- Image thumbnails are generated automatically and stored alongside the original.
- Uploading a file with the same name as an existing file in the same folder will overwrite it if `update: true` is passed.
