Find out where an invoice stands

Finds a supplier invoice and says where it stands: approval, payment and accounting export, with the expected approver.

CFOControllerAP Manager⚡ DailyBeginnerRead-only

Ask it like this

Where does the May invoice from Accenture stand?

When to use it

When a supplier or a colleague asks you where an invoice stands.

What it produces

An invoice summary with its three states, key dates and one sentence on what is blocking or left to do.

How it works

  1. 1Finds the invoice by its number or supplier
  2. 2Says whether it is approved, and if not who holds it
  3. 3Says whether it is paid, in part or in full
  4. 4Says whether it is exported to accounting
  5. 5Sums up in one sentence what is blocking or left to do

What protects you

  • This skill only reads: it changes nothing in Spendesk
  • It acts with your permissions and your role, never beyond
  • The assistant cannot approve or pay
▸Technical detail77/100 · 3 tools
ReconciliationERP exportReportsget_invoicesget_invoice_by_idget_users

# Where does this invoice stand?

## Purpose

Answer "where is the invoice from this supplier?" by reading an invoice's three states, which move **independently** of one another:

| State | Field | Values |
|-------|-------|--------|
| Approval | `approvalStatus` | `pending`, `approved`, `rejected` |
| Payment | `paymentStatus` | `unpaid`, `partiallyPaid`, `paid` |
| Accounting export | `exportStatus` | read on the invoice detail |

An invoice can be approved and unpaid, or paid and not yet exported. Do not present these states as a single line of steps.

The skill only reads: the assistant cannot approve, pay or schedule a payment.

## Step 1 — Find the invoice

By invoice number (exact, case-insensitive search):

```json
{ "tool": "get_invoices", "params": { "invoiceNumber": "INV-2026-7734" } }
```

By supplier name or free text:

```json
{ "tool": "get_invoices", "params": { "search": "Accenture", "sortBy": "issueDate" } }
```

- Invoices **waiting for approval are visible** here, unlike in `get_payables`, which only holds an invoice once it is approved.
- Draft and incomplete invoices are never listed. If the invoice cannot be found, it may still be in the invoice inbox: see the dedicated skill (`get_intakes`).
- Credit notes need a separate call with `type: "creditNote"`.
- If several invoices match, list them and ask which one.

## Step 2 — Read the detail

```json
{ "tool": "get_invoice_by_id", "params": { "id": "<invoice id>" } }
```

- **Approval**: `approval.steps`; the step whose `state` is `current` holds the expected approvers (IDs to resolve with `get_users`). `rejected` also covers expired or cancelled invoices.
- **Payment**: `payments`, `amountPaid`, `amountDue`. This tool recomputes payment from recorded payments: it is authoritative, and can differ from the step 1 list.
- **Export**: `exportStatus` and `exportedAt`.
- **Other**: `dueDate`, `purchaseOrders`, `buyer`, `dispute`, `attachments`.

## Step 3 — Overview (when the question is general)

To count without paging:

```json
{ "tool": "get_invoices_summary", "params": { "approvalStatus": ["approved"], "paymentStatus": ["unpaid", "partiallyPaid"] } }
```

Gives the count and amount per currency of approved, unpaid invoices. In this summary, `amountDue` is always 0: do not quote it. Replace the filters with `approvalStatus: ["pending"]` for invoices waiting for approval.

## Standard answer

```
Invoice <no.> — <supplier> — <amount>
Issued on <date>, due on <date>

Approval: approved / pending with <name> / rejected
Payment : unpaid / part-paid (X of Y) / paid on <date>
Export  : exported on <date> / not yet exported

<One plain sentence: what is blocking, or what is left to do>
```

Flag a due date that has passed. Amounts stay in the invoice's own currency.

## Limits to state

- No planned payment date: the MCP does not read scheduled payments for a given invoice.
- The assistant cannot approve, pay or chase by itself.
- A credit note always shows "unpaid": it is not an amount owed.

## Observed result (demo account, 5 October 2026)

22 approved, unpaid invoices in three currencies (15 in EUR, 4 in GBP, 3 in USD), and 2 waiting for approval. On one of the latter (USD 19,513.20), the current approval step expected two approvers.

## Example prompts
- "Where does the May invoice from Accenture stand?"
- "Which invoices are approved and waiting for payment?"
- "Has invoice INV-2026-7734 been paid and exported?"

How to install this skill

/
  1. 1
    Download the file s63-invoice-payment-status.md using the button above.
  2. 2
    Place the file in the .claude/ directory of your project (or ~/.claude/ for a global install).
    cp s63-invoice-payment-status.md .claude/s63-invoice-payment-status.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_invoices, get_invoice_by_id, get_users.

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?