## TL;DR

QuickBooks returns 'bill already paid' when you try to create a bill payment against a bill with no open balance: it was already paid, fully credited, or the payment you are creating duplicates an existing link. Before creating the payment, read the bill's balance and linked transactions; if the balance is zero, stop and reconcile instead of forcing a payment. The usual cause is a retry that already succeeded or two systems both paying the same bill. Make payment creation idempotent on your side with a dedupe key on bill id.

## The query

```text
QuickBooks "bill already paid" API error on bill payment create
```

## Use this when

- Bill payment create failing with bill already paid
- Duplicate bill payments in QuickBooks
- Reconciling bill balances before paying via API

## Not for

- Partial payments (check the remaining balance first)
- Paying bills across different QuickBooks companies (separate realms)

## Steps

1. Read the bill: balance due and linked transactions.
   Expected output: You see whether the bill is truly paid and by what.
2. If the balance is zero, do not create another payment; reconcile the existing links.
   Expected output: No duplicate payment is created.
3. If a retry caused it, confirm the original payment succeeded and mark your job complete.
   Expected output: The retry is recognized as already-done.
4. If two systems paid the same bill, void the duplicate and fix the ownership.
   Expected output: One bill, one payment, one owner.
5. Add idempotency: dedupe payment creates on bill id before calling the API.
   Expected output: Retries stop double-paying.

## Variant phrasings

### QuickBooks bill already paid API error

### bill payment create duplicate QuickBooks

### QuickBooks bill balance zero payment error

## Root cause

The error is QuickBooks protecting the ledger from double payment: a bill with no open balance cannot accept another payment without unbalancing the books. The API is telling you your state is stale, which is why reading the bill first is the fix.

## Edge cases

- Sync lag between QuickBooks and your system causes most duplicates; refresh before paying
- Credit memos linked to the bill also zero the balance; check those too

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_rwGVT-nupfpFnnWJ6q-WFQ
