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

# Create and apply credit memos

This guide walks through issuing a Credit Memo and applying it to reduce an open invoice balance using the Tabs API.
Credit memos reduce the amount a customer owes without collecting cash.
Use them to correct a billing error, apply a post-invoice discount, or extend a goodwill credit.

By the end of this guide, you have a credit memo applied to an open invoice with the balance updated in Tabs and synced to your connected ERP.

## Before you begin

You need:

* At least one invoice in the `SENT` or `PARTIALLY_PAID` status with a balance to reduce
* The ID of the invoice line item you're crediting, or an Item configured in Tabs to use as the credit memo line.

## Step 1: Find the invoice line item to credit

If the credit memo is correcting or adjusting a specific line on an existing invoice, retrieve the invoice to get the line item ID. You'll use it when creating the credit memo in Step 2.

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

Tabs returns the Invoice object. Locate the line item to credit in the `lineItems` array and save its `id` as `{lineItemId}`:

```json
{
  "payload": {
    "id": "inv_ghi012",
    "status": "SENT",
    "total": 12500.00,
    "balanceRemaining": 12500.00,
    "lineItems": [
      {
        "id": "li_xyz789",
        "name": "Professional Services — May 2026",
        "quantity": 1,
        "unitPrice": 12500.00,
        "total": 12500.00
      }
    ]
  },
  "success": true,
  "message": "Invoice retrieved successfully",
  "error": null
}
```

If the credit is not tied to a specific invoice line—for example, a goodwill credit or a standalone adjustment—skip this step and use an Item ID instead. See Issue a standalone credit below.

## Step 2: Create the Credit Memo

Create a Credit Memo for the customer with one or more line items describing the credit.

```bash
curl -X POST "https://integrators.prod.api.tabsplatform.com/v3/credit-memos" \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "{customerId}",
    "issueDate": "2026-05-25",
    "reason": "Billing correction for May services",
    "items": [
      {
        "invoiceLineItemId": "{lineItemId}",
        "quantity": 1,
        "amount": 2500.00
      }
    ]
  }'
```

Tabs returns the created Credit Memo:

```json
{
  "creditMemoId": "cm_abc456",
  "creditMemoNumber": "CM-0042",
  "creditMemoPrefix": "CM",
  "customerId": "{customerId}",
  "manufacturerId": "mfr_xyz789",
  "customer": {
    "id": "{customerId}",
    "name": "Acme Corp",
    "nameWithPrefix": "CUST-001 Acme Corp"
  },
  "issueDate": "2026-05-25T00:00:00.000Z",
  "total": 2500.00,
  "reason": "Billing correction for May services",
  "memo": null,
  "status": "OPEN",
  "items": [
    {
      "id": "cmi_def789",
      "name": "Professional Services — May 2026",
      "quantity": 1,
      "amount": 2500.00,
      "salesTaxAmount": 0.00
    }
  ],
  "applications": [],
  "externalIds": [],
  "createdAt": "2026-05-25T14:30:00.000Z",
  "lastUpdatedAt": "2026-05-25T14:30:00.000Z",
  "syncStatus": "NOT_SYNCED"
}
```

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

Tabs creates the credit memo in your connected ERP automatically. The `syncStatus` field reflects the ERP sync state: `NOT_SYNCED` while the credit memo is pending, `SYNCED` once it's written.

## Step 3: Apply the credit memo to an invoice

Apply the credit memo to the open invoice to reduce its balance. Pass the invoice ID and the amount to apply. This API call returns an empty payload, but Step 4 describes how to check the updated invoice balance after the credit is applied.

```bash
curl -X POST "https://integrators.prod.api.tabsplatform.com/v3/credit-memos/{creditMemoId}/applications" \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "invoiceId": "{invoiceId}",
    "amount": 2500.00
  }'
```

Tabs reduces the invoice's `balanceRemaining` by the applied amount and updates its status:

