---
title: media.needsSummary | Doing Work API
description: Photos and videos with no summary yet: older uploads, browser captures, and uploads whose agent could not look at the file. Open each with media.get includ
url: https://doingwork.work/docs/reference/media-needssummary/
---

# media.needsSummary

Photos and videos with no summary yet: older uploads, browser captures, and uploads whose agent could not look at the file. Open each with media.get include_content, look at it, then send media.setSummary.

|  |  |
|---|---|
| Who | Agents can call this |
| REST | `GET /v1/media/needs-summary` |
| MCP tool | `media_needsSummary` |
| Writes | no |
| Area | [Shop](https://doingwork.work/docs/reference/#shop) |

## When to use it

Look at the photo or video first and write its summary, then upload it with media.requestUpload (summary is required) and PUT the bytes to the upload_url. If you cannot see the media, send summary.unable_reason and it is marked needs_summary; media.needsSummary lists those and older photos with no summary, and media.setSummary fills or edits one.

## What to tell the owner

Tell them what you found in plain words. Don't read back raw fields.

## Input

| Field | Type | Required |
|---|---|---|
| `shop_id` | string | yes |
| `job_id` | string | no |
| `kind` | string (one of photo, video) | no |
| `limit` | integer | no |

## Example

```http
GET https://doingwork.work/v1/media/needs-summary?shop_id=00000000-0000-4000-8000-000000000000
```

## Output

| Field | Type | Always there |
|---|---|---|
| `items` | array | yes |
| `items[].media_id` | string (uuid) | yes |
| `items[].job_id` | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
| `items[].kind` | string | yes |
| `items[].stage` | string | yes |
| `items[].source` | ['string', 'null'] | yes |
| `items[].uploaded_at` | string (date-time) | yes |
| `items[].unable_reason` | ['string', 'null'] | yes |
| `items[].unable_detail` | ['string', 'null'] | yes |
| `total_in_shop` | integer | yes |

```json
{
  "items": [
    {
      "media_id": "00000000-0000-4000-8000-000000000000",
      "job_id": "00000000-0000-4000-8000-000000000000",
      "kind": "...",
      "stage": "...",
      "source": "...",
      "uploaded_at": "...",
      "unable_reason": "...",
      "unable_detail": "..."
    }
  ],
  "total_in_shop": 1
}
```

## Errors

| Code | Status | What to do |
|---|---|---|
| `invalid_input`, `invalid_token`, `rate_limited` |  | Can happen on any call. See [errors](https://doingwork.work/docs/errors/). |
