# Complete a catalog photo upload

> The complete_catalog_image_upload MCP tool: complete a catalog photo upload.

`complete_catalog_image_upload` · writes

[REST: `POST /v1/catalog/entities/{entityId}/images/{assetId}/complete`](https://api.bymundi.com/docs/reference/catalog.images.completeUpload.md)

## What the model reads

Completes an upload started with start_catalog_image_upload, once its bytes were PUT: bymundi re-encodes the photo and attaches it to the entry (last, or the lead photo with `position: first`). undo_change takes it off again.

Permissions: catalog:write.
Undo: the result names a change id; undo_change reverts it.

## Input

| Field | Type | Required | Description |
|---|---|---|---|
| `entityId` | uuid | yes |  |
| `assetId` | uuid | yes |  |
| `alt` | string |  | A description of the photo for screen readers (recommended). max 300 chars |
| `position` | "first" \| "last" |  | `first` makes it the entry's lead photo; `last` (the default) appends it. default "last" |

## Input schema (JSON)

```json
{
  "type": "object",
  "properties": {
    "entityId": {
      "type": "string",
      "format": "uuid"
    },
    "assetId": {
      "type": "string",
      "format": "uuid"
    },
    "alt": {
      "type": "string",
      "maxLength": 300,
      "description": "A description of the photo for screen readers (recommended)."
    },
    "position": {
      "type": "string",
      "enum": [
        "first",
        "last"
      ],
      "default": "last",
      "description": "`first` makes it the entry's lead photo; `last` (the default) appends it."
    }
  },
  "required": [
    "entityId",
    "assetId"
  ],
  "additionalProperties": false
}
```
