@productmaker/mcp 11.8.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +115 -66
- package/dist/http.js +3836 -3708
- package/dist/stdio.js +3839 -3711
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -136,72 +136,72 @@ not the product Task API. Follow its `nextAction` (`create_service_landing` with
|
|
|
136
136
|
`action: "status"` and `servicePageId`) to inspect it. The web opens that row in
|
|
137
137
|
its service-page editor, including its generation progress.
|
|
138
138
|
|
|
139
|
-
| Tool | What it does
|
|
140
|
-
| ------------------------------- |
|
|
141
|
-
| `cost_product` | Estimate a safe Colombia/COP selling price for free, then reuse its `price` and `compareAtPrice` in `create_product_task`
|
|
142
|
-
| `create_product_task` | Full pipeline from a product image (extract → angles → video → landing → image creatives)
|
|
143
|
-
| `get_task_status` | Check task progress (optional `waitSeconds` for near-sync polling)
|
|
144
|
-
| `list_tasks` | List recent tasks
|
|
145
|
-
| `edit_task_draft` | Edit angle / pain point / persona before generation
|
|
146
|
-
| `create_service_video` | **Hidden from the MCP since 9.0.0** (owner decision 2026-10-08, still on WhatsApp): use `create_animated_video` for a service video.
|
|
147
|
-
| `create_brand` | Service journey, step 1. Brand analysis of a **service business or personal brand** from its Instagram (`@handle` works), Facebook, TikTok or website — never for dropshipping products. `action=start` without `confirmed` only prices it; with `confirmed=true` it starts (`businessNotes` = what the user told about prices, WhatsApp or area, sent as a text document). Poll `action=status` with `brandId` until `ready` (analysis summary) or `failed` (plain reason). `action=list` reuses an existing brand. An exact complete-input retry keeps its canonical request key: pending outcomes pin it for up to 24 hours; a valid receipt retains it for 15 minutes from the first receipt. Changed URL, language or business notes are a different confirmed request. Recent URL matches are quote hints only. The bounded process cache does not survive restart.
|
|
148
|
-
| `create_service_landing` | Service
|
|
149
|
-
| `create_service_images` | Service journey, images. Ad images for a **service business** from
|
|
150
|
-
| `create_animated_video` |
|
|
151
|
-
| `generate_video_creative` | Standalone UGC video creative
|
|
152
|
-
| `generate_free_video` | One free-form video from an exact prompt/script, optionally with a reference image (async: returns a `taskId`)
|
|
153
|
-
| `generate_image_creatives` | Standalone image creatives (multiple variants)
|
|
154
|
-
| `edit_image_creative` | Fix ONE already-generated image of a creatives task (pick it with `variantIndex`, describe the change in `instruction`) without regenerating the whole set. **Paid action** — charges a single image; requires the task to be `done`
|
|
155
|
-
| `generate_landing` | Standalone landing page
|
|
156
|
-
| `get_video_script` | Read the pending video script when a task was created with script review paused (returns scenes + per-scene word limits)
|
|
157
|
-
| `approve_video_script` | Approve the video script (with optional per-scene edits); render starts and consumes credits
|
|
158
|
-
| `regenerate_video_script` | Re-roll the pending video script (optionally with a different narrative style)
|
|
159
|
-
| `resolve_pending_action` | Resolve a gate the pipeline is waiting on (product-reference confirmation or angle-review approval) when `get_task_status` returns `pendingUserAction`
|
|
160
|
-
| `estimate_creative_variant` | Free estimate of the credit range for an extra video / image / landing section inside an existing task. Call this first
|
|
161
|
-
| `estimate_market_study_cost` | Free quote of the same video / combined task WITHOUT and WITH the market study. The study is off unless the user accepts it; call this before asking and show both totals
|
|
162
|
-
| `create_creative_variant` | Create that extra creative in an existing task. **Paid action** — requires `confirm: true` plus an idempotent `clientRequestId`
|
|
163
|
-
| `list_shopify_shops` | List connected Shopify stores
|
|
164
|
-
| `list_shopify_products` | Search products in a connected Shopify store before choosing `targetProductId` for `publish_to_shopify`
|
|
165
|
-
| `list_meta_ad_accounts` | List connected Meta ad accounts
|
|
166
|
-
| `list_meta_destinations` | List Meta Business portfolios, ad accounts per portfolio, and Facebook Pages; use the returned IDs to choose the exact publication destination
|
|
167
|
-
| `request_media_upload` | Open the consumer-neutral inline file picker for ProductMaker tasks, image/video creatives, landings, and Meta; supports image, video, or mixed sessions, ChatGPT file references, an explicit OK chat handoff, and `/upload-media` only as fallback
|
|
168
|
-
| `check_media_upload` | Return verified owner-scoped opaque asset IDs and media kinds from a universal upload session; no bytes, token, file name, or private URL reaches the model
|
|
169
|
-
| `list_tiktok_advertisers` | List connected TikTok Ads advertiser accounts
|
|
170
|
-
| `publish_to_shopify` | Publish a completed task to Shopify; preserves existing calls and returns typed recovery when seller input is required. Optional `commerceCorrection` requires explicit `confirmed: true`. Success includes landing + product URLs.
|
|
171
|
-
| `verify_landing_commerce` | Free readback of a saved landing edit after manual Shopify/COD corrections; preserves pending provider notices and never changes money, inventory or SKU. Requires the existing taskId and editId and the editor’s current access permissions.
|
|
172
|
-
| `publish_to_meta` | Create a Meta Ads campaign from a task (always PAUSED) after selecting exact `portfolioId`, `adAccountId`, and `pageId` with `list_meta_destinations`
|
|
173
|
-
| `publish_creatives_to_meta` | Group task creatives or user media into ONE paused Meta campaign; user media is staged on ProductMaker's CDN and removed after successful publication or TTL expiry
|
|
174
|
-
| `publish_to_tiktok` | Create a TikTok Ads campaign from a task (always created PAUSED). Same `angleIndexes` + `campaignConfig` shape as Meta
|
|
175
|
-
| `get_meta_campaign_status` | Read-only status + lifetime insights (spend/impressions/clicks/reach) of a Meta campaign
|
|
176
|
-
| `get_tiktok_campaign_status` | Read-only status + lifetime report of a TikTok campaign (requires `advertiserId`)
|
|
177
|
-
| `find_winning_products` | Research winning dropshipping products for a country/category with AI-explained reasons, risks, and real Meta Ads evidence. **Costs 2000 credits per run** — requires explicit user confirmation (`confirmed: true`) before charging. Covers CO, MX, PE, EC, CL
|
|
178
|
-
| `get_product_research_run` | Read the full report (score, verdict, confidence, reasons, risks, ad evidence) of a research run by `runId`. Free
|
|
179
|
-
| `list_product_research_runs` | List the user's past research runs, most recent first. Free
|
|
180
|
-
| `start_dropshipping_project` | Start or resume a guided dropshipping project. Idempotent, costs no credits
|
|
181
|
-
| `cost_dropshipping_project` | Save the project's costing inputs (the backend recomputes the canonical result and owns versioning)
|
|
182
|
-
| `guide_dropshipping_launch` | Read-only launch guidance: the project's phase and the single computed `nextAction`. Never activates Meta
|
|
183
|
-
| `list_actors` | List the user's saved personajes (AI-generated people who can star in videos and images). Returns the `id` to pass as `actorId`. Read-only, free
|
|
184
|
-
| `get_daily_control` | Read-only daily profitability traffic-light per product (light + verdict). Never pauses/activates ad campaigns. Optional `projectId` narrows the report to one project. A product with `status !== "ok"` has no metrics — including `no_campaign_linked` (no campaign tied to the project, so there is no spend and no cost per sale). Days marked `returnedSource: "estimated"` are not measured; `cancelledSource: "shopify_settling"` is measured but not yet closed
|
|
185
|
-
| `link_campaign_to_project` | Link an ad campaign the user launched outside ProductMaker to a project, so its spend feeds `get_daily_control`. Only associates an identifier — never creates/pauses/activates a real campaign. For Meta the ad account is derived server-side, not taken from the input
|
|
186
|
-
| `report_daily_returns` | Report how many orders of a product were returned on a given day — the one signal ProductMaker cannot see on its own
|
|
187
|
-
| `sync_shopify_orders` | Pull the store's orders into the ledger as a FOURTH source. It does not replace the provider's report: the store cannot know whether a cash-on-delivery order arrived, so its orders stay in transit unless the money is already collected. Where the provider covered that product on that day, the provider wins. Without dates, from the 1st of the month to today
|
|
188
|
-
| `import_orders_file` | Read the provider's spreadsheet from an ABSOLUTE path on the caller's machine and store its orders. **stdio only** — on the hosted server a path points at OUR disk, so it fails closed. Start with `dryRun: true` and tell the seller what it contains (how many orders, between which dates, which rows could not be read) before writing anything. No column with buyer data is ever read
|
|
189
|
-
| `create_operation` | Create the business of one country. The currency is derived from the country, never asked. Needed before anything else about the month: with no operation there is nothing for `get_finances` to assemble. Someone selling in a single country has one and never hears the word again
|
|
190
|
-
| `merge_products` | Merge two records of the same product into one. The two ids come from `get_product_control` — never invent them. The source DISAPPEARS and its orders move to the target, so confirm by NAME which one stays. It cannot be undone
|
|
191
|
-
| `get_finances` | Read-only monthly P&L: gross and delivered sales, freight, merchandise cost, gross profit, ad spend, fixed costs and NET profit **before taxes**, plus each rate against its target. Grouped on purpose: a model that needs six calls to answer "how am I doing?" assembles the picture itself between trips, and that is where it invents. `adSpendKnown: false` means ad spend could not be read and the profit is INCOMPLETE; `adSpendSource: "user"` means she corrected it by hand; `unconfirmedExpenses > 0` is inherited from last month and unreviewed. With one operation the server resolves it; with several it returns `operation_ambiguous` with the list
|
|
192
|
-
| `set_monthly_expense` | Save one FIXED cost of the month (rent, salaries, accountant). Writing the same label again REPLACES the amount — it does not add a second expense. Without fixed costs written, the month's profit always reads HIGHER than it is. Not for ad spend: that is `set_ad_spend`
|
|
193
|
-
| `set_ad_spend` | Correct by hand what was spent on ads that month. `amount: 0` ASSERTS "I did not advertise"; `null` WITHDRAWS the correction and gives the campaigns back the say. They are not the same
|
|
194
|
-
| `prepare_winning_product_image` | Prepare and show the exact photo of a user-selected winning-product candidate for free; securely stages it before the next photo choice.
|
|
195
|
-
| `get_product_control` | Read-only daily profitability verdicts and measurement status per store product. Incomplete samples or unmeasured delivered sales must remain explicit; never changes campaigns.
|
|
196
|
-
| `list_importable_products` | Read one page of store products eligible for financial control; preserve `hasNextPage` and already-imported markers.
|
|
197
|
-
| `import_product_controls` | Add selected store products to financial control. They remain `no_costing` until their real costs are saved.
|
|
198
|
-
| `set_product_costing` | Save seller-provided supplier cost, freight and estimated cancellation/return rates; store price stays canonical and missing costs cannot be invented.
|
|
199
|
-
| `report_product_counts` | Save only seller-observed daily counts as the final override. Omitted counts remain unmeasured; zero is an explicit observation.
|
|
200
|
-
| `get_actor_voice_capabilities` | Read whether custom voice cloning is enabled for an actor and which countries/presentations the draft may use. Read-only, free — call before `quote_actor_voice`
|
|
201
|
-
| `quote_actor_voice` | Quote the paid custom-voice preview for an actor from a voice `draft` (prompt, country, presentation, tone…). Read-only, free
|
|
202
|
-
| `generate_actor_voice_preview` | Start the paid contextual voice preview for a quoted draft (Gemini TTS reference → voice clone). Requires the fresh `acceptedQuoteId` and a unique `requestKey` for retry safety. Costs credits
|
|
203
|
-
| `get_actor_voice_preview` | Poll a voice preview `candidateId` until it is `ready` and returns the playable preview. Recovery can submit the first paid generation under the already accepted quote; it is idempotent
|
|
204
|
-
| `approve_actor_voice` | Bind a ready preview candidate as the actor's approved voice. Optimistic-lock: pass `expectedRevision` (candidate) and `expectedApprovedRevision` (current approved voice, or null). Videos using the actor then narrate in this voice
|
|
139
|
+
| Tool | What it does |
|
|
140
|
+
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
141
|
+
| `cost_product` | Estimate a safe Colombia/COP selling price for free, then reuse its `price` and `compareAtPrice` in `create_product_task` |
|
|
142
|
+
| `create_product_task` | Full pipeline from a product image (extract → angles → video → landing → image creatives) |
|
|
143
|
+
| `get_task_status` | Check task progress (optional `waitSeconds` for near-sync polling) |
|
|
144
|
+
| `list_tasks` | List recent tasks |
|
|
145
|
+
| `edit_task_draft` | Edit angle / pain point / persona before generation |
|
|
146
|
+
| `create_service_video` | **Hidden from the MCP since 9.0.0** (owner decision 2026-10-08, still on WhatsApp): use `create_animated_video` for a service video. |
|
|
147
|
+
| `create_brand` | Service journey, step 1. Brand analysis of a **service business or personal brand** from its Instagram (`@handle` works), Facebook, TikTok or website — never for dropshipping products. `action=start` without `confirmed` only prices it; with `confirmed=true` it starts (`businessNotes` = what the user told about prices, WhatsApp or area, sent as a text document). Poll `action=status` with `brandId` until `ready` (analysis summary) or `failed` (plain reason). `action=list` reuses an existing brand. An exact complete-input retry keeps its canonical request key: pending outcomes pin it for up to 24 hours; a valid receipt retains it for 15 minutes from the first receipt. Changed URL, language or business notes are a different confirmed request. Recent URL matches are quote hints only. The bounded process cache does not survive restart. |
|
|
148
|
+
| `create_service_landing` | Service landing from an owned Brand. Free `prepare` quotes one generation. Confirmed `build` starts `/generate` directly from Brand and retained sources; no paid fact-read checkpoint or second build. `status` uses canonical activity and reports `generated`, `generating`, or `error`. Progress remains in `/tasks` after leaving the chat. Explicit `publish` returns the public URL for `create_animated_video`. |
|
|
149
|
+
| `create_service_images` | Service journey, images. Ad images for a **service business** from an owned ready Service (`brandId` required from `create_brand`), with no product photo — never for dropshipping products (`generate_image_creatives`). Without `confirmed` it only quotes (the web form's `image-creative` estimate with `subject: "service"`); with `confirmed=true` it sends `POST /v1/creatives/images` with `serviceBrief` (optional `instruction`, AI chooses when omitted), `brandId`, `format` (4:5, 9:16, 1:1), `count` (1-3), `quality` and `language`. Follow the `taskId` with `get_task_status`. |
|
|
150
|
+
| `create_animated_video` | Create or select an owned ready Service with `create_brand`, then prepare its URL for free with `action=prepare` (default) and `brandId`; poll `status` or `cancel` using `websiteCaptureId`. Show its ready preview, format, duration, language and price range, then request explicit confirmation before `action=generate` with that capture ID, the same `brandId` and `confirmed=true`. Generation reuses the capture and may mix motion graphics with AI clips (including people speaking, in the narrator's voice) and a voice-over, up to the duration-based clip cap. Optional `hookVariants` (1-3 versions of the opening for A/B) and `music` (`false` = voices only, without added music/effects or the music fee; `true` = directed music/effects plus a clean voice-only copy for each delivered version; one shared music fee across versions). The maximum price is charged at generation; unused AI clips, an unused voice-over, unused narrator lip syncs and undelivered hook versions and undelivered music are refunded at completion, and failure refunds everything. No uploaded files on MCP. Follow the returned `taskId` with `get_task_status` for progress and MP4. A blocked page requires another public URL; never request passwords. |
|
|
151
|
+
| `generate_video_creative` | Standalone UGC video creative |
|
|
152
|
+
| `generate_free_video` | One free-form video from an exact prompt/script, optionally with a reference image (async: returns a `taskId`) |
|
|
153
|
+
| `generate_image_creatives` | Standalone image creatives (multiple variants) |
|
|
154
|
+
| `edit_image_creative` | Fix ONE already-generated image of a creatives task (pick it with `variantIndex`, describe the change in `instruction`) without regenerating the whole set. **Paid action** — charges a single image; requires the task to be `done` |
|
|
155
|
+
| `generate_landing` | Standalone landing page |
|
|
156
|
+
| `get_video_script` | Read the pending video script when a task was created with script review paused (returns scenes + per-scene word limits) |
|
|
157
|
+
| `approve_video_script` | Approve the video script (with optional per-scene edits); render starts and consumes credits |
|
|
158
|
+
| `regenerate_video_script` | Re-roll the pending video script (optionally with a different narrative style) |
|
|
159
|
+
| `resolve_pending_action` | Resolve a gate the pipeline is waiting on (product-reference confirmation or angle-review approval) when `get_task_status` returns `pendingUserAction` |
|
|
160
|
+
| `estimate_creative_variant` | Free estimate of the credit range for an extra video / image / landing section inside an existing task. Call this first |
|
|
161
|
+
| `estimate_market_study_cost` | Free quote of the same video / combined task WITHOUT and WITH the market study. The study is off unless the user accepts it; call this before asking and show both totals |
|
|
162
|
+
| `create_creative_variant` | Create that extra creative in an existing task. **Paid action** — requires `confirm: true` plus an idempotent `clientRequestId` |
|
|
163
|
+
| `list_shopify_shops` | List connected Shopify stores |
|
|
164
|
+
| `list_shopify_products` | Search products in a connected Shopify store before choosing `targetProductId` for `publish_to_shopify` |
|
|
165
|
+
| `list_meta_ad_accounts` | List connected Meta ad accounts |
|
|
166
|
+
| `list_meta_destinations` | List Meta Business portfolios, ad accounts per portfolio, and Facebook Pages; use the returned IDs to choose the exact publication destination |
|
|
167
|
+
| `request_media_upload` | Open the consumer-neutral inline file picker for ProductMaker tasks, image/video creatives, landings, and Meta; supports image, video, or mixed sessions, ChatGPT file references, an explicit OK chat handoff, and `/upload-media` only as fallback |
|
|
168
|
+
| `check_media_upload` | Return verified owner-scoped opaque asset IDs and media kinds from a universal upload session; no bytes, token, file name, or private URL reaches the model |
|
|
169
|
+
| `list_tiktok_advertisers` | List connected TikTok Ads advertiser accounts |
|
|
170
|
+
| `publish_to_shopify` | Publish a completed task to Shopify; preserves existing calls and returns typed recovery when seller input is required. Optional `commerceCorrection` requires explicit `confirmed: true`. Success includes landing + product URLs. |
|
|
171
|
+
| `verify_landing_commerce` | Free readback of a saved landing edit after manual Shopify/COD corrections; preserves pending provider notices and never changes money, inventory or SKU. Requires the existing taskId and editId and the editor’s current access permissions. |
|
|
172
|
+
| `publish_to_meta` | Create a Meta Ads campaign from a task (always PAUSED) after selecting exact `portfolioId`, `adAccountId`, and `pageId` with `list_meta_destinations` |
|
|
173
|
+
| `publish_creatives_to_meta` | Group task creatives or user media into ONE paused Meta campaign; user media is staged on ProductMaker's CDN and removed after successful publication or TTL expiry |
|
|
174
|
+
| `publish_to_tiktok` | Create a TikTok Ads campaign from a task (always created PAUSED). Same `angleIndexes` + `campaignConfig` shape as Meta |
|
|
175
|
+
| `get_meta_campaign_status` | Read-only status + lifetime insights (spend/impressions/clicks/reach) of a Meta campaign |
|
|
176
|
+
| `get_tiktok_campaign_status` | Read-only status + lifetime report of a TikTok campaign (requires `advertiserId`) |
|
|
177
|
+
| `find_winning_products` | Research winning dropshipping products for a country/category with AI-explained reasons, risks, and real Meta Ads evidence. **Costs 2000 credits per run** — requires explicit user confirmation (`confirmed: true`) before charging. Covers CO, MX, PE, EC, CL |
|
|
178
|
+
| `get_product_research_run` | Read the full report (score, verdict, confidence, reasons, risks, ad evidence) of a research run by `runId`. Free |
|
|
179
|
+
| `list_product_research_runs` | List the user's past research runs, most recent first. Free |
|
|
180
|
+
| `start_dropshipping_project` | Start or resume a guided dropshipping project. Idempotent, costs no credits |
|
|
181
|
+
| `cost_dropshipping_project` | Save the project's costing inputs (the backend recomputes the canonical result and owns versioning) |
|
|
182
|
+
| `guide_dropshipping_launch` | Read-only launch guidance: the project's phase and the single computed `nextAction`. Never activates Meta |
|
|
183
|
+
| `list_actors` | List the user's saved personajes (AI-generated people who can star in videos and images). Returns the `id` to pass as `actorId`. Read-only, free |
|
|
184
|
+
| `get_daily_control` | Read-only daily profitability traffic-light per product (light + verdict). Never pauses/activates ad campaigns. Optional `projectId` narrows the report to one project. A product with `status !== "ok"` has no metrics — including `no_campaign_linked` (no campaign tied to the project, so there is no spend and no cost per sale). Days marked `returnedSource: "estimated"` are not measured; `cancelledSource: "shopify_settling"` is measured but not yet closed |
|
|
185
|
+
| `link_campaign_to_project` | Link an ad campaign the user launched outside ProductMaker to a project, so its spend feeds `get_daily_control`. Only associates an identifier — never creates/pauses/activates a real campaign. For Meta the ad account is derived server-side, not taken from the input |
|
|
186
|
+
| `report_daily_returns` | Report how many orders of a product were returned on a given day — the one signal ProductMaker cannot see on its own |
|
|
187
|
+
| `sync_shopify_orders` | Pull the store's orders into the ledger as a FOURTH source. It does not replace the provider's report: the store cannot know whether a cash-on-delivery order arrived, so its orders stay in transit unless the money is already collected. Where the provider covered that product on that day, the provider wins. Without dates, from the 1st of the month to today |
|
|
188
|
+
| `import_orders_file` | Read the provider's spreadsheet from an ABSOLUTE path on the caller's machine and store its orders. **stdio only** — on the hosted server a path points at OUR disk, so it fails closed. Start with `dryRun: true` and tell the seller what it contains (how many orders, between which dates, which rows could not be read) before writing anything. No column with buyer data is ever read |
|
|
189
|
+
| `create_operation` | Create the business of one country. The currency is derived from the country, never asked. Needed before anything else about the month: with no operation there is nothing for `get_finances` to assemble. Someone selling in a single country has one and never hears the word again |
|
|
190
|
+
| `merge_products` | Merge two records of the same product into one. The two ids come from `get_product_control` — never invent them. The source DISAPPEARS and its orders move to the target, so confirm by NAME which one stays. It cannot be undone |
|
|
191
|
+
| `get_finances` | Read-only monthly P&L: gross and delivered sales, freight, merchandise cost, gross profit, ad spend, fixed costs and NET profit **before taxes**, plus each rate against its target. Grouped on purpose: a model that needs six calls to answer "how am I doing?" assembles the picture itself between trips, and that is where it invents. `adSpendKnown: false` means ad spend could not be read and the profit is INCOMPLETE; `adSpendSource: "user"` means she corrected it by hand; `unconfirmedExpenses > 0` is inherited from last month and unreviewed. With one operation the server resolves it; with several it returns `operation_ambiguous` with the list |
|
|
192
|
+
| `set_monthly_expense` | Save one FIXED cost of the month (rent, salaries, accountant). Writing the same label again REPLACES the amount — it does not add a second expense. Without fixed costs written, the month's profit always reads HIGHER than it is. Not for ad spend: that is `set_ad_spend` |
|
|
193
|
+
| `set_ad_spend` | Correct by hand what was spent on ads that month. `amount: 0` ASSERTS "I did not advertise"; `null` WITHDRAWS the correction and gives the campaigns back the say. They are not the same |
|
|
194
|
+
| `prepare_winning_product_image` | Prepare and show the exact photo of a user-selected winning-product candidate for free; securely stages it before the next photo choice. |
|
|
195
|
+
| `get_product_control` | Read-only daily profitability verdicts and measurement status per store product. Incomplete samples or unmeasured delivered sales must remain explicit; never changes campaigns. |
|
|
196
|
+
| `list_importable_products` | Read one page of store products eligible for financial control; preserve `hasNextPage` and already-imported markers. |
|
|
197
|
+
| `import_product_controls` | Add selected store products to financial control. They remain `no_costing` until their real costs are saved. |
|
|
198
|
+
| `set_product_costing` | Save seller-provided supplier cost, freight and estimated cancellation/return rates; store price stays canonical and missing costs cannot be invented. |
|
|
199
|
+
| `report_product_counts` | Save only seller-observed daily counts as the final override. Omitted counts remain unmeasured; zero is an explicit observation. |
|
|
200
|
+
| `get_actor_voice_capabilities` | Read whether custom voice cloning is enabled for an actor and which countries/presentations the draft may use. Read-only, free — call before `quote_actor_voice` |
|
|
201
|
+
| `quote_actor_voice` | Quote the paid custom-voice preview for an actor from a voice `draft` (prompt, country, presentation, tone…). Read-only, free |
|
|
202
|
+
| `generate_actor_voice_preview` | Start the paid contextual voice preview for a quoted draft (Gemini TTS reference → voice clone). Requires the fresh `acceptedQuoteId` and a unique `requestKey` for retry safety. Costs credits |
|
|
203
|
+
| `get_actor_voice_preview` | Poll a voice preview `candidateId` until it is `ready` and returns the playable preview. Recovery can submit the first paid generation under the already accepted quote; it is idempotent |
|
|
204
|
+
| `approve_actor_voice` | Bind a ready preview candidate as the actor's approved voice. Optimistic-lock: pass `expectedRevision` (candidate) and `expectedApprovedRevision` (current approved voice, or null). Videos using the actor then narrate in this voice |
|
|
205
205
|
|
|
206
206
|
An animated video's capture ID plus its format, duration and language identifies
|
|
207
207
|
one paid generation across retries, including after the capture expires. An optional
|
|
@@ -309,6 +309,55 @@ The `base64` field was removed. MCP JSON-RPC transports truncate large tool argu
|
|
|
309
309
|
|
|
310
310
|
## Version history
|
|
311
311
|
|
|
312
|
+
### 12.0.0 — Ready service required for new service content
|
|
313
|
+
|
|
314
|
+
- New Motion Graphics videos require an owned ready Service (`brandId`) before
|
|
315
|
+
capture admission, credit checks or Task creation. Accepted keyed replays keep
|
|
316
|
+
their original receipt even if that Service was removed later. Legacy presenter
|
|
317
|
+
admission remains unchanged.
|
|
318
|
+
- `create_animated_video` requires `brandId` for preparation and new generation; `status`
|
|
319
|
+
and `cancel` retain their capture-only access. Reuse the same Service and
|
|
320
|
+
generation identity for recovery. An already accepted historical generation without
|
|
321
|
+
Brand context replays with its original payload; canonical API admission still
|
|
322
|
+
rejects a new request without that context. The historical paid request key is preserved;
|
|
323
|
+
another explicitly confirmed video uses a fresh `generationRequestId`.
|
|
324
|
+
- `create_service_images` requires `brandId` before quoting. Instructions may be
|
|
325
|
+
omitted: AI proposes the image from the saved Service information. Confirmed
|
|
326
|
+
historical unbranded calls reach canonical replay with the original payload
|
|
327
|
+
and key, without another quote; a new unbranded call is refused before spend. Paid
|
|
328
|
+
confirmation and backend ownership checks remain authoritative.
|
|
329
|
+
- Landing preparation already requires a ready Service. Its published-page
|
|
330
|
+
handoff now carries that same `brandId` for video and image creation. Legacy
|
|
331
|
+
pages without one guide the caller to `create_brand` before creating content.
|
|
332
|
+
- Schema hashes, semantic slots, descriptions, routing guidance and the catalog
|
|
333
|
+
snapshot are synchronized. The web's document-only Service creation retains
|
|
334
|
+
its supported PDF/TXT/Markdown formats; MCP `create_brand` remains URL-only.
|
|
335
|
+
- Includes the generation status and recoverable continuations from 11.8.1:
|
|
336
|
+
service landing generation starts directly from the Brand and retained sources;
|
|
337
|
+
failed attempts preserve their receipts and require a fresh prepare and explicit
|
|
338
|
+
price confirmation for new work. Script and creative recovery retain their
|
|
339
|
+
canonical continuation and root task identities.
|
|
340
|
+
|
|
341
|
+
### 11.8.1 — Generation status and recoverable continuations
|
|
342
|
+
|
|
343
|
+
Service landings use one confirmed generation directly from Brand and sources.
|
|
344
|
+
Canonical owner-scoped creation snapshots and task activity show generation,
|
|
345
|
+
result or error. Tasks retain Generado / Generando / Error; the Brand card shows
|
|
346
|
+
Generado for a design, Generando for active work, and only Create for an empty
|
|
347
|
+
terminal attempt. The failed attempt releases its Brand binding automatically
|
|
348
|
+
while its Error, history and receipts remain available in Tasks. Free prepare
|
|
349
|
+
uses a fresh UUID and reconciles lost replies or conflicts against the Brand's
|
|
350
|
+
canonical page. Old status/build calls return Error without another quote or
|
|
351
|
+
paid restart; new work needs a fresh prepare and explicit price confirmation.
|
|
352
|
+
Failed video planning terminates script polling with an error;
|
|
353
|
+
guided angle approval hands off the actual approved angle keys. Fully configured variant creation lets the canonical API reconcile accepted
|
|
354
|
+
work before new-balance admission. A landing that needs paid section
|
|
355
|
+
classification retains its balance gate and supplies root recovery on refusal.
|
|
356
|
+
Root outputs retain child identities, states and assets after a lost reply or
|
|
357
|
+
chat restart. Uncertain failures instruct the host to inspect
|
|
358
|
+
the root task before requesting another purchase. This source version still
|
|
359
|
+
requires the normal release before it is available in production.
|
|
360
|
+
|
|
312
361
|
### 11.6.3 — Brand creation replay from complete input
|
|
313
362
|
|
|
314
363
|
`create_brand` sends the canonical owner-scoped Idempotency-Key for normalized
|