---
title: "Replace a plan's benefit set (ITE-653). Rows carrying an id update the existing benefit (redemption history follows it); rows without one are new; benefits missing from the input are deleted — refused once they have recorded redemptions."
method: PUT
path: "/GroupCodes/{id}/benefits"
tags: ["GroupCodes"]
---

# Replace a plan's benefit set (ITE-653). Rows carrying an id update the existing benefit (redemption history follows it); rows without one are new; benefits missing from the input are deleted — refused once they have recorded redemptions.

`PUT /GroupCodes/{id}/benefits`

## Request

- Base URL: `https://api.clinicos.vet/backend/business`
- URL: `https://api.clinicos.vet/backend/business/GroupCodes/{id}/benefits`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/docs/GroupCodes/:id/benefits/put.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `id` string, required

## Request body

- SavePlanBenefitsRequestDto
  - `benefits` SavePlanBenefitDto[]
    - `id` string, nullable
    - `serviceCatalogItemId` string, nullable
    - `serviceCategory` string, nullable
    - `inventoryItemId` string, nullable
    - `displayName` string
    - `includedQuantity` union
      - number, double
      - string, double
    - `period` string: "PlanTerm" (default) | "Monthly".
    - `rolloverEnabled` boolean
    - `rolloverExpiresAfterMonths` union
      - integer
      - string, int32

## Response `200`

OK

- PlanBenefitDto[]
  - `id` string
  - `groupCodeId` string
  - `serviceCatalogItemId` string, nullable
  - `serviceCatalogItemName` string, nullable: Resolved for display; null when the target isn't a specific service.
  - `serviceCategory` string, nullable
  - `inventoryItemId` string, nullable
  - `inventoryItemName` string, nullable: Resolved for display; null when the target isn't an inventory item.
  - `displayName` string
  - `includedQuantity` union
    - number, double
    - string, double
  - `period` string: "PlanTerm" | "Monthly".
  - `rolloverEnabled` boolean
  - `rolloverExpiresAfterMonths` union
    - integer
    - string, int32
  - `displayOrder` union
    - integer
    - string, int32

## Other responses

- `400`: Bad Request
- `404`: Not Found
- `409`: Conflict

## Changes

- **2026-09-11** `503cd0546309`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/GroupCodes/:id/benefits/put.md)

---

[API](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1.md) - [All operations](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/revisions/099cf36186e0?raw)
