> 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.

# Match payments to invoices

This guide walks through reconciling bank transactions to open invoices using Tabs cash application. Tabs reads incoming transactions from your connected bank account, uses AI to suggest matches between invoices and transactions, and writes journal entries to your ERP when a match is confirmed.

By the end of this guide, your AR team can clear open invoices from bank transactions without leaving Tabs or touching the ERP directly.

## Before you begin

You need:

* A connected Plaid bank account. If you haven't set this up yet, see Set up Plaid or upload a CSV of recent bank transactions
* At least one Invoice in the SENT or PENDING status with a remaining balance
* ERP accounts mapped to your bank accounts in Settings → Integrations → Plaid

## Step 1: Open the bank transactions view

In the Tabs app, go to Data → Transactions. This view shows all transactions synced from your connected bank accounts that haven't been matched or excluded yet.

Each transaction displays:

| Field             | Description                                                            |
| :---------------- | :--------------------------------------------------------------------- |
| Description       | The bank transaction description as provided by Plaid                  |
| Amount            | The transaction amount                                                 |
| Date              | The date the transaction posted to the bank account                    |
| Detected customer | Customer name detected by AI from the transaction description, if any  |
| Detected invoice  | Invoice number detected by AI from the transaction description, if any |
| Suggested match   | The highest-confidence invoice recommendation                          |

Transactions appear in this view within minutes of Plaid delivering a webhook. If a recent transaction is missing, check the Last synced timestamp in Settings → Integrations → Plaid.

## Step 2: Confirm a suggested match

When Tabs detects a customer name or invoice number in the transaction description, it surfaces a suggested invoice match ranked by confidence score.

To confirm a match:

1. Locate the transaction in the Transactions view.
2. Review the suggested invoice. Verify the customer name, invoice number, and amount are correct.
3. Click Confirm match.

Tabs creates a completed Payment record linked to the Invoice and sends a journal entry to your ERP. Tabs updates Invoice status automatically:

| Transaction amount vs. invoice balance | Invoice status after match                   |
| :------------------------------------- | :------------------------------------------- |
| Equal to or greater than balance       | PAID                                         |
| Less than balance                      | PARTIALLY\_PAID—remaining balance stays open |

If the transaction amount exceeds the invoice balance, Tabs applies only the amount needed to clear the Invoice. You can apply the remainder to another invoice separately.

To confirm the invoice has closed, retrieve it with the API:

```bash
curl "https://integrators.prod.api.tabsplatform.com/v3/customers/{customerId}/invoices/{invoiceId}" \
  -H "Authorization: YOUR_API_KEY"
```

Tabs returns the invoice with `status: "PAID"` and `balanceRemaining: 0`.

## Step 3: Apply a match manually

If Tabs doesn't suggest a match—or the suggestion is wrong—select the Invoice manually.

1. Click into the transaction to expand it.
2. Click Match to invoice.
3. Search for the customer or invoice number.
4. Select the Invoice and confirm.

The same Payment creation and ERP journal entry flow applies as in Step 2.

Use the search bar at the top of the Transactions view to filter transactions by description, amount, or date range. This is useful when processing a large batch at month-end.

## Step 4: Handle Stripe batch payouts

When a transaction description contains the word "Stripe", Tabs identifies it as a Stripe batch payout, splits it automatically across the individual invoices covered by that payout, and accounts for per-invoice Stripe fees separately.

No manual action is required. Review the auto-split result in the Transactions view to confirm the allocation looks correct before proceeding.

If your Stripe payout statement descriptor doesn't contain the word "Stripe", Tabs can't detect the payout automatically. The transaction appears in the open transactions view without a suggested match and must be handled manually. To fix this, update your Stripe payout statement descriptor to include "Stripe"—see [Stripe's statement descriptor docs](https://docs.stripe.com/payouts/statement-descriptors).

## Step 5: Handle partial payments and write-offs

If a bank transaction represents only a partial payment—for example, a customer paid less than the invoice total—match the transaction to the invoice as normal. Tabs applies the transaction amount to the invoice balance and marks it PARTIALLY\_PAID.

To write off the remaining balance as bad debt or a bank fee:

1. Open the invoice in the Tabs app.
2. In the Reconcile section, click Reconcile remaining balance.
3. Select the ERP account for the write-off (for example, Bad debt expense or Bank fees) and confirm.

Tabs records the write-off as a separate line in the payment activity and includes it in the ERP journal entry.

## Step 6: Exclude irrelevant transactions

Not all bank transactions correspond to Invoice payments. Exclude internal transfers, interest income, payroll debits, and similar credits to keep the open transactions view clean.

To exclude a transaction:

1. Select the transaction in the Bank transactions view.
2. Click Exclude.

Tabs marks the transaction as excluded and removes it from the open view. Excluded transactions are visible in the Closed tab if you need to review them later.

To exclude multiple transactions at once, select them with the checkbox and use the bulk Exclude action.

Excluding a transaction doesn't delete it—it changes the transaction type to EXCLUDED. If you exclude something by mistake, reopen it from the Excluded tab.

## Reverse a match

If you confirmed a match in error, you can reverse it from the invoice's payment activity.

1. Open the invoice in the Tabs app.
2. Go to Payment activity.
3. Locate the payment and click Remove.

Tabs reverses the journal entry in your ERP, reopens the invoice, and returns the bank transaction to the open transactions view.

Payments can't be removed in closed periods.

## Understand ERP sync behavior

When a match is confirmed, Tabs creates a COMPLETED payment record and immediately enqueues a SEND\_PAYMENT\_TO\_ERP workflow. This workflow writes the journal entry to your connected ERP with the following details:

* Date: the date the transaction posted to the bank account—not the date the customer paid
* ERP account: the account mapped to the bank account in Plaid settings
* Amount: the payment amount applied to the Invoice

If reconciliation is also enabled (the Reconcile option is checked at match time), Tabs additionally fires a SEND\_RECONCILIATION\_TO\_ERP workflow to mark the transaction as reconciled in the ERP.

Journal entries are dated at bank-hit date, not at the customer's payment date. This can cause timing differences for month-end close if customers pay shortly before a period boundary.

You can check whether a payment has been pushed to the ERP by retrieving it with the API:

```bash
curl "https://integrators.prod.api.tabsplatform.com/v3/customers/{customerId}/invoices/{invoiceId}/payments/{paymentId}" \
  -H "Authorization: YOUR_API_KEY"
```

## Next steps

* [Create and apply credit memos](/collect-payments/credit-memos)
* [Mark invoices as paid](/collect-payments/mark-invoices)
* [Set up Stripe](/stripe) or [Set up Plaid](/plaid)