---
title: "Apply a one-click scenario preset"
method: POST
path: "/api/rewards/admin/qa/scenario/{userId}"
tags: ["Rewards (QA)"]
---

# Apply a one-click scenario preset

`POST /api/rewards/admin/qa/scenario/{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/scenario/{userId}`
- Auth: HTTP bearer

Composes the qa/* primitives — does not reset the user first, except existing_user_historical_seed, which structurally needs to. Safe to layer onto a real user's existing state: a facet-only scenario (e.g. huddle_invited) only ever touches its own facet. See GET qa/scenarios for the full list.

## Path parameters

- `userId` number, required

## Request body

- QaApplyScenarioDto
  - `scenario` 'about_to_level_up' | 'level_up_with_pending_grant' | 'streak_one_day_from_milestone' | 'streak_choice_milestone_ready' | 'consent_prize_ready' | 'grant_expired' | 'grant_already_claimed' | 'goal_near_completion' | 'huddle_invited' | 'huddle_locked_out' | 'comeback_due' | 'existing_user_historical_seed', required
  - `level` number: Used by level-related scenarios.
  - `days` number: Used by streak-related scenarios.
  - `catalogue_key` string: Used by grant/goal-related scenarios.

## Response `201`

## Changes

- **2026-10-27** `5231b7914987`: 1 info
  - added the new `comeback_due` enum value to the request property `scenario`
- **2026-09-12** `0d5ef02a4fbe`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/rewritelifestyle/apis/rewrite-lifestyle-api/changes/api/rewards/admin/qa/scenario/: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)
