---
slug: webhooks
title: Web Hooks
---
Add Webhooks to your ServiceStack services, and allow other services to integrate with yours across the web.
## [ServiceStack.Webhooks](https://github.com/jezzsantos/servicestack.webhooks)
The [WebHookFeature](https://github.com/jezzsantos/servicestack.webhooks) plugin
by [Jezz Santos](https://github.com/jezzsantos) makes it very easy to expose webhook notifications from your ServiceStack services,
and helps you manage your user's subscriptions to those webhooks.:
:::copy
``
:::
By adding the `WebhookFeature` to the `AppHost` of your service,
you automatically get all the pieces you need to raise and manage the events raised by your services.
```csharp
public override void Configure(Container container)
{
// Add ValidationFeature and AuthFeature plugins first
Plugins.Add(new WebhookFeature());
}
```

See [Getting Started](https://github.com/jezzsantos/ServiceStack.Webhooks/wiki/Getting-Started) for more details.
## Raising Events
To raise events from your own services:
1. Add the `IWebhooks` dependency to your service
2. Call: `IWebhooks.Publish(string eventName, TDto data)`
As simple as this:
```
internal class HelloService : Service
{
public IWebhooks Webhooks { get; set; }
public HelloResponse Any(Hello request)
{
Webhooks.Publish("hello", new HelloEvent{ Text = "I said hello" });
}
}
```
## Subscribing to Events
Subscribers to events raised by your services need to create a webhook subscription to those events.
They do this by POSTing something like the following, to your service:
```
POST /webhooks/subscriptions
{
"name": "My Webhook",
"events": ["hello", "goodbye"],
"config": {
"url": "http://myserver/api/incoming",
}
}
```
## Consuming Events
To consume events, a subscriber needs to provide a public HTTP POST endpoint on the internet that would receive the POSTed webhook event.
The URL to that endpoint is defined in the `config.url` of the subscription (above).
In the case of the "hello" event (raised above), the POSTed event sent to the subscriber's endpoint might look something like this:
```
POST http://myserver/hello HTTP/1.1
Accept: application/json
User-Agent: ServiceStack .NET Client 4.56
Accept-Encoding: gzip,deflate
X-Webhook-Delivery: 7a6224aad9c8400fb0a70b8a71262400
X-Webhook-Event: hello
Content-Type: application/json
Host: myserver
Content-Length: 26
Expect: 100-continue
Proxy-Connection: Keep-Alive
{
"Text": "I said hello"
}
```
To consume this event with a ServiceStack service, the subscriber would standup a public API like the one below, that could receive the 'Hello' event. That might have been raised from another service with a call to `Webhooks.Publish("hello", new HelloEvent{ Text = "I said hello" })`:
```
internal class MyService : Service
{
public void Post(HelloDto request)
{
// They said hello!
var message = request.Text;
// The event name, messaging metadata are included in the headers
var eventName = Request.Headers["X-Webhook-Event"];
var deliveryId = Request.Headers["X-Webhook-Delivery"];
var signature = Request.Headers["X-Hub-Signature"];
}
}
[Route("/hello", "POST")]
public class HelloDto
{
public string Text { get; set; }
}
```
Note: Webhook events can be delivered securely to subscribers using signatures, that proves the authenticity of the sender only. Delivered events are never encrypted, and only signed. See [Subscriber Security](https://github.com/jezzsantos/ServiceStack.Webhooks/wiki/Subscriber-Security) for more details.
# [Documentation](https://github.com/jezzsantos/ServiceStack.Webhooks/wiki)
More documentation about how the `WebhookFeature` works, and how to customize it are available in [here](https://github.com/jezzsantos/ServiceStack.Webhooks/wiki)
# Plugins
- [Custom sinks and stores](https://github.com/jezzsantos/ServiceStack.Webhooks/wiki/Plugins)