store/bulk-update-prices changes the regular price across a set of products, either to a fixed amount or by a percentage.
It reports what it would do and changes nothing unless apply is true.
At a glance
| Ability | store/bulk-update-prices |
| Toolset | WooCommerce — toolset/woocommerce |
| Group | WooCommerce › Pricing & Sales |
| Requires | WooCommerce, active on the site |
| Capability | manage_options |
| Safety | Writes data |
| Repeatable | Not idempotent — each call changes the row set, so re-running is not a no-op |
| Ships in | AcrossAI Abilities Manager 0.0.34 and later |
There is no undo
Repricing is not reversible from here: the old prices are not archived anywhere, and the only record of them is the report this call produces. Run it without apply first and keep that output. Every row comes back with the product, its old price and its new one, which is the closest thing to an undo that exists.
Why it will not reprice the whole store
The ability requires an explicit product list or a category. There is deliberately no “everything” option, and adding one would not be a convenience — it would be a single call that can change every price in a shop on the strength of one ambiguous sentence.
A category is the widest scope available, and it is wide enough for every legitimate bulk reprice while still being something a person can picture before agreeing to it.
The dry run is the default because the report is the only record of the old prices. Every row names the product, its old price and its new one, and that output is what you would need to put things back.
Percentage mode moves each price by a proportion; fixed mode sets them all to the same amount. Both are capped per call, and a hit cap is reported rather than silently truncating the change.
Sale prices are not touched. This is the regular price only — a product on sale keeps its sale price and gets a new price to return to.
Input
| Name | Type | Required | What it is |
|---|---|---|---|
mode | string | Yes | How to apply the amount: a fixed price, or a percentage change. |
amount | string | Yes | The new price, or the percentage to move by. |
product_ids | array | One of these two | Products to change. |
category_id | integer | One of these two | Change every product in this category instead. |
apply | boolean | No — defaults to false | Make the change. Without this the call only reports what it would do. |
confirm | boolean | Yes — must be true | The irreversibility gate. Without it the call is refused before anything is touched. |
What comes back
| Name | Type | What it is |
|---|---|---|
dry_run | boolean | Whether this was a report rather than a change. |
mode | string | The mode used. |
amount | string | The amount used. |
count | integer | How many products are affected. |
changes | array | One row per product: its ID, its old price and its new price. |
note | string | Any cap warning. |
success | boolean | Whether the call completed. |
message | string | A one-line summary of what happened, suitable for showing a human. |
error_code | string | Present only on failure — a stable machine-readable reason, such as a missing field, a wrong field type or an unmet confirmation. |
Example
Ask your assistant:
Put ten per cent on everything in the accessories category.
It resolves to one call:
{
"ability": "store/bulk-update-prices",
"parameters": {
"mode": "percent",
"amount": "10",
"category_id": 44
}
}Worth knowing
- Keep the dry-run output. It is the only record of the old prices.
- A product list or a category is required — the whole store is not an option.
- Regular prices only. Sale prices are untouched.
- Capped per call; a hit cap is reported.
Related abilities
- Schedule a Sale — discount without changing the regular price
- Set Product Categories and Tags — build the category to target
Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager
Browse the rest: Every ability, by category