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

# Payment Webhooks

> Receive signed terminal payment events for Payment Links and Payment Intents

Payment Webhooks is the current Modulus webhook platform. It delivers signed
HTTPS events and provides management APIs for endpoints, signing secrets, event
inspection, and retriggering.

It supports Ecom Payment Links and Payment Intents.

## Event types

| Event               | Meaning                                                                                                                                               |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `payment.succeeded` | The payment completed successfully.                                                                                                                   |
| `payment.declined`  | The issuer refused the card (insufficient funds, blocked, expired). The customer can retry with a different card.                                     |
| `payment.failed`    | A system or processor error prevented completion (timeout, internal error, acquirer unavailable). Not a card problem; the customer did nothing wrong. |
| `payment.expired`   | The originating Payment Link or Payment Intent expired before payment.                                                                                |

## Integration flow

<Steps>
  <Step title="Register an endpoint">Create an HTTPS endpoint with the event types you want.</Step>
  <Step title="Store its signing secret">Retrieve the endpoint-specific `whsec_` value and keep it in a secret manager.</Step>
  <Step title="Verify every delivery">Verify the raw body and `Webhook-*` headers before parsing or processing it.</Step>
  <Step title="Persist, acknowledge, and process">Deduplicate on the event `id`, durably store it, return `2xx`, then do slow work asynchronously.</Step>
</Steps>

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/docs/webhooks/payment/quickstart">Register and verify your first endpoint.</Card>
  <Card title="Endpoint management" icon="gear" href="/docs/webhooks/payment/endpoints">Manage URLs, events, and signing secrets.</Card>
  <Card title="Events and payloads" icon="brackets-curly" href="/docs/webhooks/payment/events">Understand identifiers, statuses, and timestamps.</Card>
  <Card title="Signatures" icon="shield-check" href="/docs/webhooks/payment/signatures">Verify Standard Webhooks signatures safely.</Card>
  <Card title="Retries" icon="rotate" href="/docs/webhooks/payment/retries">Retry schedule, deduplication, and manual retriggering.</Card>
</CardGroup>

<Note>
  `SUBMITTED` means the event was accepted for delivery. It does not prove that
  every merchant endpoint returned `2xx`.
</Note>
