URL: /capabilities/agents/billing · Id: `page:/capabilities/agents/billing`

# Billing

> Bills every confirmed order and renewal through Stripe, retries failed cards on the dunning schedule, and sends every receipt and card note.

[Bills](https://startupbuilder.dev/business/nouns/bill) every confirmed [order](https://startupbuilder.dev/business/nouns/order) and renewal through Stripe, retries failed cards on the dunning schedule, and sends every receipt and card note.

- **File convention:** `agents/finance/billing-specialist.mdx`
- **Noun:** [`noun:role`](https://startupbuilder.dev/business/nouns/role)
- **Role:** [`role:billing-specialist`](https://startupbuilder.dev/agents/finance/billing-specialist)

```text title="Run it · Ask"
Collect Northgate’s open Invoice from its saved card, and show me the retry plan first.
```

```ts title="Run it · SDK"
import { $ } from 'startup-builder'

const result = await $.try.Invoice.collect({ invoice: 'invoices/northgate-2026-11' })
```

```json title="Run it · Response"
{
  "mode": "try",
  "stored": false,
  "invoice": {
    "$id": "invoices/northgate-2026-11",
    "amount": {
      "amount": 149,
      "currency": "USD"
    },
    "status": "open",
    "retries": [
      "2026-11-17",
      "2026-11-20",
      "2026-11-24"
    ]
  }
}
```

## Responsibilities
- Bills each invoice through Stripe when an order is confirmed or a subscription renews.
- Retries failed payments on the dunning schedule, with a card-update note before each retry.
- Refunds within its limit and opens an approval for anything above it.
- Sends every receipt and invoice notice within one business day of the charge.

## Verbs
| Verb | Object | Event |
| --- | --- | --- |
| `Invoice.bill` | [`noun:invoice`](https://startupbuilder.dev/business/nouns/invoice) | `Invoice.billed` |
| `Invoice.collect` | [`noun:invoice`](https://startupbuilder.dev/business/nouns/invoice) | `Invoice.collected` |
| `Order.refund` | [`noun:order`](https://startupbuilder.dev/business/nouns/order) | `Order.refunded` |
| `Subscription.pause` | [`noun:subscription`](https://startupbuilder.dev/business/nouns/subscription) | `Subscription.paused` |
| `Subscription.resume` | [`noun:subscription`](https://startupbuilder.dev/business/nouns/subscription) | `Subscription.resumed` |
| [`Message.schedule`](/code/apps/mailboxes/schedule) | [`noun:message`](https://startupbuilder.dev/business/nouns/message) | `Message.scheduled` |

## Role contract
| Part | This seat |
| --- | --- |
| Purpose | Bill every finished piece of work, and collect every bill. |
| Results | Days sales outstanding; Failed payments recovered |
| Target | At least half of failed payments recovered within 21 days, read at 20 failures, and every invoice sent within 1 business day of the work ([Planning estimate](/strategy/numbers#assumptions)). |
| Standards | Sends every invoice within one business day of the work being done. Answers every billing question within one business day. |
| Limits | `Order.refund` up to $100 a refund ([the hub Billing Specialist’s limit](https://startupbuilder.dev/agents/finance/billing-specialist)), through Stripe |
| Schedule | Daily |
| Channels | `email` |
| Also called | Billing Manager, Collections Specialist |
| Filled by | A role agent, from the start; Stripe holds the cards and the money. |

## Hands off to
- [CSM](/capabilities/agents/csm): A subscription turns past due, or an invoice goes overdue: the save comes before any other ask.

## Processes owned
[`process:billing`](https://startupbuilder.dev/workflows/processes/billing) · [`process:plan-changes`](https://startupbuilder.dev/workflows/processes/plan-changes) · [`workflow:dunning`](https://startupbuilder.dev/workflows/processes/billing/dunning)

## Metrics
[`metric:days-sales-outstanding`](https://startupbuilder.dev/agents/finance#days-sales-outstanding)

## Approvals
You see the plan and its price before anything runs. Sends and posts go out within the limits you set; one approval rule on a class such as `send` makes every action in it wait for you, and going over a limit always asks.

| It asks you | When | Answered by |
| --- | --- | --- |
| Refund past its limit | A refund above the seat’s `Order.refund` limit | You |
| Void an invoice | Every void, after a one-business-hour delay window | You |

Each class and its default amount: the hub’s [approvals](https://startupbuilder.dev/agents/approvals) page.

## Works with
It trades hand-offs with [CSM](/capabilities/agents/csm) and [Head of customers](/capabilities/agents/head-of-customers).

## Example
Northgate Rentals’ card fails on renewal day. The agent sends a card-update note that morning, retries on day 3 as the dunning schedule says, and the charge clears before anyone has to ask twice.