> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.tabs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.tabs.com/_mcp/server.

# Review outstanding collections

This guide walks through identifying unpaid invoices, sending payment reminders, and projecting future collections using the Tabs API.
Tabs exposes invoice status and balance data so your AR team can spot overdue accounts and act on them—without leaving the API.

By the end of this guide, you can retrieve a filtered list of open invoices, trigger payment reminders for overdue customers, and view a cash forecast across your book.

## Step 1: Fetch open invoices

Filter the invoices list by status to see all invoices with a balance outstanding. Invoices in the SENT status have been delivered to the customer and have not been paid at all. Invoices in the PARTIALLY\_PAID status have received one or more payments but still carry a remaining balance.

Fetch invoices in the SENT status:

```bash
curl "https://integrators.prod.api.tabsplatform.com/v3/invoices?filter=status:eq:SENT&page=1&limit=50" \
  -H "Authorization: YOUR_API_KEY"
```

Fetch invoices in the PARTIALLY\_PAID status:

```bash
curl "https://integrators.prod.api.tabsplatform.com/v3/invoices?filter=status:eq:PARTIALLY_PAID&page=1&limit=50" \
  -H "Authorization: YOUR_API_KEY"
```

Tabs returns a paginated list of invoices:

```json
{
  "payload": {
    "data": [
      {
        "id": "inv_ghi012",
        "customerId": "cust_abc123",
        "invoiceNumber": "INV-1042",
        "status": "SENT",
        "issueDate": "2026-04-01",
        "dueDate": "2026-05-01",
        "total": 12500.00,
        "balanceRemaining": 12500.00
      }
    ],
    "limit": 50,
    "totalItems": 1,
    "currentPage": 1
  },
  "success": true,
  "message": "Invoices retrieved successfully",
  "error": null
}
```

Key fields for collections review:

| Field            | Description                                                  |
| :--------------- | :----------------------------------------------------------- |
| balanceRemaining | The amount still owed on the invoice                         |
| dueDate          | The date payment is due                                      |
| status           | SENT (unpaid) or PARTIALLY\_PAID (partial balance remaining) |
| paidOn           | Set when the invoice is fully paid—null on open invoices     |

Use `page` and `limit` to paginate large result sets. The default page size is 50; the maximum is 500.

## Step 2: Identify overdue invoices

An invoice is overdue when its `dueDate` has passed and `balanceRemaining` is greater than zero. Filter by `dueDate` to scope the list to accounts that are past due:

```bash
curl "https://integrators.prod.api.tabsplatform.com/v3/invoices?filter=status:eq:SENT,dueDate:lte:2026-05-25&page=1&limit=50" \
  -H "Authorization: YOUR_API_KEY"
```

Replace `2026-05-25` with today's date to return all open invoices whose due date has passed.

Calculate days overdue per invoice from `dueDate` and `balanceRemaining`. There is no built-in aging bucket endpoint—both fields are present on every Invoice response.

Scope results to a single customer using a `customerId` filter:

```
filter=customerId:eq:{customerId},status:eq:SENT,dueDate:lte:2026-05-25
```

## Step 3: Send a payment reminder

Once you've identified an overdue invoice, send a reminder email to the customer's billing contact:

```bash
curl -X POST "https://integrators.prod.api.tabsplatform.com/v3/customers/{customerId}/invoices/{invoiceId}/actions" \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "SEND_REMINDER_EMAIL",
    "sendReminderEmail": true
  }'
```

Tabs emails the billing contact on the Customer record and returns the updated Invoice object.

To automate reminders based on a configurable schedule rather than triggering them manually, see Automate reminders with dunning below.

To write off an uncollectible invoice, [create and apply a credit memo](/collect-payments/credit-memos).

## Automate reminders with dunning

Tabs can send payment reminders automatically on a configurable schedule without requiring manual API calls.

Dunning schedules are configured per merchant or per customer in the Tabs app under Settings → Customers → Dunning. A schedule consists of:

* Fixed steps—reminders sent a set number of days before or after the invoice due date (for example, 7 days before, 1 day after, 14 days after)
* Recurring step—a repeating reminder that fires every N days after the last reminder, used for persistent follow-up on aging accounts

Customer-level schedules override the merchant-level default, so you can configure more aggressive or more lenient cadences for individual accounts.

Dunning pauses automatically when an invoice moves to the PENDING status—typically while awaiting bank confirmation of a Stripe payment—and stops when the invoice is marked as PAID or VOID. If a match is reversed in Plaid, dunning resumes.

## Get a cash forecast

The cash forecasting report shows due and paid amounts by period across your customer base, giving your AR team a forward view of expected collections.

```bash
curl "https://integrators.prod.api.tabsplatform.com/v3/reports/cash-forecasting" \
  -H "Authorization: YOUR_API_KEY"
```

Tabs returns a list of customers with their projected cash activity by period:

```json
{
  "payload": {
    "data": [
      {
        "customerId": "cust_abc123",
        "customerName": "Acme Corp",
        "cashForecastingPerPeriod": [
          {
            "period": "2026-05",
            "dueTotal": 12500.00,
            "paidTotal": 0.00,
            "total": 12500.00
          },
          {
            "period": "2026-06",
            "dueTotal": 8000.00,
            "paidTotal": 0.00,
            "total": 8000.00
          }
        ]
      }
    ],
    "limit": 50,
    "totalItems": 1,
    "currentPage": 1
  },
  "success": true,
  "message": "Cash forecasting report retrieved successfully",
  "error": null
}
```

| Field     | Description                             |
| :-------- | :-------------------------------------- |
| period    | Time period in YYYY-MM format           |
| dueTotal  | Total invoiced amount due in the period |
| paidTotal | Amount already collected in the period  |
| total     | Sum of dueTotal and paidTotal           |

Past-due amounts roll into the current period rather than remaining in their original period.

## Next steps

* [Mark invoices as paid](/collect-payments/mark-invoices)
* [Create and apply credit memos](/collect-payments/credit-memos)
* [Match payments](/collect-payments/match-payments)