> 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/tier/update-existing-tier-list-with-conditions.md).

# Update existing tier list with conditions

Management\
\
Method allows to edit existing tier list with conditions.

````json
{"openapi":"3.0.0","info":{"title":"Open Loyalty","version":"0.0.1"},"tags":[{"name":"Tier","description":"These endpoints will allow you to easily manage tiers."}],"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"}},"tierSet":{"name":"tierSet","in":"path","description":"TierSet ID","required":true,"schema":{"type":"string","format":"uuid"}}},"schemas":{"TiersListPut":{"type":"array","items":{"required":["conditions","translations"],"properties":{"levelId":{"description":"Leave empty to add a new tier. Use existing id to update specific tier.","type":"string","format":"uuid"},"translations":{"$ref":"#/components/schemas/Translations"},"active":{"description":"Tier availability","type":"boolean"},"conditions":{"description":"Conditions are determined by the tier set configuration","type":"array","items":{"required":["conditionId","value"],"properties":{"conditionId":{"description":"Relevant conditionId from the tier set configuration","type":"string","format":"uuid"},"value":{"description":"Minimal value for the tier. Remember it must not be lower than the lower tier’s value.","type":"number","format":"float"}},"type":"object"}},"rewards":{"description":"Lifetime benefits associated with tier.","type":"array","items":{"required":["name","code"],"properties":{"rewardId":{"description":"Reward ID. Leave empty to to add a new benefit.","type":"string","format":"uuid"},"name":{"description":"Benefit name.","type":"string"},"value":{"description":"Benefit value.","type":"number","format":"float"},"code":{"description":"Benefit code.","type":"string"},"labels":{"description":"Custom attributes","type":"array","items":{"properties":{"key":{"description":"Custom attribute key","type":"string"},"value":{"description":"Custom attribute value","type":"string"}},"type":"object"}},"active":{"description":"Benefit availability","type":"boolean"},"startAt":{"description":"Benefit availability start date","type":"string","format":"date-time"},"endAt":{"description":"Benefit availability end date","type":"string","format":"date-time"}},"type":"object"}}},"type":"object","additionalProperties":false}},"Translations":{"description":"This field is used to save the name and description in the language of your choice.\nYou need to add at least one name in the default language.\n","required":["en"],"properties":{"en":{"required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"}},"type":"object","additionalProperties":false},"pl":{"required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"}},"type":"object"}},"type":"object","additionalProperties":false}},"responses":{"NoContent":{"description":"Success. No content."},"TierListBadRequest":{"description":"Bad request. Same envelope as the shared BadRequest response, with one addition specific to the tier list editor: when a tier is refused because a campaign references it, the error carries the campaigns standing in the way so the panel can link to them.\n\nFor guard refusals `path` is the id of the blocked tier — a tier removed from the submitted list has no field path to report — and `code` is a stable slug (`delete_default_tier`, `delete_tier_has_members`, `delete_tier_used_in_campaign_visibility`, `delete_tier_used_in_campaign_effect`, `deactivate_tier_used_in_campaign_visibility`, `deactivate_tier_used_in_campaign_effect`). Plain field-validation errors keep reporting a field path and carry no `campaigns`.\n\nLeaving a tier out of the submitted list deletes it, and the default tier cannot be deleted. A list that names existing tiers by `levelId` and leaves the default tier out is therefore refused with `delete_default_tier` — that list is editing the tiers that exist, so the omission is a delete. A list of nothing but new tiers is defining the set rather than editing it, and leaving the default tier out of one has always meant \"I do not manage it\": it is kept, and the request succeeds.\n","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"},"campaigns":{"description":"Campaigns blocking this tier. Present only on campaign-guard refusals. `name` falls back to the campaign id where the read model cannot resolve it, so treat it as a display label and navigate by `campaignId`.\n","type":"array","items":{"required":["campaignId","name"],"properties":{"campaignId":{"type":"string","format":"uuid"},"name":{"type":"string"}},"type":"object"}}},"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}/tierSet/{tierSet}/tiers":{"put":{"tags":["Tier"],"summary":"Update existing tier list with conditions","description":"<label style=\"background-color: #D4EDBC;padding:5px;\">Management</label><br><br>\nMethod allows to edit existing tier list with conditions.\n","operationId":"_tierPutList","parameters":[{"$ref":"#/components/parameters/storeCode"},{"$ref":"#/components/parameters/tierSet"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"required":["tiers"],"properties":{"tiers":{"$ref":"#/components/schemas/TiersListPut"}},"type":"object"}}}},"responses":{"204":{"$ref":"#/components/responses/NoContent"},"400":{"$ref":"#/components/responses/TierListBadRequest"},"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/tier/update-existing-tier-list-with-conditions.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.
