> ## Documentation Index
> Fetch the complete documentation index at: https://commet.co/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# payment_link.completed

> A payment link was paid successfully.

## paymentContext

The original reason for a charge and how this attempt was initiated. Recovery never replaces the original reason. Context can be null when it was not captured, including retries of historical invoices.

> [accordion] Fields and payment reasons
>
> ### `reason`
>
> `string`
>
> The original reason, preserved across payment attempts.
>
> ### `paymentLinkId`
>
> `string | null`
>
> The public payment link ID, or null when the charge did not originate from a payment link. This is independent of the reason and recovery method.
>
> ### `recovery`
>
> `object | null`
>
> Null when the charge does not recover a subscription. payment\_recovery identifies a manually recovered overdue subscription, a return after cancellation for non-payment, or a retry of a failed subscription resume. Initial checkout and one-time payment retries are not recovery. dunning\_retry identifies an automatic charge retry, not a webhook delivery retry.
>
> ### `recovery.attempt`
>
> `integer`
>
> The charge retry position in the dunning schedule, starting at 1. The original failed charge is not a retry. Present only for dunning\_retry.
>
> ### `recovery.maxAttempts`
>
> `integer`
>
> The total automatic retries applicable to this charge when the attempt began. It is not the number of retries remaining. Present only for dunning\_retry.
>
> | reason | When it applies |
> | - | - |
> | `first_subscription_payment` | The initial subscription payment. |
> | `trial_conversion` | The payment when a free trial ends. |
> | `recurring_billing` | A subscription renewal. |
> | `plan_change` | A charge caused by a plan change. |
> | `reactivation` | A charge to reactivate a canceled subscription. |
> | `subscription_resume` | A charge to resume a paused subscription. |
> | `one_time_payment` | A one-time payment, including payment links. |
> | `overage` | A charge for usage beyond the included allowance. |
> | `adjustment` | A charge from an adjustment invoice. |

## When this fires

When a customer pays a [payment link](https://commet.co/docs/accept-one-time-payments.md) on the hosted pay page and the charge settles. Commet generates a one-time invoice (`invoiceType: "one_time_payment"`) and a payment transaction at the same time; the payload carries the `invoiceId` and `paymentTransactionId`.

This is the event to fulfill the purchase on — the money has been collected.

The event fires the same way regardless of which payment provider processes the charge.


## OpenAPI

````yaml /openapi/en/webhooks/2026-08-27.json webhook payment_link.completed
openapi: 3.1.0
info:
  title: Commet Webhooks
  version: '2026-08-27'
  description: >-
    Outbound webhook events emitted by the Commet API. Each event is delivered
    as a signed POST to your configured endpoints.
servers: []
security: []
paths: {}

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.