> For the complete documentation index, see [llms.txt](https://developer.paddle.com/llms.txt).

# Cancel an invoice

Cancel an invoice if you created it in error. Canceled invoices remain on your system for record-keeping purposes.

---

If you've created an invoice in error, you can cancel it to say that it's no longer needed.

## How it works

Invoices work using manually-collected transactions. These are transactions where the `collection_mode` is set to `manual`, which means that Paddle sends an invoice that customers must pay themselves by [bank transfer](https://developer.paddle.com/concepts/payment-methods/wire-transfer.md) or using [Paddle Checkout](https://developer.paddle.com/concepts/sell/self-serve-checkout.md).

You can change the status of a manually-collected transaction to `canceled` to mark it as canceled. When you cancel an invoice:

- It's no longer due, so customers don't need to pay it
- Links to pay the invoice using Paddle Checkout no longer work
- It doesn't count as revenue for your [reports](https://developer.paddle.com/build/finance/generate-reports.md)
- You can't uncancel it, or make any other changes to it

You can cancel manually-collected transactions that are `billed` (issued invoices) or `ready`. If a transaction is `completed`, meaning a customer has paid an invoice, you can [create an adjustment to refund](https://developer.paddle.com/build/transactions/create-transaction-adjustments.md) all or part of it instead.

### Credit an invoice

You might be able to correct some errors on an issued invoice by [creating a credit](https://developer.paddle.com/build/transactions/create-transaction-adjustments.md) rather than canceling it.

For example, if you [create and issue an invoice](https://developer.paddle.com/build/invoices/create-issue-invoices.md) then want to remove an item, you can create an adjustment for the item you want to remove. Paddle automatically applies the credit to the issued invoice, so the amount the customer owes is reduced.

When you credit the full value of a transaction, it's marked as `completed`. It's no longer due.

## Cancel an invoice

Send a `PATCH` request to the `/transactions/{transaction_id}` endpoint to update a manually-collected transaction, setting `status` to `canceled` in your request.

{% tabs sync="interaction-preference" %}
{% tab-item title="Dashboard" %}

1. Go to **Paddle > Transactions**.
2. Use the search box and the **Filter by** drop-down to find a transaction you want to cancel.
3. Click into the transaction, then click the  menu and choose Cancel transaction
4. Click Cancel transaction to confirm.

{% /tab-item %}
{% tab-item title="API" %}

Set `status` to `canceled` in your request body. You don't need to include anything else.

{% callout type="info" %}
Transactions must be manually collected and `billed` or `ready` to cancel. Use [list transactions](https://developer.paddle.com/api-reference/transactions/list-transactions.md) with `collection_mode=manual` and `status=billed,ready` to find eligible transactions.
{% /callout %}

{% api-example method="PATCH" path="/transactions/{transaction_id}" href="/api-reference/transactions/update-transaction" %}

```json
{
  "status": "canceled"
}
```

```json
{
  "data": {
    "id": "txn_01j5dx3yajy2hc1p1xz808m92j",
    "status": "canceled",
    "customer_id": "ctm_01hv6y1jedq4p1n0yqn5ba3ky4",
    "address_id": "add_01hv8gq3318ktkfengj2r75gfx",
    "business_id": null,
    "custom_data": null,
    "origin": "api",
    "collection_mode": "manual",
    "subscription_id": null,
    "invoice_id": null,
    "invoice_number": null,
    "billing_details": {
      "enable_checkout": false,
      "payment_terms": {
        "interval": "day",
        "frequency": 14
      },
      "purchase_order_number": "PO-123",
      "additional_information": null
    },
    "billing_period": {
      "starts_at": "2024-04-12T00:00:00Z",
      "ends_at": "2025-04-11T23:59:00Z"
    },
    "currency_code": "USD",
    "discount_id": null,
    "created_at": "2024-08-16T15:32:53.640052Z",
    "updated_at": "2024-08-16T15:33:11.477353084Z",
    "billed_at": null,
    "items": [
      {
        "price": {
          "id": "pri_01gsz91wy9k1yn7kx82aafwvea",
          "description": "Annual",
          "type": "standard",
          "name": "Annual (per seat)",
          "product_id": "pro_01gsz4vmqbjk3x4vvtafffd540",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "50000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 100
          },
          "status": "active",
          "created_at": "2023-02-23T13:57:54.249913Z",
          "updated_at": "2024-04-05T14:32:00.471447Z"
        },
        "quantity": 20
      },
      {
        "price": {
          "id": "pri_01gsz96z29d88jrmsf2ztbfgjg",
          "description": "Annual (recurring addon)",
          "type": "standard",
          "name": "Annual (recurring addon)",
          "product_id": "pro_01gsz92krfzy3hcx5h5rtgnfwz",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "300000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active",
          "created_at": "2023-02-23T14:00:40.265185Z",
          "updated_at": "2024-03-25T14:31:18.587603Z"
        },
        "quantity": 1
      },
      {
        "price": {
          "id": "pri_01gsz98e27ak2tyhexptwc58yk",
          "description": "One-time addon",
          "type": "standard",
          "name": "One-time addon",
          "product_id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
          "billing_cycle": null,
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "19900",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active",
          "created_at": "2023-02-23T14:01:28.391712Z",
          "updated_at": "2024-04-09T07:23:10.921392Z"
        },
        "quantity": 1
      }
    ],
    "details": {
      "tax_rates_used": [
        {
          "tax_rate": "0.08875",
          "totals": {
            "subtotal": "1319900",
            "discount": "0",
            "tax": "117141",
            "total": "1437041"
          }
        }
      ],
      "totals": {
        "subtotal": "1319900",
        "tax": "117141",
        "discount": "0",
        "total": "1437041",
        "grand_total": "1437041",
        "fee": null,
        "credit": "0",
        "credit_to_balance": "0",
        "balance": "1437041",
        "earnings": null,
        "currency_code": "USD"
      },
      "adjusted_totals": {
        "subtotal": "1319900",
        "tax": "117141",
        "total": "1437041",
        "grand_total": "1437041",
        "fee": "0",
        "earnings": "0",
        "currency_code": "USD"
      },
      "payout_totals": null,
      "adjusted_payout_totals": null,
      "line_items": [
        {
          "id": "txnitm_01j5dx3yqvsgxtvrj6f0h6jw3t",
          "price_id": "pri_01gsz91wy9k1yn7kx82aafwvea",
          "quantity": 20,
          "totals": {
            "subtotal": "1000000",
            "tax": "88750",
            "discount": "0",
            "total": "1088750"
          },
          "product": {
            "id": "pro_01gsz4vmqbjk3x4vvtafffd540",
            "name": "AeroEdit Enterprise",
            "description": "The ultimate solution for organizations, featuring all Pro capabilities plus multi-user support, advanced data storage capabilities, plus personalized onboarding, dedicated account management, and the ability to pay via invoice.",
            "type": "standard",
            "tax_category": "standard",
            "image_url": "https://paddle.s3.amazonaws.com/user/165798/Ws808ziTS76a6YbnMkiK_enterprise.png",
            "custom_data": {
              "features": {
                "aircraft_performance": true,
                "compliance_monitoring": true,
                "flight_log_management": true,
                "payment_by_invoice": true,
                "route_planning": true,
                "sso": true
              },
              "suggested_addons": [],
              "upgrade_description": "Ready to reach new heights? Upgrade to enterprise to unlock single sign-on, payment by invoice, and dedicated account management."
            },
            "status": "active",
            "created_at": "2023-02-23T12:44:34.923Z",
            "updated_at": "2024-04-05T15:58:28.309Z"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "50000",
            "tax": "4437",
            "discount": "0",
            "total": "54437"
          }
        },
        {
          "id": "txnitm_01j5dx3yqvsgxtvrj6f2zckeq1",
          "price_id": "pri_01gsz96z29d88jrmsf2ztbfgjg",
          "quantity": 1,
          "totals": {
            "subtotal": "300000",
            "tax": "26625",
            "discount": "0",
            "total": "326625"
          },
          "product": {
            "id": "pro_01gsz92krfzy3hcx5h5rtgnfwz",
            "name": "Reporting module",
            "description": "Get access to comprehensive reports and customizable analytics dashboards.",
            "type": "standard",
            "tax_category": "standard",
            "image_url": "https://paddle.s3.amazonaws.com/user/165798/qgyipKJwRtq98YNboipo_vip-support.png",
            "custom_data": null,
            "status": "active",
            "created_at": "2023-02-23T13:58:17.615Z",
            "updated_at": "2024-04-05T15:44:02.893Z"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "300000",
            "tax": "26625",
            "discount": "0",
            "total": "326625"
          }
        },
        {
          "id": "txnitm_01j5dx3yqvsgxtvrj6fa55yjdt",
          "price_id": "pri_01gsz98e27ak2tyhexptwc58yk",
          "quantity": 1,
          "totals": {
            "subtotal": "19900",
            "tax": "1766",
            "discount": "0",
            "total": "21666"
          },
          "product": {
            "id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
            "name": "Custom domains",
            "description": "Make AeroEdit truly your own with custom domains. Custom domains reinforce your brand identity and make it easy for your team to access your account.",
            "type": "standard",
            "tax_category": "standard",
            "image_url": "https://paddle.s3.amazonaws.com/user/165798/XIG7UXoJQHmlIAiKcnkA_custom-domains.png",
            "custom_data": null,
            "status": "active",
            "created_at": "2023-02-23T14:01:02.441Z",
            "updated_at": "2024-04-05T15:43:28.971Z"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "19900",
            "tax": "1766",
            "discount": "0",
            "total": "21666"
          }
        }
      ]
    },
    "payments": [],
    "checkout": {
      "url": null
    }
  },
  "meta": {
    "request_id": "5b956e6a-a1a4-4796-baf0-ba4cd13f38f6"
  }
}
```

{% /api-example %}

{% /tab-item %}
{% /tabs %}

## Cancel related subscription

Paddle automatically creates a subscription when you mark a manually-collected transaction as `billed`.

When you cancel an invoice, its related subscription isn't automatically canceled. This means the subscription remains active, so a customer may still have access to your app. Paddle reinvoices for the subscription on renewal.

### Cancel using the Paddle dashboard or API

Use the Paddle dashboard or API to [cancel the related subscription](https://developer.paddle.com/build/subscriptions/cancel-subscriptions.md) after you have canceled the transaction.

### Build a workflow using webhooks

You can build a workflow to programmatically cancel subscriptions using webhooks:

1. **Subscribe to transaction canceled events**  
   [Create or update a notification destination](https://developer.paddle.com/webhooks/notification-destinations.md), then subscribe to [`transaction.canceled`](https://developer.paddle.com/webhooks/transactions/transaction-canceled.md) events.
2. **Check that the transaction is manually collected and for a subscription**  
   In the `data` payload for received events, check that `collection_mode` is `manual` and that `subscription_id` isn't `null`. This means the transaction is an issued invoice related to a subscription.
3. **Extract subscription ID, then cancel**  
   Extract `subscription_id` from the data payload, then use the [cancel a subscription operation](https://developer.paddle.com/api-reference/subscriptions/cancel-subscription.md) to cancel.