media.setSummary
Write or correct what a photo or video shows. Use it to fix a summary, to fill in one marked needs_summary (older photos and browser captures have none), or after a person edits the words. Each change keeps the earlier wording. Workers on the shop can edit; the summary is never shown to customers.
| Who | Agents can call this |
| REST | POST /v1/media/summary |
| MCP tool | media_setSummary |
| Writes | yes, send an Idempotency-Key |
| Area | 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
Say what you did in plain words and what happens next.
Input
| Field | Type | Required |
|---|---|---|
media_id | string | yes |
summary | object | yes |
summary.summary | string | no |
summary.notable | array | no |
summary.notable[].kind | string (one of damage, leak, safety, code_issue, wear, pest, mold, access, other) | yes |
summary.notable[].text | string | yes |
summary.readable_text | array | no |
summary.readable_text[].what | string | yes |
summary.readable_text[].text | string | yes |
summary.measurements | array | no |
summary.measurements[].what | string | yes |
summary.measurements[].value | number | yes |
summary.measurements[].unit | string | yes |
summary.measurements[].how | string (one of read, estimated) | yes |
summary.transcript | string | no |
summary.key_moments | array | no |
summary.key_moments[].at_seconds | number | yes |
summary.key_moments[].text | string | yes |
summary.duration_seconds | number | no |
summary.language | string | no |
summary.generated_by | string | no |
summary.unable_to_analyze | object | no |
summary.unable_to_analyze.reason | string (one of no_vision, no_video, file_unreadable, too_large, not_allowed, other) | yes |
summary.unable_to_analyze.detail | string | no |
edited_by_person | boolean | no |
Example
POST https://doingwork.work/v1/media/summary
content-type: application/json
Idempotency-Key: 3f1c...
{
"media_id": "00000000-0000-4000-8000-000000000000",
"summary": {
"summary": "...",
"notable": [
{
"kind": "damage",
"text": "..."
}
],
"readable_text": [
{
"what": "...",
"text": "..."
}
],
"measurements": [
{
"what": "...",
"value": "...",
"unit": "...",
"how": "read"
}
],
"transcript": "...",
"key_moments": [
{
"at_seconds": "...",
"text": "..."
}
],
"duration_seconds": "...",
"language": "...",
"generated_by": "...",
"unable_to_analyze": {
"reason": "no_vision"
}
}
}Output
JSON. The response shape isn't published yet; read the fields you need and ignore the rest. Errors are {code, message, status}.
Errors
| Code | Status | What to do |
|---|---|---|
invalid_input, invalid_token, rate_limited | Can happen on any call. See errors. |