Subscription cards linked to supplier

Lists virtual subscription-type cards and identifies the associated supplier for each. Complements SaaS subscription analysis for card-based rather than invoice-based payments.

↓ Download skill (.md)
82/100Β·πŸ“† MonthlyΒ·IntermediateCFOProcurementFinance Analyst
CardsSupplierslist_cardsget_card

🎯 Skill purpose

Lists virtual subscription-type cards and identifies the associated supplier for each. Complements SaaS subscription analysis for card-based rather than invoice-based payments.

πŸ“Š What it produces

Subscription cards with resolved supplier name, authorized amount, and card status.

⚑ Benefit

Before

Card-supplier linkage impossible to establish from the card list without this technique.

After

Complete subscription card ↔ supplier mapping, ideal for SaaS audits.



# Subscription cards and supplier link

## Context

`list_cards(type="subscription")` already returns every card field: id, type, status, owner `{id, label}`, availableBalance, spendingLimit, expiryDate, subscriptionBudget, recurrence, plus supplier, costCenter and request as `{id, label}` objects.

`get_card(cardId)` returns exactly the same fields as `list_cards` (same server-side mapping). The supplier and cost center are `{id, label}` objects:
- `supplier`: `{id, label}` of the supplier linked to the card (can be null) β€” display `supplier.label`
- `costCenter`: `{id, label}` of the card's cost center (can be null) β€” display `costCenter.label`

The supplier of a subscription card is already in `list_cards` (`supplier.label`, with `supplier.id`): there is no need to call `get_card` card by card.

## 3-step workflow

### Step 1 β€” List active subscription cards

```json
{
  "tool": "list_cards",
  "params": {
    "companyId": "<companyId>",
    "type": "subscription",
    "status": "ACT",
    "pageSize": 50
  }
}
```

Result: list of cards with `id`, `owner` (`{id, label}`), `availableBalance`, `expiryDate`, `supplier`, `costCenter`, `subscriptionBudget`.

**Format note:** `availableBalance` is a standard money object `{ amount, currency, precision, formatted }`: `amount` is an integer coefficient (9138 for 91.38 EUR). Display `formatted` verbatim, as with all other MCP tools.

### Step 2 β€” Get the detail of each card (supplierId)

For each cardId of interest:
```json
{
  "tool": "get_card",
  "params": {
    "companyId": "<companyId>",
    "cardId": "<cardId>"
  }
}
```

Fields useful for the supplier link (identical in `list_cards` and `get_card`):
- `supplier`: `{ id, label }` | null
- `costCenter`: `{ id, label }` | null

### Step 3 β€” Resolve the supplier name (if supplierId is not null)

```json
{
  "tool": "get_supplier_by_id",
  "params": {
    "companyId": "<companyId>",
    "id": "<supplier.id>"
  }
}
```

## Case supplierId = null

On this test account, the 2 active subscription cards had no linked supplier or cost center (`supplier: null`, `costCenter: null`). This case is common: subscription cards can be created without a supplier explicitly linked in Spendesk.

Behavior to anticipate:
- `supplier: null` β†’ no linked supplier, OR the linked-request lookup failed (if `request` is also null, say the supplier is unavailable rather than asserting the card has none)
- `costCenter: null` β†’ no linked cost center, OR the linked-request lookup failed (same rule as for `supplier`)

## Differences list_cards vs get_card

| Field | list_cards | get_card |
|-------|-----------|---------|
| `id` | βœ… | βœ… |
| `type` | βœ… | βœ… |
| `status` | βœ… | βœ… |
| `owner` (`{id, label}`) | βœ… | βœ… |
| `availableBalance` | βœ… | βœ… |
| `spendingLimit` | βœ… | βœ… |
| `lastFourDigits` | βœ… | βœ… |
| `expiryDate` | βœ… | βœ… |
| `supplier` (`{id, label}`) | βœ… | βœ… |
| `costCenter` (`{id, label}`) | βœ… | βœ… |

## Important reminders

- `list_cards.status` = plain string ("ACT") β€” one call per status (no array)
- `spendingLimit: null` means no monthly budget is configured β€” it does not mean the card is unlimited; for a subscription card, read the budget from `subscriptionBudget`
- `availableBalance` is a standard money object (integer coefficient + `precision` + `formatted`): display `formatted`
- To audit all active cards including "reactivated" ones: two separate calls with `status="ACT"` and `status="REA"`

## Example user prompts

- "Which subscription cards are active and what supplier are they linked to?"
- "Show me all SaaS virtual cards with their available balance and associated supplier"
- "Are there any subscription cards without a linked supplier in Spendesk?"

How to install this skill

/
  1. 1
    Download the file s31-cartes-subscription-fournisseur.md using the button above.
  2. 2
    Place the file in the .claude/ directory of your project (or ~/.claude/ for a global install).
    cp s31-cartes-subscription-fournisseur.md .claude/s31-cartes-subscription-fournisseur.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 list_cards, get_card.

Similar skills

β˜… Top
95/100Β·πŸ” Ad hocΒ·Expert

Audit what the MCP covers

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

Interested in AI Agent services or Custom Integrations?