---
title: "Manual redemption adjustment (ITE-661) — the staff escape hatch for the inevitable edge case (a benefit honored off-system, a refund the clinic wants to un-count, a courtesy re-grant). Positive delta records extra usage; negative delta gives allowance back. Every adjustment is a signed ledger row with a required reason and the acting user — audited, never a silent counter edit."
method: POST
path: "/Subscriptions/{id}/benefits/{benefitId}/adjust"
tags: ["Subscriptions"]
---

# Manual redemption adjustment (ITE-661) — the staff escape hatch for the inevitable edge case (a benefit honored off-system, a refund the clinic wants to un-count, a courtesy re-grant). Positive delta records extra usage; negative delta gives allowance back. Every adjustment is a signed ledger row with a required reason and the acting user — audited, never a silent counter edit.

`POST /Subscriptions/{id}/benefits/{benefitId}/adjust`

## Request

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

## Path parameters

- `id` string, required
- `benefitId` string, required

## Request body

- AdjustBenefitRedemptionDto: Manual redemption adjustment (ITE-661): staff escape hatch, audited.
  - `quantityDelta` union: Positive = record extra usage; negative = give allowance back.
    - number, double
    - string, double
  - `reason` string

## Response `200`

OK

- SubscriptionBenefitBalancesDto
  - `subscriptionId` string
  - `asOf` string, date-time
  - `balances` SubscriptionBenefitBalanceDto[]
    - `planBenefitId` string
    - `displayName` string
    - `period` string: "PlanTerm" | "Monthly".
    - `periodKey` string: The current period bucket ("term", or "month-N" from the subscription start).
    - `includedQuantity` union
      - number, double
      - string, double
    - `used` union
      - number, double
      - string, double
    - `remaining` union
      - number, double
      - string, double
  - `recentRedemptions` BenefitRedemptionDto[]: Redemption timeline, newest first (ITE-658 tracker). Capped at 25.
    - `id` string
    - `planBenefitId` string
    - `displayName` string
    - `quantity` union
      - number, double
      - string, double
    - `periodKey` string
    - `redeemedAt` string, date-time
    - `invoiceLineItemId` string, nullable
    - `reason` string, nullable: Reason on a MANUAL adjustment row (ITE-661); null for automatic redemptions.
    - `reversedAt` string, date-time, nullable: Set when the consuming invoice died (void/supersede/merge) — the row no longer counts as used.
    - `reversalReason` string, nullable

## Other responses

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

## Changes

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

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/Subscriptions/:id/benefits/:benefitId/adjust/post.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)
