- Website: https://getconvoy.io
- Forum: Github Discussions
- Documentation: getconvoy.io/docs
- Announcement: Medium
- Slack: Slack
Convoy is a fast & secure webhooks service. It receives event data from a HTTP API and sends these event data to the configured endpoints. To get started download the openapi spec into Postman or Insomnia.
It includes the following features
- Sign payload: Configure hash function to use in signing payload.
- Retry events: Retry events to endpoints.
- Delivery Attempt Logs: View request headers and body as well as response headers and body.
- Rich UI: To easily debug and retry failed events.
There are various ways of installing Convoy.
Precompiled binaries for released versions are available in the releases section on Github.
Docker images are available on Github Container Registry.
You can launch a Convoy Container to try it out with
$ docker run \
-p 5005:5005 \
--name convoy-server \
-v `pwd`/convoy.json:/convoy.json \
ghcr.io/frain-dev/convoy:v0.3.0
You can download a sample configuration of convoy.json.
To build Convoy from source code, you need:
- Go version 1.16 or greater.
- NodeJS version 14.17 or greater.
- Npm version 6 or greater.
git clone https://github.com/frain-dev/convoy.git && cd convoy
go build -o convoy ./convoy
- Apps: An app is an abstraction representing a user who wants to receive webhooks. Currently, an app contains one endpoint to receive webhooks.
- Events: An event represents a webhook event to be sent to an app.
- Delivery Attempts: A delivery attempt represents an attempt to send an event to it's respective app's endpoint. It contains the
event body
,status code
andresponse body
received on attempt. The amount of attempts on a failed delivery depends on your configured retry strategy.
Convoy is configured using a json file with a sample configuration below:
{
"database": {
"dsn": "mongo-url-with-username-and-password"
},
"queue": {
"type": "redis",
"redis": {
"dsn": "redis-url-with-username-and-password"
}
},
"server": {
"http": {
"port": 5005
}
},
"auth": {
"type": "none"
},
"group": {
"strategy": {
"type": "default",
"default": {
"intervalSeconds": 125,
"retryLimit": 15
}
},
"signature": {
"header": "X-Company-Event-Webhook-Signature"
}
}
"environment": "development",
"disable_endpoint": false
"multiple_tenants": false
}
- You can set basic auth mechanism with the following:
{
"auth": {
"type": "basic",
"basic": {
"username": "username",
"password": "password"
}
}
}