# `assistant_limit`

**Status 403.** An assistant's key cannot make a change this large.

## What it means

The key belongs to an AI assistant: a Claude connection, or a key the store owner made for an assistant, and the merchant has not lifted its limits (`key.limits_lifted` in [`GET /me`](https://matrixrewards.co.uk/docs/api/2026-10/account.md#getMe)). Such a key moves the store's money one step at a time, measured from the programme as it stood before the assistant's changes began, so its steps add up; that starting point holds until a day passes with no assistant change, and a change by the owner to what the programme pays starts afresh (a new label or reason does not; nor does a change by an assistant key whose limits are lifted). It never changes what a point is worth, the currency or when points expire. What an order earns can at most double: a new offer counts as paying every order, and the everyday rate, which still prices some refunds (an API refund that names no order, and an order paid before amounts were recorded), is not lowered to fund an offer (then the figures are the everyday rate's own, `least_allowed` is the least it may be for every order to earn what it did, up to the field's two decimal places — null when no rate within its own step would do — and on an offer's route no `param` is named). Any other figure that pays shoppers can at most double, one at zero stays there, and referrals that are off stay off. Spending any amount (`spend_any_amount`) that is off stays off: the key can switch it off, never on. While it is on, the fewest points one code may take and the smallest order it can be used on can at most halve, and the most points can at most double, never to no limit. An offer can only narrow who and when it pays. A reward can at most double what it gives for each point and keeps its kind, and its smallest order can at most halve; a new reward stays within one step of a reward of its kind. `problem` says which limit, and `before`, `asked` and `most_allowed` or `least_allowed` give the figure in the unit of `param`. Nothing was changed.

## What to do

Ask for a smaller step, within `most_allowed` or `least_allowed`, with a new `Idempotency-Key`. For a bigger change, the store owner makes it in the Matrix Rewards app or with a key that is not an assistant's, or lifts this key's limits on the app's API keys screen.

## Safe to send again?

Not as it is. Change what the answer points to, then send the request.

## What else the answer carries

- `param`: The field, header or query parameter at fault, when there is exactly one.
- `problem`: With `invalid_request` or `retroactive_change` from a programme change: the platform's own reason, like `campaign_starts_in_past` or `retroactive_start`. With `assistant_limit`, which limit: `point_value_locked`, `currency_locked`, `expiry_locked`, `more_than_double`, `raised_from_zero`, `earning_more_than_double`, `everyday_rate_moved`, `changes_how_it_pays`, `changes_who_it_pays`, `changes_what_it_gives`, `minimum_more_than_halved`, `new_offer_kind`, `new_reward_too_generous` or `new_reward_kind`.
- `before`: The figure at the assistant's starting point, in the unit of `param` (a rate, points, an amount, a percentage, a kind; true or false for whether referrals run).
- `asked`: What the change asked for, in the same unit.
- `most_allowed`: With `assistant_limit`, when the figure was raised: the most it may rise to. Null where no value of it would do.
- `least_allowed`: With `assistant_limit`, when a cost or a smallest order was lowered, or the everyday rate lowered while an offer rose: the least it may fall to. Null where no value of it would do.

## Where you can meet it

- [`POST /stores/{store_key}/programme`](https://matrixrewards.co.uk/docs/api/2026-10/stores.md#updateProgramme): Change the earn rate, the bonuses, what a point is worth, referrals, spending any amount, the time zone, the ways to earn, or when points expire
- [`POST /stores/{store_key}/programme/rewards`](https://matrixrewards.co.uk/docs/api/2026-10/stores.md#addReward): Add a reward shoppers can spend points on
- [`POST /stores/{store_key}/programme/rewards/{reward_id}`](https://matrixrewards.co.uk/docs/api/2026-10/stores.md#changeReward): Change a reward's cost, value, minimum order or label
- [`POST /stores/{store_key}/programme/rewards/{reward_id}/remove`](https://matrixrewards.co.uk/docs/api/2026-10/stores.md#removeReward): Remove a reward
- [`POST /stores/{store_key}/programme/offers`](https://matrixrewards.co.uk/docs/api/2026-10/stores.md#addOffer): Add an offer: a campaign, a product offer or a channel offer
- [`POST /stores/{store_key}/programme/offers/{offer_id}`](https://matrixrewards.co.uk/docs/api/2026-10/stores.md#changeOffer): Change an offer
- [`POST /stores/{store_key}/programme/offers/{offer_id}/remove`](https://matrixrewards.co.uk/docs/api/2026-10/stores.md#removeOffer): Remove an offer

Every code, and the shape of an error answer: [Errors](https://matrixrewards.co.uk/docs/errors.md).

---

Page: https://matrixrewards.co.uk/docs/errors/assistant_limit
Contract: 2026-10 sha256:35af153960028890fea5738799f5a71e535e1eea4dd3f6b8d5f50b37f02363da
