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

# Get essential fields for provisioning in transaction.completed events

Completed transaction processing is more granular, with a new `paid` status for transactions and a new `transaction.paid`, event. `transaction.completed` now has all the details you need for provisioning.

---

## What's new?

We added a new `paid` value for [`transaction.status`](https://developer.paddle.com/api-reference/transactions/overview.md). It occurs when a transaction is paid, but hasn't yet been fully processed by Paddle.

- **status** (string): Status of this transaction.. Allowed values: `paid` (Transaction is fully paid, but has not yet been processed internally.)

As part of this, we added [a corresponding `transaction.paid` event](https://developer.paddle.com/webhooks/transactions/transaction-paid.md).

## How it works

When a transaction is paid successfully, it starts completed transaction processing in Paddle. This involves:

* Logging details of the successful payment against `transaction.payments[]`.
* Adding information about fees, earnings, and totals for payouts to the transaction entity.
* For automatically-collected transactions, creating a subscription for any recurring items and adding the related `subscription_id` to the transaction entity.
* For automatically-collected transactions, adding an `invoice_number` and `invoice_id` to the transaction entity.

For performance and reliability reasons, these processes happen asynchronously. This means that they don't occur at the same time that the transaction `status` is updated to `completed`, they usually happen immediately after.

The new `paid` status for transactions makes this process more granular:

* Transactions are marked as `paid` after payment is received successfully, but before transaction processing has completed.
* Transactions are marked as `completed` after transaction processing has completed.

When a transaction has the `status` of `completed`, you can be sure it won't be updated further as part of completed transaction processing.

{% callout type="info" %}
You can filter to see `paid` transactions, though transactions won't typically be `paid` for long — completed transaction processing usually takes less than a second.
{% /callout %}

### What about events?

The biggest impact is that [`transaction.completed`](https://developer.paddle.com/webhooks/transactions/transaction-completed.md) events now include everything you need for provisioning access to your app.

Previously, [`transaction.completed`](https://developer.paddle.com/webhooks/transactions/transaction-completed.md) events occurred immediately after the transaction `status` changed to `completed`. This meant that the payload didn't include `subscription_id` and `invoice_number`, since these fields are updated afterward as part of processing.

{% accordion %}
{% accordion-item title="Summary of events when a transaction is completed" %}

Here's a summary of events that occur when a transaction is completed. On the left, is the order before; on the right is the order now we've introduced [`transaction.paid`](https://developer.paddle.com/webhooks/transactions/transaction-paid.md).

1. **Payment received**  
   For automatically-collected transactions, customer completes checkout. For manually-collected transactions, payment received for the invoice.  
   * `transaction.completed`  
     The transaction status changes to `completed`.
   * `transaction.paid`  
     The transaction status changes to `paid`.
2. **Processing starts**  
   Paddle starts completed transaction processing, updating the transaction with information as it's processed. For automatically-collected transactions, Paddle adds the `subscription_id` for the newly created subscription for the recurring items on the transaction.  
   * `transaction.updated`  
     This may occur multiple times as Paddle adds information about related entities to the transaction.
   * `transaction.updated`  
     This may occur multiple times as Paddle adds information about related entities to the transaction.
3. **Processing completed**  
   Paddle has finished completed transaction processing. The transaction won't be updated further as part of completed processing.  
   * `transaction.completed`  
     The transaction status changes to `completed`.

{% /accordion-item %}
{% /accordion %}

## Next steps

This change is available in version `1` of the Paddle API.

It's a non-breaking change, meaning it doesn't impact existing integrations. [`transaction.updated`](https://developer.paddle.com/webhooks/transactions/transaction-updated.md) events still occur when Paddle processes transactions after payment, so you can still use them to listen for `subscription_id`, `invoice_number`, and other fields.

You can [create or update a notification destination](https://developer.paddle.com/webhooks/notification-destinations.md) to subscribe to events for [`transaction.paid`](https://developer.paddle.com/webhooks/transactions/transaction-paid.md).
## Summary of changes

| Name | Type | Change | Entity | Description |
| --- | --- | --- | --- | --- |
| `paid` | Enum value | added | Transaction.status | Transaction is paid but processing isn't yet complete. |
| `transaction.paid` | Webhook | added | Transactions | Occurs when a transaction is paid but processing isn't yet complete. |
