Wallet balance and card allocations

Compares wallet balance to virtual and physical card allocations. Enables partial reconciliation of funds distributed across cards.

โ†“ Download skill (.md)
81/100ยท๐Ÿ“… WeeklyยทIntermediateCFOController
CardsReconciliationget_wallet_summarylist_cards

๐ŸŽฏ Skill purpose

Compares wallet balance to virtual and physical card allocations. Enables partial reconciliation of funds distributed across cards.

๐Ÿ“Š What it produces

Wallet balance summary, amounts allocated to cards, and reconciliation gap by currency.

โšก Benefit

Before

Manual verification across multiple Spendesk screens to compare balance and allocations.

After

Consolidated wallet vs cards view in seconds, without navigating between screens.



# Instructions โ€” Wallet balance and card allocations

## โš ๏ธ Inconsistent format: list_cards.availableBalance.amount

All MCP tools use the `{ amount: int, precision }` convention where value = `amount / 10^precision`.

**Exception: `list_cards`** โ€” the `availableBalance.amount` field returns the decimal value directly:
```json
// list_cards โ€” value ALREADY in EUR:
"availableBalance": { "amount": 91.38, "currency": "EUR", "precision": 2 }
โ†’ balance = EUR 91.38 (DO NOT divide by 100)

// get_wallet_summary โ€” standard integer coefficient:
"totalAmount": { "amount": 33224769, "currency": "EUR", "precision": 2 }
โ†’ balance = 33,224,769 / 100 = EUR 332,247.69
```

โ†’ For card balances, use `availableBalance.amount` directly (no division).

## โš ๏ธ Available wallet balance can be negative

`totalAvailableAmount` can be **negative** on demo accounts or in the event of scheduled transfers exceeding the balance. This is a valid state โ€” interpret it as "allocations exceed the current balance."

## โš ๏ธ allocatedOnCards โ‰  sum of availableBalance of active cards

These two metrics measure different things:
- `allocatedOnCards.totalAllocatedAmount` = amount reserved in the wallet for cards (reserved spending limits)
- `sum(card.availableBalance)` = remaining amount cardholders can still spend

The difference = amount already spent on the cards. This is **not** an inconsistency โ€” it is expected.

## Step 1 โ€” Wallet snapshot (get_wallet_summary)

```json
{ "companyId": "..." }
```

Key fields (all in functional currency):
- `totalAmount` โ†’ gross wallet balance (integer coefficient)
- `totalAvailableAmount` โ†’ available after all allocations (can be negative)
- `totalAllocatedAmount` = `allocatedOnCards.totalAllocatedAmount` + `scheduledTransfersAmount.totalScheduledTransferAmount`
- `allocatedOnCards.subscriptionAmount` โ†’ reserved on subscription cards
- `allocatedOnCards.physicalAmount` โ†’ reserved on physical cards
- `allocatedOnCards.singlePurchaseAmount` โ†’ reserved on single-purchase cards
- `scheduledTransfersAmount.scheduledInvoicesAmount` โ†’ scheduled supplier transfers

## Step 2 โ€” Active cards (list_cards)

```json
{ "companyId": "...", "status": "ACT", "pageSize": 100 }
```

For each active card:
- `availableBalance.amount` โ†’ available balance IN EUROS DIRECTLY (no formula)
- `spendingLimit` โ†’ spending limit (can be null for subscriptions without a fixed limit)
- `type`: subscription | physical | single_purchase | multi_use
- `currency` โ†’ card currency (may differ from the functional currency)

โš ๏ธ Do not sum cards in different currencies.

## Step 3 โ€” Interpreting the results

Present as follows:

```
SPENDESK Wallet (EUR) as of 2026-07-06:
  Total balance      : EUR 332,247.69
  Available          : EUR -511,590.51  โš ๏ธ (allocations > balance)
  Allocated to cards  : EUR 491,808.95
    of which subscription : EUR 402,288.42
    of which physical     : EUR 28,872.30
    of which single-use   : EUR 4,601.63
  Scheduled transfers : EUR 352,029.25

Active cards (ACT): 2 cards
  Subscription #7071: EUR 91.38 available
  Subscription #5947: EUR 9.49 available
```

## Live example (real data)

| Metric | Value |
|----------|--------|
| Total balance | EUR 332,247.69 |
| Available | **EUR -511,590.51** (negative โ€” test) |
| Allocated to cards | EUR 491,808.95 |
| Scheduled transfers | EUR 352,029.25 |
| Active cards | 2 (subscriptions only, ~EUR 101 available) |

## Example prompt

- "What is the wallet status?" โ†’ get_wallet_summary only
- "How much is left on active cards?" โ†’ list_cards status=ACT + sum availableBalance
- "Are there any pending scheduled transfers?" โ†’ wallet_summary.scheduledTransfersAmount

How to install this skill

/
  1. 1
    Download the file s03-wallet-summary-vs-cards.md using the button above.
  2. 2
    Place the file in the .claude/ directory of your project (or ~/.claude/ for a global install).
    cp s03-wallet-summary-vs-cards.md .claude/s03-wallet-summary-vs-cards.md
  3. 3
    Use in Claude Code โ€” the skill is automatically discovered. Describe your need in natural language and Claude will apply the skill instructions.
๐Ÿ’ก Make sure the Spendesk MCP is configured in your .claude/settings.json with the tools get_wallet_summary, list_cards.

Similar skills

โ˜… Top
95/100ยท๐Ÿ” Ad hocยทExpert

MCP coverage audit & gap analysis

Probes all available MCP tools, re-evaluates coverage of 50 persona use cases, detects new fields or tools, and regenerates the gap analysis report.

CFOControllerAP Manager
90/100ยท๐Ÿ“… WeeklyยทBeginner

Card requests via get_requests

Explains how to use get_requests for card requests and why expense reimbursements don't appear there. Avoids a frequent source of confusion between two distinct workflows.

ControllerFinance Analyst
90/100ยท๐Ÿ” Ad hocยทIntermediate

Active vs archived cost centers

Distinguishes active cost centers from archived ones with correct use of get_cost_centers. Avoids the counter-intuitive isArchived vs isActive naming convention pitfall.

ControllerFinance Analyst