---
updatedAt: 2026-04-21T08:31:19.000Z
agentTools:
  projectIndex: https://docs.mollie.com/llms.txt
---

# Create a webhook

A webhook must have a name, an url and a list of event types. You can also create webhooks in the webhooks settings section of the Dashboard.

> 🔑 Access with
>
> [Advanced access token with **webhooks.write**](/reference/authentication)
>
> [OAuth access with **webhooks.write**](/reference/authentication)

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Mollie Connect",
    "version": "1.0.0",
    "license": {
      "name": "Attribution-NonCommercial-ShareAlike 4.0 International",
      "identifier": "CC-BY-NC-SA-4.0"
    }
  },
  "servers": [
    {
      "url": "https://api.mollie.com"
    }
  ],
  "security": [
    {
      "apiKey": []
    },
    {
      "advancedAccessToken": []
    },
    {
      "oAuth": []
    }
  ],
  "paths": {
    "/v2/webhooks": {
      "post": {
        "summary": "Create a webhook",
        "x-speakeasy-name-override": "create",
        "tags": [
          "Webhooks API"
        ],
        "operationId": "create-webhook",
        "security": [
          {
            "advancedAccessToken": [
              "webhooks.write"
            ]
          },
          {
            "oAuth": [
              "webhooks.write"
            ]
          }
        ],
        "description": "A webhook must have a name, an url and a list of event types. You can also create webhooks in the webhooks settings section of the Dashboard.\n\n> 🔑 Access with\n>\n> [Advanced access token with **webhooks.write**](/reference/authentication)\n>\n> [OAuth access with **webhooks.write**](/reference/authentication)",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "A name that identifies the webhook.",
                    "example": "Webhook #1"
                  },
                  "url": {
                    "type": "string",
                    "description": "The URL Mollie will send the events to. This URL must be publicly accessible.",
                    "example": "https://mollie.com/"
                  },
                  "eventTypes": {
                    "oneOf": [
                      {
                        "type": "array",
                        "description": "The list of events to enable for this webhook. You may specify `'*'` to add all events, except those that require explicit selection.",
                        "items": {
                          "type": "string",
                          "description": "The list of events to enable for this webhook. You may specify `'*'` to add all events, except those that require explicit selection.\n\nPossible values: `payment.paid` `payment.authorized` `payment.failed` `payment.canceled` `payment.expired` `payment.pending` `refund.queued` `refund.pending` `refund.processing` `refund.refunded` `refund.failed` `refund.canceled` `chargeback.received` `chargeback.reversed` `capture.succeeded` `capture.failed` `payment-link.paid` `balance-transaction.created` `payout.initiated` `payout.processing-at-bank` `payout.completed` `payout.canceled` `payout.failed` `sales-invoice.created` `sales-invoice.issued` `sales-invoice.canceled` `sales-invoice.paid` `sales-invoice.e-invoice-failed` `sales-invoice.e-invoice-issued` `business-account-transfer.requested` `business-account-transfer.initiated` `business-account-transfer.pending-review` `business-account-transfer.processed` `business-account-transfer.failed` `business-account-transfer.blocked` `business-account-transfer.returned` `business-account-draft-transfer.created` `business-account-draft-transfer.approved` `business-account-draft-transfer.declined` `unmatched-credit-transfer.received` `unmatched-credit-transfer.matched` `unmatched-credit-transfer.returned` `unmatched-credit-transfer.expired` `unmatched-credit-transfer.match.completed` `unmatched-credit-transfer.match.failed` `unmatched-credit-transfer.return.completed` `unmatched-credit-transfer.return.failed` `*`",
                          "x-speakeasy-name-override": "webhook-event-types",
                          "x-enumDescriptions": {
                            "payment.paid": "A payment has been completed successfully.",
                            "payment.authorized": "A payment has been authorized and is awaiting capture.",
                            "payment.failed": "A payment attempt failed.",
                            "payment.canceled": "A payment was canceled before it could be completed.",
                            "payment.expired": "A payment expired before it was completed.",
                            "payment.pending": "A payment is awaiting confirmation from the bank.",
                            "refund.queued": "A refund has been accepted and is queued for processing.",
                            "refund.pending": "A refund is pending and awaiting bank confirmation.",
                            "refund.processing": "A refund is being processed by the bank.",
                            "refund.refunded": "A refund has been transferred to your customer.",
                            "refund.failed": "A refund could not be completed.",
                            "refund.canceled": "A refund was canceled before processing.",
                            "chargeback.received": "A chargeback has been received for a payment.",
                            "chargeback.reversed": "A previously received chargeback has been reversed.",
                            "capture.succeeded": "A capture has completed successfully.",
                            "capture.failed": "A capture attempt failed.",
                            "payment-link.paid": "Occurs when a payment link has been paid.",
                            "balance-transaction.created": "Occurs when a balance transaction is created to add to your available balance. It currently only supports positive amounts and non-captured payments.",
                            "payout.initiated": "The payout is being executed and funds are reserved on the balance.",
                            "payout.processing-at-bank": "The payout has been submitted to the bank and is being processed.",
                            "payout.completed": "The payout has been sent to the destination bank account successfully.",
                            "payout.canceled": "The payout was canceled via the API before being submitted to the bank.",
                            "payout.failed": "The payout failed after creation. This includes payouts rejected by the bank or returned after submission.\nNote that post-submission cancellations also produce this event, not `payout.canceled`.",
                            "sales-invoice.created": "Occurs when a sales invoice has been created.",
                            "sales-invoice.issued": "Occurs when a sales invoice has been issued.",
                            "sales-invoice.canceled": "Occurs when a sales invoice has been canceled.",
                            "sales-invoice.paid": "Occurs when a sales invoice has been paid.",
                            "sales-invoice.e-invoice-failed": "Occurs when a sales invoice failed to be sent as an e-invoice.",
                            "sales-invoice.e-invoice-issued": "Occurs when a sales invoice has been successfully sent as an e-invoice.",
                            "business-account-transfer.requested": "The transfer is requested and waiting for SCA (exempt for Transfers API). SEPA transfer input checks passed.",
                            "business-account-transfer.initiated": "The transfer is SCA-authorized for execution. Funds are reserved.",
                            "business-account-transfer.pending-review": "The transfer is pending manual review.",
                            "business-account-transfer.processed": "The transfer is processed.",
                            "business-account-transfer.failed": "The transfer fails to be executed.",
                            "business-account-transfer.blocked": "The transfer is blocked.",
                            "business-account-transfer.returned": "Incoming transfer when a transfer is returned.",
                            "business-account-draft-transfer.created": "The draft transfer is created and awaiting review by a human initiator in Mollie Apps.",
                            "business-account-draft-transfer.approved": "The draft transfer is approved by the initiator.",
                            "business-account-draft-transfer.declined": "The draft transfer is declined, either by the initiator, the creator, or because the debtor account was closed.",
                            "unmatched-credit-transfer.received": "An incoming credit transfer has been received and could not be automatically matched to a payment.",
                            "unmatched-credit-transfer.matched": "An unmatched credit transfer resource has transitioned to the matched state after a successful match.",
                            "unmatched-credit-transfer.returned": "An unmatched credit transfer resource has transitioned to the returned state after a successful return.",
                            "unmatched-credit-transfer.expired": "An unmatched credit transfer has expired.",
                            "unmatched-credit-transfer.match.completed": "A user-triggered match action has completed successfully.",
                            "unmatched-credit-transfer.match.failed": "A user-triggered match action has failed.",
                            "unmatched-credit-transfer.return.completed": "A user-triggered return action has completed successfully.",
                            "unmatched-credit-transfer.return.failed": "A user-triggered return action has failed.",
                            "*": "All event types."
                          },
                          "example": "payment-link.paid"
                        }
                      },
                      {
                        "type": "string",
                        "description": "The list of events to enable for this webhook. You may specify `'*'` to add all events, except those that require explicit selection.\n\nPossible values: `payment.paid` `payment.authorized` `payment.failed` `payment.canceled` `payment.expired` `payment.pending` `refund.queued` `refund.pending` `refund.processing` `refund.refunded` `refund.failed` `refund.canceled` `chargeback.received` `chargeback.reversed` `capture.succeeded` `capture.failed` `payment-link.paid` `balance-transaction.created` `payout.initiated` `payout.processing-at-bank` `payout.completed` `payout.canceled` `payout.failed` `sales-invoice.created` `sales-invoice.issued` `sales-invoice.canceled` `sales-invoice.paid` `sales-invoice.e-invoice-failed` `sales-invoice.e-invoice-issued` `business-account-transfer.requested` `business-account-transfer.initiated` `business-account-transfer.pending-review` `business-account-transfer.processed` `business-account-transfer.failed` `business-account-transfer.blocked` `business-account-transfer.returned` `business-account-draft-transfer.created` `business-account-draft-transfer.approved` `business-account-draft-transfer.declined` `unmatched-credit-transfer.received` `unmatched-credit-transfer.matched` `unmatched-credit-transfer.returned` `unmatched-credit-transfer.expired` `unmatched-credit-transfer.match.completed` `unmatched-credit-transfer.match.failed` `unmatched-credit-transfer.return.completed` `unmatched-credit-transfer.return.failed` `*`",
                        "x-speakeasy-name-override": "webhook-event-types",
                        "enum": [
                          "payment.paid",
                          "payment.authorized",
                          "payment.failed",
                          "payment.canceled",
                          "payment.expired",
                          "payment.pending",
                          "refund.queued",
                          "refund.pending",
                          "refund.processing",
                          "refund.refunded",
                          "refund.failed",
                          "refund.canceled",
                          "chargeback.received",
                          "chargeback.reversed",
                          "capture.succeeded",
                          "capture.failed",
                          "payment-link.paid",
                          "balance-transaction.created",
                          "payout.initiated",
                          "payout.processing-at-bank",
                          "payout.completed",
                          "payout.canceled",
                          "payout.failed",
                          "sales-invoice.created",
                          "sales-invoice.issued",
                          "sales-invoice.canceled",
                          "sales-invoice.paid",
                          "sales-invoice.e-invoice-failed",
                          "sales-invoice.e-invoice-issued",
                          "business-account-transfer.requested",
                          "business-account-transfer.initiated",
                          "business-account-transfer.pending-review",
                          "business-account-transfer.processed",
                          "business-account-transfer.failed",
                          "business-account-transfer.blocked",
                          "business-account-transfer.returned",
                          "business-account-draft-transfer.created",
                          "business-account-draft-transfer.approved",
                          "business-account-draft-transfer.declined",
                          "unmatched-credit-transfer.received",
                          "unmatched-credit-transfer.matched",
                          "unmatched-credit-transfer.returned",
                          "unmatched-credit-transfer.expired",
                          "unmatched-credit-transfer.match.completed",
                          "unmatched-credit-transfer.match.failed",
                          "unmatched-credit-transfer.return.completed",
                          "unmatched-credit-transfer.return.failed",
                          "*"
                        ],
                        "x-enumDescriptions": {
                          "payment.paid": "A payment has been completed successfully.",
                          "payment.authorized": "A payment has been authorized and is awaiting capture.",
                          "payment.failed": "A payment attempt failed.",
                          "payment.canceled": "A payment was canceled before it could be completed.",
                          "payment.expired": "A payment expired before it was completed.",
                          "payment.pending": "A payment is awaiting confirmation from the bank.",
                          "refund.queued": "A refund has been accepted and is queued for processing.",
                          "refund.pending": "A refund is pending and awaiting bank confirmation.",
                          "refund.processing": "A refund is being processed by the bank.",
                          "refund.refunded": "A refund has been transferred to your customer.",
                          "refund.failed": "A refund could not be completed.",
                          "refund.canceled": "A refund was canceled before processing.",
                          "chargeback.received": "A chargeback has been received for a payment.",
                          "chargeback.reversed": "A previously received chargeback has been reversed.",
                          "capture.succeeded": "A capture has completed successfully.",
                          "capture.failed": "A capture attempt failed.",
                          "payment-link.paid": "Occurs when a payment link has been paid.",
                          "balance-transaction.created": "Occurs when a balance transaction is created to add to your available balance. It currently only supports positive amounts and non-captured payments.",
                          "payout.initiated": "The payout is being executed and funds are reserved on the balance.",
                          "payout.processing-at-bank": "The payout has been submitted to the bank and is being processed.",
                          "payout.completed": "The payout has been sent to the destination bank account successfully.",
                          "payout.canceled": "The payout was canceled via the API before being submitted to the bank.",
                          "payout.failed": "The payout failed after creation. This includes payouts rejected by the bank or returned after submission.\nNote that post-submission cancellations also produce this event, not `payout.canceled`.",
                          "sales-invoice.created": "Occurs when a sales invoice has been created.",
                          "sales-invoice.issued": "Occurs when a sales invoice has been issued.",
                          "sales-invoice.canceled": "Occurs when a sales invoice has been canceled.",
                          "sales-invoice.paid": "Occurs when a sales invoice has been paid.",
                          "sales-invoice.e-invoice-failed": "Occurs when a sales invoice failed to be sent as an e-invoice.",
                          "sales-invoice.e-invoice-issued": "Occurs when a sales invoice has been successfully sent as an e-invoice.",
                          "business-account-transfer.requested": "The transfer is requested and waiting for SCA (exempt for Transfers API). SEPA transfer input checks passed.",
                          "business-account-transfer.initiated": "The transfer is SCA-authorized for execution. Funds are reserved.",
                          "business-account-transfer.pending-review": "The transfer is pending manual review.",
                          "business-account-transfer.processed": "The transfer is processed.",
                          "business-account-transfer.failed": "The transfer fails to be executed.",
                          "business-account-transfer.blocked": "The transfer is blocked.",
                          "business-account-transfer.returned": "Incoming transfer when a transfer is returned.",
                          "business-account-draft-transfer.created": "The draft transfer is created and awaiting review by a human initiator in Mollie Apps.",
                          "business-account-draft-transfer.approved": "The draft transfer is approved by the initiator.",
                          "business-account-draft-transfer.declined": "The draft transfer is declined, either by the initiator, the creator, or because the debtor account was closed.",
                          "unmatched-credit-transfer.received": "An incoming credit transfer has been received and could not be automatically matched to a payment.",
                          "unmatched-credit-transfer.matched": "An unmatched credit transfer resource has transitioned to the matched state after a successful match.",
                          "unmatched-credit-transfer.returned": "An unmatched credit transfer resource has transitioned to the returned state after a successful return.",
                          "unmatched-credit-transfer.expired": "An unmatched credit transfer has expired.",
                          "unmatched-credit-transfer.match.completed": "A user-triggered match action has completed successfully.",
                          "unmatched-credit-transfer.match.failed": "A user-triggered match action has failed.",
                          "unmatched-credit-transfer.return.completed": "A user-triggered return action has completed successfully.",
                          "unmatched-credit-transfer.return.failed": "A user-triggered return action has failed.",
                          "*": "All event types."
                        },
                        "example": "payment-link.paid"
                      }
                    ]
                  },
                  "testmode": {
                    "type": "boolean",
                    "description": "Whether to create the entity in test mode or live mode.\n\nYou can enable test mode by setting `testmode` to `true`.",
                    "writeOnly": true,
                    "example": false
                  }
                },
                "required": [
                  "name",
                  "url",
                  "eventTypes"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The webhook object.",
            "content": {
              "application/hal+json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "resource",
                    "id",
                    "url",
                    "profileId",
                    "createdAt",
                    "name",
                    "eventTypes",
                    "status",
                    "mode",
                    "webhookSecret",
                    "_links"
                  ],
                  "properties": {
                    "resource": {
                      "type": "string",
                      "description": "Indicates the response contains a webhook subscription object. Will always contain the string `webhook` for this endpoint.",
                      "readOnly": true,
                      "example": "webhook"
                    },
                    "id": {
                      "type": "string",
                      "description": "The identifier uniquely referring to this subscription.",
                      "readOnly": true,
                      "example": "hook_tNP6fpF9fLJpFWziRcgiH"
                    },
                    "url": {
                      "type": "string",
                      "description": "The subscription's events destination.",
                      "example": "https://example.com/webhook-endpoint"
                    },
                    "profileId": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "The identifier uniquely referring to the profile that created the subscription.",
                      "readOnly": true,
                      "example": "pfl_YyoaNFjtHc"
                    },
                    "createdAt": {
                      "type": "string",
                      "description": "The subscription's date time of creation.",
                      "readOnly": true,
                      "example": "2023-01-01T12:00:00+00:00"
                    },
                    "name": {
                      "type": "string",
                      "description": "The subscription's name.",
                      "example": "Profile Updates Webhook"
                    },
                    "eventTypes": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "description": "The list of events to enable for this webhook. You may specify `'*'` to add all events, except those that require explicit selection.\n\nPossible values: `payment.paid` `payment.authorized` `payment.failed` `payment.canceled` `payment.expired` `payment.pending` `refund.queued` `refund.pending` `refund.processing` `refund.refunded` `refund.failed` `refund.canceled` `chargeback.received` `chargeback.reversed` `capture.succeeded` `capture.failed` `payment-link.paid` `balance-transaction.created` `payout.initiated` `payout.processing-at-bank` `payout.completed` `payout.canceled` `payout.failed` `sales-invoice.created` `sales-invoice.issued` `sales-invoice.canceled` `sales-invoice.paid` `sales-invoice.e-invoice-failed` `sales-invoice.e-invoice-issued` `business-account-transfer.requested` `business-account-transfer.initiated` `business-account-transfer.pending-review` `business-account-transfer.processed` `business-account-transfer.failed` `business-account-transfer.blocked` `business-account-transfer.returned` `business-account-draft-transfer.created` `business-account-draft-transfer.approved` `business-account-draft-transfer.declined` `unmatched-credit-transfer.received` `unmatched-credit-transfer.matched` `unmatched-credit-transfer.returned` `unmatched-credit-transfer.expired` `unmatched-credit-transfer.match.completed` `unmatched-credit-transfer.match.failed` `unmatched-credit-transfer.return.completed` `unmatched-credit-transfer.return.failed` `*`",
                        "x-speakeasy-name-override": "webhook-event-types",
                        "x-enumDescriptions": {
                          "payment.paid": "A payment has been completed successfully.",
                          "payment.authorized": "A payment has been authorized and is awaiting capture.",
                          "payment.failed": "A payment attempt failed.",
                          "payment.canceled": "A payment was canceled before it could be completed.",
                          "payment.expired": "A payment expired before it was completed.",
                          "payment.pending": "A payment is awaiting confirmation from the bank.",
                          "refund.queued": "A refund has been accepted and is queued for processing.",
                          "refund.pending": "A refund is pending and awaiting bank confirmation.",
                          "refund.processing": "A refund is being processed by the bank.",
                          "refund.refunded": "A refund has been transferred to your customer.",
                          "refund.failed": "A refund could not be completed.",
                          "refund.canceled": "A refund was canceled before processing.",
                          "chargeback.received": "A chargeback has been received for a payment.",
                          "chargeback.reversed": "A previously received chargeback has been reversed.",
                          "capture.succeeded": "A capture has completed successfully.",
                          "capture.failed": "A capture attempt failed.",
                          "payment-link.paid": "Occurs when a payment link has been paid.",
                          "balance-transaction.created": "Occurs when a balance transaction is created to add to your available balance. It currently only supports positive amounts and non-captured payments.",
                          "payout.initiated": "The payout is being executed and funds are reserved on the balance.",
                          "payout.processing-at-bank": "The payout has been submitted to the bank and is being processed.",
                          "payout.completed": "The payout has been sent to the destination bank account successfully.",
                          "payout.canceled": "The payout was canceled via the API before being submitted to the bank.",
                          "payout.failed": "The payout failed after creation. This includes payouts rejected by the bank or returned after submission.\nNote that post-submission cancellations also produce this event, not `payout.canceled`.",
                          "sales-invoice.created": "Occurs when a sales invoice has been created.",
                          "sales-invoice.issued": "Occurs when a sales invoice has been issued.",
                          "sales-invoice.canceled": "Occurs when a sales invoice has been canceled.",
                          "sales-invoice.paid": "Occurs when a sales invoice has been paid.",
                          "sales-invoice.e-invoice-failed": "Occurs when a sales invoice failed to be sent as an e-invoice.",
                          "sales-invoice.e-invoice-issued": "Occurs when a sales invoice has been successfully sent as an e-invoice.",
                          "business-account-transfer.requested": "The transfer is requested and waiting for SCA (exempt for Transfers API). SEPA transfer input checks passed.",
                          "business-account-transfer.initiated": "The transfer is SCA-authorized for execution. Funds are reserved.",
                          "business-account-transfer.pending-review": "The transfer is pending manual review.",
                          "business-account-transfer.processed": "The transfer is processed.",
                          "business-account-transfer.failed": "The transfer fails to be executed.",
                          "business-account-transfer.blocked": "The transfer is blocked.",
                          "business-account-transfer.returned": "Incoming transfer when a transfer is returned.",
                          "business-account-draft-transfer.created": "The draft transfer is created and awaiting review by a human initiator in Mollie Apps.",
                          "business-account-draft-transfer.approved": "The draft transfer is approved by the initiator.",
                          "business-account-draft-transfer.declined": "The draft transfer is declined, either by the initiator, the creator, or because the debtor account was closed.",
                          "unmatched-credit-transfer.received": "An incoming credit transfer has been received and could not be automatically matched to a payment.",
                          "unmatched-credit-transfer.matched": "An unmatched credit transfer resource has transitioned to the matched state after a successful match.",
                          "unmatched-credit-transfer.returned": "An unmatched credit transfer resource has transitioned to the returned state after a successful return.",
                          "unmatched-credit-transfer.expired": "An unmatched credit transfer has expired.",
                          "unmatched-credit-transfer.match.completed": "A user-triggered match action has completed successfully.",
                          "unmatched-credit-transfer.match.failed": "A user-triggered match action has failed.",
                          "unmatched-credit-transfer.return.completed": "A user-triggered return action has completed successfully.",
                          "unmatched-credit-transfer.return.failed": "A user-triggered return action has failed.",
                          "*": "All event types."
                        },
                        "example": "payment-link.paid"
                      },
                      "description": "The events types that are subscribed.",
                      "example": [
                        "sales-invoice.paid, sales-invoice.canceled"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "The subscription's current status.\n\nPossible values: `enabled` `blocked` `disabled` `deleted`",
                      "example": "enabled"
                    },
                    "mode": {
                      "type": "string",
                      "description": "Whether this entity was created in live mode or in test mode.\n\nPossible values: `live` `test`",
                      "readOnly": true,
                      "example": "live"
                    },
                    "webhookSecret": {
                      "type": "string",
                      "description": "The subscription's secret.",
                      "example": "secret"
                    },
                    "_links": {
                      "type": "object",
                      "description": "An object with several relevant URLs. Every URL object will contain an `href` and a `type` field.",
                      "required": [
                        "self",
                        "documentation"
                      ],
                      "properties": {
                        "self": {
                          "type": "object",
                          "description": "In v2 endpoints, URLs are commonly represented as objects with an `href` and `type` field.",
                          "required": [
                            "href",
                            "type"
                          ],
                          "properties": {
                            "href": {
                              "type": "string",
                              "description": "The actual URL string.",
                              "example": "https://..."
                            },
                            "type": {
                              "type": "string",
                              "description": "The content type of the page or endpoint the URL points to.",
                              "example": "application/hal+json"
                            }
                          }
                        },
                        "documentation": {
                          "type": "object",
                          "description": "In v2 endpoints, URLs are commonly represented as objects with an `href` and `type` field.",
                          "required": [
                            "href",
                            "type"
                          ],
                          "properties": {
                            "href": {
                              "type": "string",
                              "description": "The actual URL string.",
                              "example": "https://..."
                            },
                            "type": {
                              "type": "string",
                              "description": "The content type of the page or endpoint the URL points to.",
                              "example": "application/hal+json"
                            }
                          }
                        }
                      },
                      "readOnly": true
                    }
                  }
                },
                "examples": {
                  "create-webhook-200": {
                    "summary": "The webhook subscription object.",
                    "value": {
                      "resource": "webhook",
                      "id": "hook_B2EyhTH5N4KWUnoYPcgiH",
                      "url": "https://mollie.com",
                      "profileId": "pfl_8XcSdLtrNK",
                      "createdAt": "2024-12-06T10:09:56+00:00",
                      "name": "Webhook #1",
                      "status": "enabled",
                      "mode": "live",
                      "webhookSecret": "VpQ3WukU6uSCGQ8TPTD3WPDpac3GyNEj",
                      "eventTypes": [
                        "payment-link.paid"
                      ],
                      "_links": {
                        "self": {
                          "href": "...",
                          "type": "application/hal+json"
                        },
                        "documentation": {
                          "href": "https://docs.mollie.com/reference/create-webhook",
                          "type": "text/html"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "The request contains issues. For example, if the URL is missing.",
            "content": {
              "application/hal+json": {
                "schema": {
                  "type": "object",
                  "description": "An error response object.",
                  "required": [
                    "status",
                    "title",
                    "detail",
                    "_links"
                  ],
                  "properties": {
                    "status": {
                      "type": "integer",
                      "description": "The status code of the error message. This is always the same code as the status code of the HTTP message itself.",
                      "minimum": 400,
                      "maximum": 599,
                      "example": 404
                    },
                    "title": {
                      "type": "string",
                      "description": "The HTTP reason phrase of the error. For example, for a `404` error, the `title` will be `Not Found`.",
                      "example": "Not Found"
                    },
                    "detail": {
                      "type": "string",
                      "description": "A detailed human-readable description of the error that occurred.",
                      "example": "The resource does not exist"
                    },
                    "field": {
                      "type": "string",
                      "description": "If the error was caused by a value provided by you in a specific field, the `field` property will contain the name of the field that caused the issue.",
                      "example": "description"
                    },
                    "_links": {
                      "type": "object",
                      "required": [
                        "documentation"
                      ],
                      "properties": {
                        "documentation": {
                          "type": "object",
                          "description": "The URL to the generic Mollie API error handling guide.",
                          "required": [
                            "href",
                            "type"
                          ],
                          "properties": {
                            "href": {
                              "type": "string",
                              "example": "https://docs.mollie.com/errors"
                            },
                            "type": {
                              "type": "string",
                              "example": "text/html"
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "status": 422,
                  "title": "Unprocessable entity",
                  "detail": "Invalid URL provided",
                  "field": "url",
                  "_links": {
                    "documentation": {
                      "href": "...",
                      "type": "text/html"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/429-rate-limit"
          }
        },
        "x-readme": {
          "code-samples": [
            {
              "language": "shell",
              "code": "curl -X POST https://api.mollie.com/v2/webhooks \\\n    -H \"Authorization: Bearer access_UsJwq8nzcHbSrDuh82pyjjEaTbd5SAPtVebEJ5BH\" \\\n    -d \"name=Payment notification\" \\\n    -d \"url=https://mollie.com\" \\\n    -d \"eventTypes=payments.read\""
            },
            {
              "language": "php",
              "code": "<?php\nuse Mollie\\Api\\Http\\Requests\\CreateWebhookRequest;\nuse Mollie\\Api\\Types\\WebhookEventType;\n\n$mollie->setAccessToken('access_UsJwq8nzcHbSrDuh82pyjjEaTbd5SAPtVebEJ5BH');\n\n$webhook = $mollie->send(\n    new CreateWebhookRequest(\n        url: 'https://mollie.com',\n        name: 'Payment notification',\n        eventTypes: 'payments.read'\n    )\n);",
              "install": "composer require mollie/mollie-api-php"
            },
            {
              "language": "node",
              "code": "/*\nWe don't have a Node.js code example for this\nAPI call yet.\n\nIf you have some time to spare, feel free to\nshare suggestions on our Discord:\nhttps://discord.gg/VaTVkXB4aQ\n*/",
              "install": "npm install mollie-api-typescript"
            },
            {
              "language": "python",
              "code": "'''\nWe don't have a Python code example for this\nAPI call yet.\n\nIf you have some time to spare, feel free to\nshare suggestions on our Discord:\nhttps://discord.gg/VaTVkXB4aQ\n'''",
              "install": "pip install mollie-api-py"
            },
            {
              "language": "ruby",
              "code": "# We don't have a Ruby code example for this\n# API call yet.\n#\n# If you have some time to spare, feel free to\n# share suggestions on our Discord:\n# https://discord.gg/VaTVkXB4aQ",
              "install": "gem install mollie-api-ruby"
            }
          ]
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Authenticates API requests for a single website profile. Each key targets\neither live mode (`live_...`) or test mode (`test_...`).\n\nKeys are shown only once, at creation. Store the key securely — it cannot\nbe retrieved afterwards. If lost, create a new key under Developers → API\naccess tokens in the Dashboard and revoke the old one.",
        "x-default": "live_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM"
      },
      "advancedAccessToken": {
        "type": "http",
        "scheme": "bearer",
        "description": "Authenticates API requests with configurable permissions. Can access\norganization-level resources and optionally scope to a specific payment\nprofile (`access_...`). Use for advanced integrations — such as bookkeeping\nor reporting tools — that need fine-grained control over API access.\n\nTokens are shown only once, at creation. Store it securely — it cannot be\nretrieved afterwards. If lost, create a new token under Developers → API\naccess tokens in the Dashboard and revoke the old one.",
        "x-default": "access_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM"
      },
      "oAuth": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://my.mollie.com/oauth2/authorize",
            "tokenUrl": "https://api.mollie.com/oauth2/tokens",
            "scopes": {}
          }
        }
      }
    },
    "responses": {
      "429-rate-limit": {
        "description": "Rate Limit has been reached.",
        "content": {
          "application/hal+json": {
            "schema": {
              "type": "object",
              "description": "An error response object.",
              "required": [
                "status",
                "title",
                "detail",
                "_links"
              ],
              "properties": {
                "status": {
                  "type": "integer",
                  "description": "The status code of the error message. This is always the same code as the status code of the HTTP message itself.",
                  "minimum": 400,
                  "maximum": 599,
                  "example": 404
                },
                "title": {
                  "type": "string",
                  "description": "The HTTP reason phrase of the error. For example, for a `404` error, the `title` will be `Not Found`.",
                  "example": "Not Found"
                },
                "detail": {
                  "type": "string",
                  "description": "A detailed human-readable description of the error that occurred.",
                  "example": "The resource does not exist"
                },
                "field": {
                  "type": "string",
                  "description": "If the error was caused by a value provided by you in a specific field, the `field` property will contain the name of the field that caused the issue.",
                  "example": "description"
                },
                "_links": {
                  "type": "object",
                  "required": [
                    "documentation"
                  ],
                  "properties": {
                    "documentation": {
                      "type": "object",
                      "description": "The URL to the generic Mollie API error handling guide.",
                      "required": [
                        "href",
                        "type"
                      ],
                      "properties": {
                        "href": {
                          "type": "string",
                          "example": "https://docs.mollie.com/errors"
                        },
                        "type": {
                          "type": "string",
                          "example": "text/html"
                        }
                      }
                    }
                  }
                }
              }
            },
            "example": {
              "status": 429,
              "title": "Too Many Requests",
              "detail": "You have exceeded the rate limit. Please slow down your requests.",
              "_links": {
                "documentation": {
                  "href": "https://docs.mollie.com/overview/handling-errors",
                  "type": "text/html"
                }
              }
            }
          }
        }
      }
    }
  },
  "x-readme": {
    "explorer-enabled": false,
    "samples-languages": [
      "shell",
      "php",
      "node",
      "python",
      "ruby"
    ]
  }
}
```