---
title: "Replace a user's grants with one, in a given state"
method: POST
path: "/api/rewards/admin/qa/grants/{userId}"
tags: ["Rewards (QA)"]
---

# Replace a user's grants with one, in a given state

`POST /api/rewards/admin/qa/grants/{userId}`

## Request

- Base URL: `https://api.rewritelifestyle.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.rewritelifestyle.ai/api/rewards/admin/qa/grants/{userId}`
- Auth: HTTP bearer

## Path parameters

- `userId` number, required

## Request body

- QaSetGrantDto
  - `status` 'unresolved_pending' | 'resolved_pending' | 'expired' | 'claimed', required: unresolved_pending: waiting on the waterfall/choice pick (needs trigger_level or trigger_days). resolved_pending: a specific prize already attached, ready to claim (needs catalogue_key) — claiming it against a consent-gated entry exercises the consent flow for real. expired / claimed: terminal states, for testing history and "already claimed" copy (both need catalogue_key).
  - `trigger_level` number
  - `trigger_days` number
  - `catalogue_key` string: reward_catalogue.key — required for every status except unresolved_pending.

## Response `201`

## Changes

- **2026-09-12** `0d5ef02a4fbe`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/rewritelifestyle/apis/rewrite-lifestyle-api/changes/api/rewards/admin/qa/grants/:userId/post.md)

---

[API](https://skmtc.dev/rewritelifestyle/apis/rewrite-lifestyle-api.md) - [All operations](https://skmtc.dev/rewritelifestyle/apis/rewrite-lifestyle-api/llms.txt) - [OpenAPI document](https://skmtc.dev/rewritelifestyle/apis/rewrite-lifestyle-api/revisions/28695827f27a?raw)
