# Webhooks

> Webhooks both ways. Get a signed run.finished request when a run ends; and start runs from signed webhooks that WooCommerce, Drupal or any sender posts to Kindgi.

Webhooks go both ways, and the two don't share a setup.

**Kindgi starts runs from your systems' webhooks.** Register a **webhook trigger**, and a signed request from WooCommerce, Drupal's Webhooks module, GitHub, Shopify or any Standard Webhooks sender starts a run of your flow: [Start runs from WooCommerce, Drupal or any signed webhook](https://docs.kindgi.com/v0.1.10/guides/webhooks/start-runs-from-webhooks.md).

**Kindgi tells your app when a run ends.** Instead of polling a run, register a **webhook endpoint**, a URL in your app, and Kindgi sends it a signed `run.finished` request each time a run you started completes, fails or is cancelled.

- [Get a webhook when a run finishes](https://docs.kindgi.com/v0.1.10/guides/webhooks/receive-run-finished.md): store the signing secret, register the endpoint, and answer each request.
- [Verify a webhook](https://docs.kindgi.com/v0.1.10/guides/webhooks/verify-a-webhook.md): check the signature in TypeScript or Python, and deduplicate retries.
- [Test and replay deliveries](https://docs.kindgi.com/v0.1.10/guides/webhooks/test-and-replay.md): send a test event, see what was delivered, and send a failed delivery again.
- [Webhook events and deliveries](https://docs.kindgi.com/v0.1.10/guides/webhooks/webhook-events.md): every event and what it carries, how deliveries are retried, and the console's Webhooks page.

Requests are signed in the [Standard Webhooks](https://www.standardwebhooks.com/) format, so a receiver in another language can use any Standard Webhooks library.
