---
title: Bulk runs
description: The real sheet-driven POST /v1/formats/mobidoo/live-commerce/bulk-runs Mobidoo fired — envelope, raw item body, and how to poll the queue.
---

Mobidoo runs live-commerce two ways. The
[Live Commerce API](/enterprise/mobidoo/live-commerce) page covers the
single-run, clip-typed path: one `POST …/runs`, a receipt with
`opening[]` / `middle[]` / `closing[]`, and thread-based clip retry.

This page covers the other one: a **sheet-driven batch**. One row of the
broadcast sheet becomes one item, the whole sheet becomes one
`POST …/bulk-runs`, and the schema is trimmed to the only field the batch
consumes — `full_video`. It is the shape used for the 2026-08-28 HBS
No.45–65 batch, reproduced here unabridged so your backend can build the
same body.

The clip schema is not replaced. Keep using `mobidoo/live-commerce/v1` when
you want typed clips and per-scene retry.

## Workspace key

Same rule as every Mobidoo Format call: use a **Mobidoo team workspace** API
key (created under the Mobidoo team, not a personal key). A personal key
calling `mobidoo/live-commerce` fails with `403 workspace_key_required` — see
[Team Formats need a team key](/formats/call#team-formats-need-a-team-key).

The key needs `formats:write` to create the queue and `formats:read` to poll
it. Scopes cannot be added to an existing key — mint a new one.

Not in the Mobidoo workspace yet? Request an invite on Slack to
**허채원 (Chase Huh)**, or email [chase@sume.com](mailto:chase@sume.com) — see
[Workspace access](/enterprise/mobidoo#workspace-access).

## The call

Keep the body in a file; it is far too long for a shell heredoc once every
row carries its own VO.

```bash
export SUME_MOBIDOO_API_KEY="sume_live_..."   # Mobidoo team workspace key

curl -sS -X POST "https://api.sume.com/v1/formats/mobidoo/live-commerce/bulk-runs" \
  -H "Authorization: Bearer $SUME_MOBIDOO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @bulk-runs-body.json
```

Mint a **fresh** `Idempotency-Key` per batch (`$(uuidgen)`). Replaying a spent
key returns `202` and the **old** queue instead of starting a new one.

## The envelope

`bulk-runs-body.json` is two keys. Everything else lives inside each item.

```json
{
  "concurrency": 2,
  "items": ["{/* one Format-run body per sheet row — item 0 in full below */}"]
}
```

The 2026-08-28 batch sent **`concurrency: 2`** and **20 items**: HBS No.45
through No.65, with **No.50 skipped** because that row had no finished draft.
Skip rows client-side — there is no “empty item” to send. Item order is the
order you submit; `items[i].index` on the receipt is that position, so keep
your own sheet-row ↔ index map.

Create returns `202` with a `frq_…` queue and the first `concurrency` items
already running. Provenance for the batch above: queue
`frq_cfd22d14-68db-4aeb-9816-404a79f0badf`, `live-commerce` v38, counts at
create 20 total / 2 running / 18 queued. That queue belongs to the key that
created it — you cannot `GET` it with yours.

Full envelope contract, limits (`concurrency` 1–16, `items` 1–100), queue
receipt shape, and every error code:
[Bulk runs](/formats/bulk-runs).

## Item 0 — the raw body

Each item is exactly the body of a single `POST …/runs`. This is item 0
(sheet No.45) verbatim, only `communication.webhook_url` swapped for a
placeholder. The other 19 items carry the same six keys with their own row's
data.

```json
{
  "instruction": "@mobidoo/live-commerce\n\n아바타는  https://d3hevm4kz2l106.cloudfront.net/ai-showhost/common/avatar/AVATAR_CHAERIN/thumbnail.png 이걸로 생성해줘\n\n9월 3일(목)\t8시\t\tLiving&Leisure\t스포츠/유아동\t4438469916\t나이키 NSW 클럽 프렌치테리 맨투맨 BV2666\thttps://item.gmarket.co.kr/Item?goodsCode=4438469916\t나이키\t30900\t24810\t20%\t🍁 가을 특가 라이브! 나이키 데일리 맨투맨\t매일 편하게 입기 좋은 나이키 맨투맨,\n클럽 프렌치테리로 데일리룩을 완성해보세요!\n\n✔ 나이키 NSW 클럽 프렌치테리 맨투맨\n✔ 부드럽고 편안한 프렌치테리 소재\n✔ 데일리룩부터 가벼운 외출까지 활용도 UP\n✔ 깔끔한 나이키 로고 포인트로 부담 없이 코디\n\n지마켓 AI라이브에서 만나보세요 🖤\n\n*생성형 AI를 활용하여 제작된 영상으로, 실제와 차이가 있을 수 있습니다.\t* 한가위빅세일 12% 쿠폰+카드할인10%\n최대 할인 혜택가!\n30,900원 -> 24,810원\n\n0. S~XL 다양한 사이즈 구성으로 취향에 맞게 선택\n1. 나이키 대표 데일리 기본템\n2. 부드럽고 편안한 프렌치테리 소재\n3. 깔끔한 라운드넥 디자인\n4. 나이키 스우시 로고 포인트\thttps://drive.google.com/drive/folders/1Egr9qJurH0wLL5kAdnbQMneLWKKOKMzd\t채린\nhttps://gdimg.gmarket.co.kr/4438469916/still/800?ver=178779\n\"나이키 엔에스더블유 클럽 프렌치테리 맨투맨을 오늘 라이브에서 이만 사천팔백십원에 구매하실 수 있습니다. 나이키 병행 수입 정품으로 준비된 상품이라 소재부터 디테일까지 믿고 선택하실 수 있어요. 색상은 블랙, 그레이, 카키, 베이지, 그린, 블루까지 총 여섯 가지로 준비되어 있어서 원하는 톤으로 골라보실 수 있어요. 무난한 다크 컬러부터 포인트가 되는 컬러까지 폭넓게 갖춰져 있습니다. 어떤 색상이 마음에 드시는지 소재와 함께 하나씩 살펴보세요.\n\n환절기에는 가볍게 걸치면서도 포근함을 챙길 수 있는 맨투맨 하나가 꼭 필요합니다. 이 맨투맨은 프렌치테리 소재로 만들어져 안쪽에 기모가 들어가 있어서 포근하게 입으실 수 있어요. 신축성과 두께감, 비침 모두 중간 정도로 설계되어서 어느 계절에나 부담 없이 걸치기 좋습니다. 너무 얇지도 두껍지도 않은 두께라 실내에서도, 가벼운 외투 안에 받쳐 입을 때도 편하게 활용할 수 있어요. 디자인적으로는 가슴 왼쪽에 나이키 스우시 로고가 자수로 장식되어 있어서 심플하면서도 브랜드 특유의 포인트를 살려줍니다. 목 부분은 깔끔한 라운드넥으로 마무리되어 있어서 캐주얼한 룩에 자연스럽게 녹아드는 디자인이에요. 소재의 편안함과 깔끔한 라운드넥, 은은한 로고 포인트까지 더해지면서 전체적으로 정돈된 느낌을 줍니다.\n\n나이키 엔에스더블유 클럽 프렌치테리 맨투맨은 정상가 삼만 구백원입니다. 오늘 라이브에서 할인율 이십 퍼센트가 적용되어 이만 사천팔백십원까지 가격이 내려갑니다. 이런 할인율은 흔치 않습니다. 지금이 가장 좋은 조건으로 구매할 수 있는 타이밍이에요.\n\n카키 컬러를 선택하실 때 해당 컬러의 원단 특성 한가지를 확인해두시면 좋습니다. 카키 컬러는 금색 잡사가 섞여있는 원단으로 제작됩니다. 이 금색 잡사는 불량이 아니라 정상적인 제품 특성이에요. 원단 특유의 자연스러운 색감 차이라고 이해하시면 됩니다. 사이즈는 에스부터 엑스라지까지 다양하게 준비되어 있어서 본인 체형이나 즐겨 입는 핏에 맞게 선택하실 수 있어요. 여유 있게 입고 싶으시다면 한 사이즈 크게, 슬림하게 입고 싶으시다면 평소 사이즈로 선택하시면 됩니다.\n\n편하게 걸치기만 해도 완성되는 옷이라서 데일리룩으로 활용하기 좋아요. 청바지나 편한 팬츠에 매치하면 주말 나들이나 가벼운 외출 룩이 완성됩니다. 특별히 신경 쓰지 않아도 캐주얼한 분위기를 만들어주기 때문에 등하교 길이나 카페를 갈 때, 가까운 산책에도 무리 없이 소화할 수 있어요. 위에 아우터를 걸치거나 아래에 트레이닝 팬츠를 매치하는 식으로 계절과 상황에 맞춰 다양하게 응용할 수 있습니다. 가슴에 자리한 스우시 로고는 화려하지 않으면서도 브랜드 특유의 분위기를 살려줘서 과하지 않은 포인트가 됩니다. 로고 하나로 심심할 수 있는 맨투맨에 힘을 실어주면서도 코디 전체를 부담스럽게 만들지 않아요.\n\n나이키 엔에스더블유 클럽 프렌치테리 맨투맨, 부드러운 소재와 깔끔한 디자인으로 데일리로 편하게 입기 좋은 맨투맨입니다. 정상가 삼만 구백원에서 최종 할인가는 이만 사천팔백십원입니다.\n\n여섯 가지 컬러와 에스부터 엑스라지까지 사이즈 구성도 폭넓게 준비되어 있으니, 오늘 라이브에서 가장 좋은 조건으로 만나보실 수 있습니다.\"\n\n배너 규격 한번 더 상하 여백 체크 잘해주고, End to End로 진행해줘",
  "input": {
    "sheet_no": 45,
    "product_url": "https://item.gmarket.co.kr/Item?goodsCode=4438469916",
    "product_name": "나이키 NSW 클럽 프렌치테리 맨투맨 BV2666",
    "brand_name": "나이키",
    "on_card_name": "🍁 가을 특가 라이브! 나이키 데일리 맨투맨",
    "live_title": "🍁 가을 특가 라이브! 나이키 데일리 맨투맨",
    "live_intro": "매일 편하게 입기 좋은 나이키 맨투맨,\n클럽 프렌치테리로 데일리룩을 완성해보세요!\n\n✔ 나이키 NSW 클럽 프렌치테리 맨투맨\n✔ 부드럽고 편안한 프렌치테리 소재\n✔ 데일리룩부터 가벼운 외출까지 활용도 UP\n✔ 깔끔한 나이키 로고 포인트로 부담 없이 코디\n\n지마켓 AI라이브에서 만나보세요 🖤\n\n*생성형 AI를 활용하여 제작된 영상으로, 실제와 차이가 있을 수 있습니다.",
    "highlights": [
      "* 한가위빅세일 12% 쿠폰+카드할인10%",
      "최대 할인 혜택가!",
      "30,900원 -> 24,810원",
      "0. S~XL 다양한 사이즈 구성으로 취향에 맞게 선택",
      "1. 나이키 대표 데일리 기본템",
      "2. 부드럽고 편안한 프렌치테리 소재",
      "3. 깔끔한 라운드넥 디자인",
      "4. 나이키 스우시 로고 포인트"
    ],
    "product_image_urls": [
      "https://gdimg.gmarket.co.kr/4438469916/still/800?ver=178779"
    ],
    "host_image_url": "https://d3hevm4kz2l106.cloudfront.net/ai-showhost/common/avatar/AVATAR_CHAERIN/thumbnail.png",
    "vo_language": "ko",
    "script": {
      "segments": [
        "나이키 엔에스더블유 클럽 프렌치테리 맨투맨을 오늘 라이브에서 이만 사천팔백십원에 구매하실 수 있습니다. 나이키 병행 수입 정품으로 준비된 상품이라 소재부터 디테일까지 믿고 선택하실 수 있어요. 색상은 블랙, 그레이, 카키, 베이지, 그린, 블루까지 총 여섯 가지로 준비되어 있어서 원하는 톤으로 골라보실 수 있어요. 무난한 다크 컬러부터 포인트가 되는 컬러까지 폭넓게 갖춰져 있습니다. 어떤 색상이 마음에 드시는지 소재와 함께 하나씩 살펴보세요.\n\n환절기에는 가볍게 걸치면서도 포근함을 챙길 수 있는 맨투맨 하나가 꼭 필요합니다. 이 맨투맨은 프렌치테리 소재로 만들어져 안쪽에 기모가 들어가 있어서 포근하게 입으실 수 있어요. 신축성과 두께감, 비침 모두 중간 정도로 설계되어서 어느 계절에나 부담 없이 걸치기 좋습니다. 너무 얇지도 두껍지도 않은 두께라 실내에서도, 가벼운 외투 안에 받쳐 입을 때도 편하게 활용할 수 있어요. 디자인적으로는 가슴 왼쪽에 나이키 스우시 로고가 자수로 장식되어 있어서 심플하면서도 브랜드 특유의 포인트를 살려줍니다. 목 부분은 깔끔한 라운드넥으로 마무리되어 있어서 캐주얼한 룩에 자연스럽게 녹아드는 디자인이에요. 소재의 편안함과 깔끔한 라운드넥, 은은한 로고 포인트까지 더해지면서 전체적으로 정돈된 느낌을 줍니다.\n\n나이키 엔에스더블유 클럽 프렌치테리 맨투맨은 정상가 삼만 구백원입니다. 오늘 라이브에서 할인율 이십 퍼센트가 적용되어 이만 사천팔백십원까지 가격이 내려갑니다. 이런 할인율은 흔치 않습니다. 지금이 가장 좋은 조건으로 구매할 수 있는 타이밍이에요.\n\n카키 컬러를 선택하실 때 해당 컬러의 원단 특성 한가지를 확인해두시면 좋습니다. 카키 컬러는 금색 잡사가 섞여있는 원단으로 제작됩니다. 이 금색 잡사는 불량이 아니라 정상적인 제품 특성이에요. 원단 특유의 자연스러운 색감 차이라고 이해하시면 됩니다. 사이즈는 에스부터 엑스라지까지 다양하게 준비되어 있어서 본인 체형이나 즐겨 입는 핏에 맞게 선택하실 수 있어요. 여유 있게 입고 싶으시다면 한 사이즈 크게, 슬림하게 입고 싶으시다면 평소 사이즈로 선택하시면 됩니다.\n\n편하게 걸치기만 해도 완성되는 옷이라서 데일리룩으로 활용하기 좋아요. 청바지나 편한 팬츠에 매치하면 주말 나들이나 가벼운 외출 룩이 완성됩니다. 특별히 신경 쓰지 않아도 캐주얼한 분위기를 만들어주기 때문에 등하교 길이나 카페를 갈 때, 가까운 산책에도 무리 없이 소화할 수 있어요. 위에 아우터를 걸치거나 아래에 트레이닝 팬츠를 매치하는 식으로 계절과 상황에 맞춰 다양하게 응용할 수 있습니다. 가슴에 자리한 스우시 로고는 화려하지 않으면서도 브랜드 특유의 분위기를 살려줘서 과하지 않은 포인트가 됩니다. 로고 하나로 심심할 수 있는 맨투맨에 힘을 실어주면서도 코디 전체를 부담스럽게 만들지 않아요.\n\n나이키 엔에스더블유 클럽 프렌치테리 맨투맨, 부드러운 소재와 깔끔한 디자인으로 데일리로 편하게 입기 좋은 맨투맨입니다. 정상가 삼만 구백원에서 최종 할인가는 이만 사천팔백십원입니다.\n\n여섯 가지 컬러와 에스부터 엑스라지까지 사이즈 구성도 폭넓게 준비되어 있으니, 오늘 라이브에서 가장 좋은 조건으로 만나보실 수 있습니다."
      ]
    },
    "price": {
      "currency": "KRW",
      "list": 30900,
      "sale": 24810,
      "discount_label": "20%"
    }
  },
  "output_schema": {
    "name": "mobidoo/live-commerce/desk-iamdry/v1",
    "strict": false,
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "full_video"
      ],
      "properties": {
        "full_video": {
          "$ref": "SumeMediaFile#"
        }
      }
    }
  },
  "primary_output_key": "full_video",
  "generation_spend_cap_usd": 120,
  "communication": {
    "mode": "webhook",
    "webhook_url": "https://example.com/hooks/format-run"
  }
}
```

### What each key is doing

| Key | Notes |
| --- | --- |
| `instruction` | Prose plus the raw sheet row. The tab-separated block is the sheet line as copied; the quoted block is the full approved VO. Nothing is pre-parsed — the Format reads it. |
| `input` | The same row again as structured JSON, so your backend does not depend on the Format re-parsing the TSV. `script.segments` carries the VO as **one long block**, not per-cut objects. |
| `output_schema` | `mobidoo/live-commerce/desk-iamdry/v1`, `strict: false`, required `full_video` only (`SumeMediaFile#`). A batch that only publishes the assembled cut should not ask for clip arrays it will not read. |
| `primary_output_key` | `"full_video"`. |
| `generation_spend_cap_usd` | `120` per item — the ceiling for that one child run, not for the queue. Twenty items can spend twenty caps. |
| `communication` | Per-item terminal webhook. Published here as `https://example.com/hooks/format-run`; point it at your own endpoint. |

`desk-iamdry/v1` is a per-request schema name, not a new partner contract.
Binding it changes what that run returns; it does not rebase
`mobidoo/live-commerce/v1`.

Both `instruction` and `input` restate the row on purpose. `instruction` is
guidance, `input` is data — see
[what is carried](/formats/call#what-is-accepted-and-what-is-carried), and
mind the size limits in
[Size: two limits](/enterprise/mobidoo/live-commerce#size-two-limits-and-only-one-of-them-tells-you):
`input` is rejected above 8 192 UTF-8 bytes, and each field is carried into
the run at about 4 000 characters, silently.

## After the 202

- **The queue has no webhook.** `communication.webhook_url` is per item; there
  is no queue-level callback. Poll `status_url`
  (`GET /v1/format-run-queues/{queue_id}`) for progress.
- **Queue `completed` is not “all succeeded.”** It means every item is
  terminal. Branch on `counts.failed` and `counts.canceled`.
- **Read failures on the child.** Take `items[i].run_id` and
  `GET /v1/format-runs/{run_id}` — the queue item only carries a coarse
  `format_run_failed`.
- Each child is an ordinary Format run, so a weak row can be repaired on its
  own thread with `previous_run_id` — but only when the body binds the clip
  schema. With `full_video` only there are no scene ids to name.

## Next

- [Bulk runs](/formats/bulk-runs) — platform queue contract, polling, errors
- [Live Commerce API](/enterprise/mobidoo/live-commerce) — single run, clip
  schema, clip retry
- [Best practices](/enterprise/mobidoo/best-practices) — create → receipt →
  clip-retry on one thread
- [Structured output](/formats/structured-output) — schema binding rules
