---
title: "Upload a product image"
method: POST
path: "/api/v1/commerce/products/media"
tags: ["commerce"]
---

# Upload a product image

`POST /api/v1/commerce/products/media`

## Request

- Base URL: `https://app.blueticked.com`
- URL: `https://app.blueticked.com/api/v1/commerce/products/media`
- Auth: HTTP bearer

Upload a photo and get back a hosted URL to set as a product's `image_url`.

Send `multipart/form-data` with a single `file` part, not JSON.

PNG, JPEG, WebP and GIF only, up to 10MB. The file's actual bytes are checked against its declared type, so a renamed file is rejected.

The returned `url` is public and permanent. Add it to a product's `images` with its `path` (or set it as `image_url`) in a create or update call. Uploading alone does not attach it to anything.

Images belong to the business, not to one site, so the same upload can be used on every site, in WhatsApp and on a payment link.

Up to 500 images per business.

## Response `200`

Success

- object
  - `ok` boolean, required
  - `media` object, required
    - `url` string, required
    - `path` string, required
    - `size` number, required
    - `mime` string, required

## Other responses

- `400`: Validation failed
- `401`: Unauthorized: missing or invalid API key
- `402`: Insufficient wallet balance
- `403`: Forbidden: scope, plan limit, or suspension
- `404`: Not found
- `409`: Conflict (idempotency-key reuse or resource in use)
- `413`: Request body above the endpoint's size limit
- `422`: Understood but refused: the request is well-formed, the action is not permitted for this resource
- `429`: Rate limited
- `500`: Internal error
- `502`: An upstream provider refused or failed the request
- `503`: Channel or send queue unavailable

---

[API](https://skmtc.dev/blueticked/apis/blueticked-api.md) · [All operations](https://skmtc.dev/blueticked/apis/blueticked-api/llms.txt) · [OpenAPI document](https://skmtc.dev/blueticked/apis/blueticked-api/revisions/07132284f4ff?raw)
