---
title: Uploads
path: reference/api/uploads
status: published
---

# Uploads

**3 endpoints** in this group. All paths are prefixed with `/api/v1`.

## Endpoints in this group

- [`POST /api/v1/admin/uploads/icon`](#post-api-v1-admin-uploads-icon) — Upload Icon
- [`POST /api/v1/admin/uploads/template-image`](#post-api-v1-admin-uploads-template-image) — Upload Template Image
- [`GET /api/v1/uploads/{path}`](#get-api-v1-uploads-path) — Serve Upload

---

### POST `/api/v1/admin/uploads/icon` — Upload Icon {#post-api-v1-admin-uploads-icon}

Upload a service icon to S3. Returns the public URL.

**Parameters**:

- `authorization` (header, string, optional)


**Responses**:

- `200` — Successful Response. Returns: `ApiResponse_dict_` — {`data`, `meta`}
- `422` — Validation Error. Returns: `HTTPValidationError` — {`detail`}


### POST `/api/v1/admin/uploads/template-image` — Upload Template Image {#post-api-v1-admin-uploads-template-image}

Upload an image for use in invoice templates. Returns the public URL.

**Parameters**:

- `authorization` (header, string, optional)


**Responses**:

- `200` — Successful Response. Returns: `ApiResponse_dict_` — {`data`, `meta`}
- `422` — Validation Error. Returns: `HTTPValidationError` — {`detail`}


### GET `/api/v1/uploads/{path}` — Serve Upload {#get-api-v1-uploads-path}

Proxy S3 objects for public branding assets only.

Restricted to icons and template images — invoice PDFs, credit notes,
XML files, and other sensitive content are NEVER served via this proxy.
Use the authenticated invoice endpoints for billing documents.

**Parameters**:

- `path` (path, string, required)


**Responses**:

- `200` — Successful Response. Returns: —
- `422` — Validation Error. Returns: `HTTPValidationError` — {`detail`}
