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

# Mark invoices as paid

This guide walks through how to record payments against invoices in Tabs. Use this when a customer pays outside of a connected payment processor—for example, by check, wire transfer, or ACH initiated from the customer's bank.

If you use [Stripe](/stripe) or [Plaid](/plaid), Tabs reconciles payments automatically and you don't need to record them manually.

## Step 1: Find the invoice

Fetch the customer's invoices to confirm the invoice is in the SENT status before recording a payment against it.

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

Tabs returns a paginated list of invoices for that customer:

```json
{
  "payload": {
    "data": [
      {
        "id": "inv_ghi012",
        "customerId": "cust_abc123",
        "status": "SENT",
        "issueDate": "2025-02-01",
        "dueDate": "2025-03-03",
        "total": 5000.00,
        "balanceRemaining": 5000.00
      }
    ],
    "limit": 50,
    "totalItems": 1,
    "currentPage": 1
  },
  "success": true,
  "message": "Invoices retrieved successfully",
  "error": null
}
```

Save the invoice id—you'll use it as `{invoiceId}` in the next step.

Tabs accepts payments on invoices in the SENT or PARTIALLY\_PAID status. Invoices in any other status (for example, DRAFT or VOID) return an error.

## Step 2: Record the payment

Call the payments endpoint to record that the payment was received. Tabs records the payment for the remaining balance amount and syncs it to your connected ERP.

```bash
curl -X POST "https://integrators.prod.api.tabsplatform.com/v3/customers/{customerId}/invoices/{invoiceId}/payments" \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "receivedAt": "2025-03-01T00:00:00.000Z",
    "method": "CHECK",
    "reference": "CHK-4521"
  }'
```

```json
{}
```

Tabs marks the invoice as PAID and creates a corresponding payment record in your ERP.

## Step 3: Take additional invoice actions

Beyond recording payments, you can take other actions on invoices using the actions endpoint:

```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": "{ACTION}"
  }'
```

### Send a payment reminder

Send a reminder email to the customer's billing contact:

```json
{
  "action": "SEND_REMINDER_EMAIL",
  "sendReminderEmail": true
}
```

### Mark an invoice as sent off Tabs

Record that the invoice was sent to the customer through a channel outside of Tabs (for example, emailed manually or sent through another system):

```json
{
  "action": "MARK_INVOICE_TO_SENT_OFF_TABS",
  "markInvoiceToSentOffTabs": true
}
```

## Retrieve payments

To list all payments across customers, use the global payments endpoint:

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

Filter by invoice, customer, or status using the filter query parameter:

```bash
# Payments for a specific invoice
curl "https://integrators.prod.api.tabsplatform.com/v3/payments?filter=invoiceId:eq:{invoiceId}&page=1&limit=50" \
  -H "Authorization: YOUR_API_KEY"

# Payments received after a date
curl "https://integrators.prod.api.tabsplatform.com/v3/payments?filter=receivedAt:gte:2025-02-01T00:00:00.000Z&page=1&limit=50" \
  -H "Authorization: YOUR_API_KEY"
```

Supported filter fields: `receivedAt`, `status`, `type`, `invoiceId`, `customerId`.

## Next steps

* Set up automatic payment collection in [Stripe](/stripe) or [Plaid](/plaid)
* [Match payments to invoices](/collect-payments/match-payments)
* [Create and apply credit memos](/collect-payments/credit-memos)