Skills

Bill Pay

Payment lookup

ramp-payment-lookup

CLIMCP

Look up vendor bill payments and verify payment status from the terminal. Use when: 'did we pay', 'payment status', 'check if paid', 'verify payment', 'find invoice', 'bill lookup', 'was this bill paid', 'payment confirmation'. Do NOT use for: approving bills (use ramp-approval-dashboard), spend analysis across vendors (use ramp-spend-analysis), or uploading receipts (use ramp-complete-expenses).

Skill definition

SKILL.md
---
name: ramp-payment-lookup
area: Bill Pay
supported_surfaces: [cli, mcp]
description: |-
  Look up vendor bill payments and verify payment status from the terminal.
  Use when: 'did we pay', 'payment status', 'check if paid', 'verify payment',
  'find invoice', 'bill lookup', 'was this bill paid', 'payment confirmation'.
  Do NOT use for: approving bills (use ramp-approval-dashboard), spend analysis
  across vendors (use ramp-spend-analysis), or uploading receipts (use ramp-complete-expenses).
---

## Non-Negotiables

- **Pass `--rationale` on every command** — it is a required field on these agent-tools (a non-empty string, max 1024 chars). With `--json`, supply it as a `"rationale"` key in the body. Omitting it returns `HTTP 422 (DEVELOPER_INVALID_SCHEMA)`, in both agent and human modes.
- Always search bills first with `--include_drafts=false`, then enrich submitted bills with `bills get` and `bills attachments` when available.
- Report exactly what the API returns. Don't infer payment state beyond what the status says.
- When checking whether a payment went out, search with `--include_paid` to include completed bills.
- Pass `--agent` for machine-readable JSON output on all commands.
- Bill amounts in search and `get` responses are numeric major currency units (for example, dollars for USD). Never divide bill amounts by 100. Transaction amounts are formatted strings (`"$135.40"`). Reimbursement amounts are in dollars.
- Check `is_draft` on every search result. If a draft appears despite `--include_drafts=false`, use `bills draft` instead of `bills get`.
- For approval or modification history, use `bills history`; `bills get` does not include history.
- If `bills get` fails on a search-returned ID, fall back to the search results and note the limitation.

## Workflow

### Step 1: Search for the bill

```bash
ramp bills search --query "<vendor or invoice number>" --include_paid --include_drafts=false --limit 10 --agent --rationale "Search bills for the user"
```

The `--query` flag matches against payee name, invoice number, and payment ID. Partial matches work (e.g., "UPS" matches "UPS Store").

If too many results, narrow with more specific terms. If zero results, try alternate vendor name spellings.

If `next_page_cursor` is not null, paginate with `--page_cursor`:

```bash
ramp bills search --query "<vendor>" --include_paid --include_drafts=false --limit 10 \
  --page_cursor "<cursor>" --agent --rationale "Search bills for the user"
```

### Step 2: Drill into details

Check the search result's `is_draft` field. For a submitted bill (`is_draft=false`):

```bash
ramp bills get <bill_id> --agent --rationale "Review bill details"
```

This returns payment and bill metadata, but not approval history.

If a result unexpectedly has `is_draft=true`, route it to the draft command instead:

```bash
ramp bills draft --bill_id <bill_id> --agent --rationale "Review draft bill details"
```

For a draft, do not run `bills history` or `bills attachments`; both commands support submitted bills only. Drafts do not yet have submitted-bill approval history. For draft attachment requests, direct the user to the `bill_url` returned by `bills draft`, where attachments can be viewed.

Use `-n` (dry run) to preview the request without sending:

```bash
ramp bills get <bill_id> --agent -n --rationale "Review bill details"
```

### Step 3: Pull approval history for a submitted bill when requested

```bash
ramp bills history --bill_id <bill_id> --agent --rationale "Review bill approval history"
```

Use this dedicated command for approval-history or modification-history requests only when `is_draft=false`.

### Step 4: Pull the invoice attachment for a submitted bill

```bash
ramp bills attachments <bill_id> --agent --rationale "Fetch bill attachments"
```

For `is_draft=false`, this returns invoice files associated with the bill for cross-reference. For `is_draft=true`, use the `bill_url` from `bills draft` instead.

If `get` fails on a bill ID, `attachments` will likely fail too.

### Step 5: Present findings

Summarize clearly:

```
Bill found: DHL
  Invoice #: 24-165-12
  Amount: $1,287.95 USD
  Payment status: [status from API]
  Approval status: [status from API]
  Memo: Business package shipment and insurance
```

If the user wanted to confirm a payment went out, state explicitly whether the status confirms payment or not.

## Fields Available

### From `bills search`

| Field | Description |
|---|---|
| `id` | Bill UUID |
| `is_draft` | Whether the result is an unsubmitted draft; route true values to `bills draft` |
| `invoice_number` | Vendor invoice number |
| `vendor_name` | Payee name |
| `amount` | Numeric amount in major currency units; never divide by 100 |
| `currency` | Currency code |
| `due_date` | Payment due date (may be null) |
| `payment_status` | Payment state (may show "Unknown" for unpaid) |
| `approval_status` | Approval state |
| `memo` | Bill description |

### From `bills get` (when available)

Additional fields beyond search — exact schema depends on bill state. May include payment method and accounting metadata. Use `bills history` for approval history.

## Example Session

```
User: Did we pay DHL this month?

Agent: Let me check.
> ramp bills search --query "DHL" --include_paid --include_drafts=false --limit 10 --agent --rationale "Search bills for the user"

Found 1 bill:
  DHL — Invoice #24-165-12
  Amount: $1,287.95 USD
  Payment status: PAID
  Approval status: APPROVED
  Memo: Business package shipment and insurance

Let me get full details.
> ramp bills get fe8e01ce-12a4-4512-bd27-da8a7432466d --agent --rationale "Review bill details"

Bill found: DHL
  Invoice #: 24-165-12
  Amount: $1,287.95 USD
  Payment status: PAID
  Payment method: ACH
  Payment date: Mon, 14 Apr 2026
  Approval status: APPROVED

Yes, DHL was paid $1,287.95 via ACH on April 14.

User: What about PwC?

Agent: > ramp bills search --query "PwC" --include_paid --include_drafts=false --limit 10 --agent --rationale "Check whether the PwC bill has been paid"

Found 1 bill:
  PwC — Invoice #231458926-12
  Amount: $15,000.00 USD
  Payment status: OPEN
  Approval status: PENDING
  Memo: Consulting Hours

This bill hasn't been paid yet — it's still pending approval.
Want me to pull the invoice attachment?
```

## When NOT to Use

- **Approving or rejecting bills** — use `ramp-approval-dashboard`
- **Analyzing spend across multiple vendors** — use `ramp-spend-analysis`
- **Uploading receipts** — use `ramp-complete-expenses`

## Gotchas

| Issue | Fix |
|---|---|
| Bill amount looks unexpectedly large | Treat it as major currency units and report it exactly; never divide by 100 |
| Search returns a result with `is_draft=true` | Use `ramp bills draft --bill_id <bill_id>` instead of `bills get` |
| User asks who approved a bill | Use `ramp bills history --bill_id <bill_id>`; `bills get` does not include approval history |
| `payment_method` only in `bills get` | Search results don't include payment method — drill into details to find ACH vs check vs wire |
| Something broken? | With the user's consent, run `ramp feedback "<user-approved message>"`. This sends only that message to Ramp support; omit secrets and diagnostic artifacts. |