# Uploads an image to public storage blob. Not member dependent or anything

`POST /api/images`

- **Success:** `200 OK`
- **Products:** Operator (`FOH`), Consumer (`CONSUMER`) (any one of these products, not all)
- **Features:** Online Bookings (`ONLINEBOOK`), Online Joining (`ONLINEJOIN`), Front of House Generic Access (`FOHGENERIC`) (any one of these features, not all)

HTML version: [Uploads an image to public storage blob. Not member dependent or anything](https://support.gladstonesoftware.cloud/reference/configuration/uploads-an-image-to-public-storage-blob-not-member-dependent-or-anything)

## Overview

Uploads a general-purpose image to public storage and returns the file name it was stored under. Use it for images that are not tied to a member — a site logo, a promotional banner, an organisation's branding.

Send the request as `multipart/form-data` with a single part:

| Part | Required | Description |
|------|----------|-------------|
| `imageFile` | Yes | The image itself. **JPEG and PNG only**, and the check reads the file's actual header rather than trusting its extension or `Content-Type`, so renaming another format to `.jpg` is rejected. Maximum 10 MB; an empty file is rejected too. |

**You do not choose the name.** Unlike [Upload activity image](uploads-an-activity-image-to-public-storage-blob.md), this endpoint takes no name parameter: it generates a fresh GUID and appends the extension from your uploaded file's name, so a file called `logo.PNG` is stored as something like `3f2b8c14-9a77-4c1e-b0d5-7e6f2a4d9c31.PNG`. The extension is copied verbatim, including its case. As a result every upload creates a new file and **nothing can ever be overwritten** — there is no `409` on this endpoint, and re-uploading the same picture simply leaves two copies. Delete the old one yourself if you are replacing something.

**The response is a bare JSON string, not an object** — just the generated file name, with no surrounding braces and no URL. You have to build the public URL yourself from the file name and the public storage base address for your environment; this endpoint does not return one. That differs from the activity image upload, which returns both.

Images stored here are publicly readable by anyone with the link, without authentication. Do not upload anything that identifies a member.

## Endpoint

`POST {base_url}/api/images`

`{base_url}` is the environment URL issued to your integration. See [Authenticating with Gladstone APIs](../../guides/authenticating-with-gladstone-apis.md).

## Sample request

```bash title="cURL"
curl -X POST '{base_url}/api/images' \
  -H 'Authorization: Bearer {accessToken}' \
  -H 'X-Use-SSO: true' \
  -F 'imageFile=@site-logo.png'
```

## Sample response

```json title="200 OK"
"3f2b8c14-9a77-4c1e-b0d5-7e6f2a4d9c31.png"
```

## Errors

| Status | Meaning | When |
|--------|---------|------|
| `400` | Bad request | `imageFile` is missing — `An image file is required.` |
| `400` | Bad request | `imageFile` is larger than 10 MB — `File "{name}" is {size}MB in size which is larger than the maximum size of 10MB.` The name in the message is truncated to 20 characters. |
| `400` | Bad request | `imageFile` is zero bytes — `File "{name}" is empty and cannot be uploaded.` |
| `400` | Bad request | `imageFile` is not a JPEG or PNG by its actual file header — `File "{name}" is not a valid image, only image files of type "jpg", "jpeg" and "png" can be saved.` |
| `500` | Internal server error | The image could not be saved. The response body is empty. Because the generated name is always unique, a name collision is not a cause. |