| Balance after application             | Invoice status  |
| :------------------------------------ | :-------------- |
| Zero (credit covers the full balance) | DONE            |
| Greater than zero (partial credit)    | PARTIALLY\_PAID |

Some ERPs may not allow partial applications of credit memos due to restrictions on their API. Look out for an error message from the ERP if this occurs.

The applied amount cannot exceed the invoice's `balanceRemaining` or the Credit Memo's remaining balance. Tabs returns a validation error if either limit is exceeded.

## Step 4: Verify the invoice balance

Retrieve the invoice to confirm the updated balance and status:

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

Tabs returns the invoice with the updated fields:

```json
{
  "payload": {
    "id": "inv_ghi012",
    "status": "PARTIALLY_PAID",
    "total": 12500.00,
    "balanceRemaining": 10000.00,
    "paidOn": null
  },
  "success": true,
  "message": "Invoice retrieved successfully",
  "error": null
}
```

If the credit fully covers the balance, the status is `DONE` and `paidOn` is set to the date the balance reached zero.

## Issue a standalone credit

If the credit is not tied to a specific invoice line item—for example, a goodwill credit or a fee waiver—use an Item ID instead of `invoiceLineItemId`. Items are configured in the Tabs app and map credits to the correct ERP account.

Look up your available items:

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

Then create the credit memo using `itemId`:

```bash
curl -X POST "https://integrators.prod.api.tabsplatform.com/v3/credit-memos" \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "{customerId}",
    "issueDate": "2026-05-25",
    "reason": "Goodwill credit",
    "items": [
      {
        "itemId": "{itemId}",
        "quantity": 1,
        "amount": 500.00
      }
    ]
  }'
```

Apply the credit memo to an invoice using the same `POST /v3/credit-memos/{creditMemoId}/applications` call from Step 3.

## Apply a credit memo across multiple invoices

A single credit memo can be applied to more than one invoice. After the first application, check the credit memo's remaining balance and apply the remainder to another invoice as needed. To check the `balanceRemaining`, post a GET request to return the applications. Then use the sum of the applications to determine the credit memo's remaining balance.

Retrieve the credit memo to see how much is left to apply:

```bash
curl "https://integrators.prod.api.tabsplatform.com/v3/credit-memos/{creditMemoId}" \
  -H "Authorization: YOUR_API_KEY"
```

The `applications` array shows all prior applications and their amounts. Apply the remaining balance to another invoice:

```bash
curl -X POST "https://integrators.prod.api.tabsplatform.com/v3/credit-memos/{creditMemoId}/applications" \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "invoiceId": "{secondInvoiceId}",
    "amount": 1500.00
  }'
```

Repeat until the credit memo reaches the `APPLIED` status, at which point its full balance has been allocated.

Credit memo status updates automatically as you apply it: `OPEN` (unapplied) → `PARTIALLY_APPLIED` (some balance used) → `APPLIED` (fully used).

## List credit memos

To retrieve all credit memos for a customer or filter by status:

```bash
# Credit memos for a specific customer
curl "https://integrators.prod.api.tabsplatform.com/v3/credit-memos?filter=customerId:eq:{customerId}&page=1&limit=50" \
  -H "Authorization: YOUR_API_KEY"

# Open credit memos only
curl "https://integrators.prod.api.tabsplatform.com/v3/credit-memos?filter=status:eq:OPEN&page=1&limit=50" \
  -H "Authorization: YOUR_API_KEY"

# Credit memos issued on or after a date
curl "https://integrators.prod.api.tabsplatform.com/v3/credit-memos?filter=issueDateFrom:gte:2026-01-01&page=1&limit=50" \
  -H "Authorization: YOUR_API_KEY"
```

Supported filter fields: `customerId`, `status`, `creditMemoNumber`, `issueDateFrom`, `issueDateTo`, `lastUpdatedAt`.

## Next steps

* [Mark invoices as paid](/collect-payments/mark-invoices)
* [Match payments](/collect-payments/match-payments)
* [Review outstanding collections](/collect-payments/collections)