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

# Test with webhook.site

> Verify that your webhook subscription is correctly registered and receiving events before plugging in your own endpoint.

When integrating webhooks for the first time, the fastest way to confirm the Qonto side works is to point your subscription at a disposable public URL and watch the request come in — before involving your own server.

[webhook.site](https://webhook.site) generates a unique URL on the fly and displays every incoming request live (method, headers, body). That removes your own endpoint from the equation: if the request shows up there, your subscription is correctly registered and Qonto is delivering events. You can then swap the `callback_url` to your real endpoint and continue the integration.

<Warning>
  webhook.site URLs are publicly accessible. Use a **Sandbox** subscription only — never point Production events at a disposable URL.
</Warning>

<Steps>
  <Step title="Generate a webhook.site URL">
    Open [https://webhook.site](https://webhook.site). A unique URL is generated at the top of the page. Copy it.
  </Step>

  <Step title="Create a Sandbox subscription pointing to it">
    Call [`POST /v2/webhook_subscriptions`](/api-reference/business-api/webhooks/create-a-webhook-subscription) with that URL as `callback_url`, using the [Sandbox base URL](/get-started/business-api/urls) and the `X-Qonto-Staging-Token` header (see [Accessing the Sandbox environment](/get-started/general/sandbox-access) if you're not familiar with it).

    ```bash theme={null}
    curl -X POST https://thirdparty-sandbox.staging.qonto.co/v2/webhook_subscriptions \
      -H "Authorization: Bearer <your_token>" \
      -H "X-Qonto-Staging-Token: <your_staging_token>" \
      -H "Content-Type: application/json" \
      -d '{
        "subscription": {
          "event_type": "transaction.updated",
          "callback_url": "https://webhook.site/<your-unique-id>"
        }
      }'
    ```
  </Step>

  <Step title="Trigger an event">
    In the Sandbox, update an existing transaction to emit a `transaction.updated` event. Reliable triggers:

    * **Add an attachment** to a transaction
    * **Update the transaction note**

    <Note>
      Not every change on a transaction emits a webhook. Attachment uploads and note updates are the most reliable way to generate one on demand.
    </Note>
  </Step>

  <Step title="Inspect the request on webhook.site">
    Within a few seconds, the request should appear in the webhook.site UI. You can inspect:

    * Method: `POST`
    * Headers, including `X-Qonto-Signature`
    * The JSON payload
  </Step>

  <Step title="Switch to your own endpoint">
    Seeing the request on webhook.site confirms the subscription is live. Update the `callback_url` to your real endpoint via [`PATCH /v2/webhook_subscriptions/:id`](/api-reference/business-api/webhooks/update-a-webhook-subscription), then implement signature verification and payload processing on your side — see [Setup](/api-reference/business-api/webhooks/setup).
  </Step>
</Steps>

If the request never shows up on webhook.site, head to [Troubleshooting](/api-reference/business-api/webhooks/troubleshooting).
