> For the complete documentation index, see [llms.txt](https://help.openloyalty.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.openloyalty.io/api-reference/reward/bulk-change-redeemed-rewards-status.md).

# Bulk change redeemed rewards’ status

Management\
\
This method allows changing the status of multiple Reward redemptions in a single request. The body is a list of groups; each group applies its own status (and optional comment) to its own issued reward ids, so one request can set different statuses for different rewards.

Each issued reward id is processed independently and the response reports the outcome per item, so a `200` does not mean every item succeeded — the caller must read each row's `ok` field. A failure on one item never affects the others. This includes field-level problems that can be attributed to a single item: an unknown or missing status, a comment longer than 255 characters, and an id that is not a uuid are all reported as that item's failure, not as a rejection of the request. A `400` is reserved for a body that carries no item to report against — not valid JSON, not a list of groups, no groups at all, or a group with no issued reward ids — and for a total id count over the configured limit, which rejects the whole request and changes nothing.

````json
{"openapi":"3.0.0","info":{"title":"Open Loyalty","version":"0.0.1"},"tags":[{"name":"Reward","description":"These endpoints allow you to easily manage rewards."}],"servers":[{"url":"http://openloyalty.localhost"}],"security":[{"Bearer":[]},{"token":[]}],"components":{"securitySchemes":{"Bearer":{"type":"http","description":"Open Loyalty has the JWT authorization.\nTo learn what a JSON Web Token is and how it works, check out Introduction to JSON Web Tokens <https://jwt.io/introduction/>\n\n### Obtain an access token\n\nSend a request with the parameters username and password\n\n#### Definition\n\n`POST /api/admin/login_check` [Go to definition](#operation/adminLoginCheck)\\\n`POST /api/{storeCode}/member/login_check` [Go to definition](#operation/memberLoginCheck)\n\n#### Example\n\n```bash\ncurl {HOST}/api/admin/login_check\n    -H 'Content-Type: application/json;charset=UTF-8'\n    -H 'Accept: application/json, text/plain, */*'\n    --data-binary '{\"username\":\"admin\",\"password\":\"password\"}'\n```\n\n#### Example Response\n\n```json\n{\n    \"token\":\"eyJhbGciOiJSUzI1NiIsInR5cCI6...\",\n    \"refresh_token\":\"0558f8bb29948c4e54c443f...\"\n}\n```\n\n### Using JSON Web Token\n\nAdd authorization header to each request\\\n`Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6...`\\\nYou can now access any API method you want under the /api prefix.\n\n#### Example\n```bash\ncurl {HOST}/api/{storeCode}/analytics/members\n    -H 'Accept: application/json'\n    -H 'Content-type: application/x-www-form-urlencoded'\n    -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6...'\n```\n\n### Refresh JSON Web Token\nYou can refresh token using refresh_token that was given during login.\\\nThere are two endpoints\\\nTo refresh admin token `POST /api/token/refresh` [Go to definition](#operation/tokenRefresh)\\\nTo refresh member token `POST /api/{storeCode}/token/refresh` [Go to definition](#operation/tokenRefreshMember)\n","bearerFormat":"JWT","scheme":"bearer"},"token":{"type":"apiKey","name":"X-AUTH-TOKEN","in":"header"}},"parameters":{"storeCode":{"name":"storeCode","in":"path","description":"Store code","required":true,"schema":{"type":"string"}}},"schemas":{"BulkChangeIssuedRewardStatusRequestBody":{"description":"List of groups. Each group applies its `status` (and optional `comment`) to its own `issuedRewardIds`, so a single request can set different statuses for different rewards. The total number of issued reward ids across all groups must not exceed a configurable limit; exceeding it rejects the whole request with a 400.\n\nThe constraints below describe valid input. Violating one of the per-item constraints — an unknown `status`, a `comment` over 255 characters, or an `issuedRewardIds` entry that is not a uuid — is not rejected with a 400: the request is accepted and that item is reported as failed in the response.","type":"array","minItems":1,"items":{"required":["issuedRewardIds","status"],"properties":{"issuedRewardIds":{"description":"IDs of the issued rewards that should receive this group's status.","type":"array","items":{"type":"string","format":"uuid"},"minItems":1},"status":{"description":"Status to apply to every issued reward in this group.","type":"string","enum":["issued","pending","approved","packing","awaiting_shipping","shipped","returned","completed","canceled","rejected"]},"comment":{"description":"Comment related to the status change (optional).","type":"string","maxLength":255,"nullable":true}},"type":"object"}},"BulkChangeIssuedRewardStatusResponse":{"type":"array","items":{"required":["issuedRewardId","ok"],"properties":{"issuedRewardId":{"description":"ID of the issued reward this report line refers to. Rows appear in the order the ids were submitted, one row per submitted id, so a repeated id appears once per occurrence. A uuid is required here and is what every row carries, with one exception: a row rejected with `invalid_issued_reward_id` echoes the submitted value back verbatim, since that is the only way for the caller to recognise which of its inputs was rejected.","type":"string"},"ok":{"description":"Whether the status change succeeded for this issued reward.","type":"boolean"},"error":{"description":"Per-item failure reason; null (and omitted) when `ok` is true. Field-level problems that belong to one item are reported here rather than rejecting the request, so a 200 response can still contain failed rows.","type":"string","enum":["issued_reward_not_found","invalid_status","comment_too_long","invalid_issued_reward_id"],"nullable":true}},"type":"object"}}},"responses":{"BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"required":["code","message","errors"],"properties":{"code":{"type":"integer"},"message":{"type":"string"},"errors":{"type":"array","items":{"required":["message","parameters","plural","code","path"],"properties":{"message":{"type":"string"},"parameters":{},"plural":{"type":"integer","nullable":true},"code":{"type":"string"},"path":{"type":"string"}},"type":"object"}}},"type":"object"}}}},"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"}},"type":"object"}}}},"AccessDenied":{"description":"Forbidden.","content":{"application/json":{"schema":{"required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"}},"type":"object"}}}},"NotFound":{"description":"Not found.","content":{"application/json":{"schema":{"required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"}},"type":"object"}}}}}},"paths":{"/api/{storeCode}/redemption/status/bulk":{"post":{"tags":["Reward"],"summary":"Bulk change redeemed rewards’ status","description":"<label style=\"background-color: #D4EDBC;padding:5px;\">Management</label><br><br>\nThis method allows changing the status of multiple Reward redemptions in a single request. The body is a list of groups; each group applies its own status (and optional comment) to its own issued reward ids, so one request can set different statuses for different rewards.\n\nEach issued reward id is processed independently and the response reports the outcome per item, so a `200` does not mean every item succeeded — the caller must read each row's `ok` field. A failure on one item never affects the others. This includes field-level problems that can be attributed to a single item: an unknown or missing status, a comment longer than 255 characters, and an id that is not a uuid are all reported as that item's failure, not as a rejection of the request.\nA `400` is reserved for a body that carries no item to report against — not valid JSON, not a list of groups, no groups at all, or a group with no issued reward ids — and for a total id count over the configured limit, which rejects the whole request and changes nothing.\n","operationId":"redemptionPostStatusBulk","parameters":[{"$ref":"#/components/parameters/storeCode"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkChangeIssuedRewardStatusRequestBody"}}}},"responses":{"200":{"description":"Per-item report of the bulk status change.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkChangeIssuedRewardStatusResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/AccessDenied"},"404":{"$ref":"#/components/responses/NotFound"}}}}}}
````


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://help.openloyalty.io/api-reference/reward/bulk-change-redeemed-rewards-status.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
