---
title: "Fix: Scout Token Purchase Not Deducting Currency"
description: "Changelog for PR #90 — scout token buy flow was silently failing to deduct 200₼ due to using db_patch instead of the dedicated money endpoint."
domain: development
type: troubleshooting
tags:
  - paper-dynasty
  - discord
  - troubleshooting
  - python
---

# Fix: Scout Token Purchase Not Deducting Currency

**PR**: #90 — `fix/scout-token-deduction`
**Merged**: 2026-03-16
**File**: `discord_ui/scout_view.py`

## Bug

When a player exhausted their 2 free daily scout tokens and purchased an extra one for 200₼, the token was granted and the card was scouted, but the wallet balance was never reduced. Players could buy unlimited scout tokens for free.

## Root Cause

`BuyScoutTokenView.buy_button` used `db_patch("teams", params=[("wallet", new_wallet)])` to set the wallet directly. The Paper Dynasty API does not support mutating the `wallet` field via generic PATCH query params — the request returned 200 but silently ignored the parameter.

## Fix

Replaced with the dedicated money endpoint used by all other wallet mutations:

```python
# Before (broken — silently ignored by API)
await db_patch("teams", object_id=team["id"], params=[("wallet", new_wallet)])

# After (correct)
await db_post(f'teams/{team["id"]}/money/-{SCOUT_TOKEN_COST}')
```

Removed unused `db_patch` import from the file.

## Key Pattern: Wallet Mutations

The Paper Dynasty API requires dedicated endpoints for wallet changes. Never use `db_patch` with a `wallet` param.

| Operation | Pattern | Example |
|-----------|---------|---------|
| Add money | `db_post(f'teams/{id}/money/{amount}')` | Daily check-in (`packs.py:218`) |
| Deduct money | `db_post(f'teams/{id}/money/-{amount}')` | Card purchases (`selectors.py:372`) |
| Atomic buy | `db_get(f'teams/{id}/buy/players', params=[...])` | Marketplace (`marketplace.py:82`) |
