Appearance
Destinations
About 707 wordsAbout 2 min
A destination is an HTTP endpoint that GetHook forwards events to. Supports bearer token auth, custom request headers, per-destination HMAC signing secrets, and configurable timeouts.
Create destination
POST /v1/destinationsAuthentication: Bearer
Request body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Human-readable label |
url | string | Yes | Target HTTPS URL to deliver webhooks to |
preset | string | No | Built-in destination preset ID (see Destination Presets) |
signing_secret | string | No | HMAC secret for outbound signature. Encrypted at rest. |
timeout_seconds | integer | No | HTTP timeout per delivery attempt (default: 30) |
auth_config | object | No | Destination authentication (see below) |
custom_headers | object | No | Additional headers included in every delivery |
auth_config — Bearer token
{
"type": "bearer",
"token": "your-destination-api-token"
}auth_config — Custom header
{
"type": "header",
"header": "X-API-Key",
"value": "your-api-key-value"
}custom_headers
{
"X-Source": "gethook",
"X-Environment": "production"
}Response 201 Created
{
"data": {
"id": "d1d2d3d4-e5f6-7890-abcd-ef1234567890",
"account_id": "a1a2a3a4-...",
"name": "My API",
"url": "https://api.example.com/webhooks",
"timeout_seconds": 30,
"active": true,
"auth_config": null,
"custom_headers": null,
"created_at": "2024-01-15T10:00:00Z"
}
}Note: signing_secret is never returned in responses (stored encrypted).
Errors
| Status | Error | Cause |
|---|---|---|
400 | name and url are required | Missing required fields |
401 | Unauthorized | Invalid Bearer token |
curl examples
# Minimal destination
curl -s -X POST http://localhost:8080/v1/destinations \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My API",
"url": "https://api.example.com/webhooks"
}' | jq .# Destination with HMAC signing + bearer auth
curl -s -X POST http://localhost:8080/v1/destinations \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Secure API",
"url": "https://api.example.com/webhooks",
"signing_secret": "my-hmac-signing-secret",
"timeout_seconds": 15,
"auth_config": {
"type": "bearer",
"token": "my-destination-api-token"
},
"custom_headers": {
"X-Source": "gethook"
}
}' | jq .List destinations
GET /v1/destinationsAuthentication: Bearer
Response 200 OK
{
"data": [
{
"id": "d1d2d3d4-...",
"name": "My API",
"url": "https://api.example.com/webhooks",
"timeout_seconds": 30,
"active": true,
"created_at": "2024-01-15T10:00:00Z"
}
]
}curl example
curl -s http://localhost:8080/v1/destinations \
-H "Authorization: Bearer $API_KEY" | jq .Get destination
GET /v1/destinations/{id}Authentication: Bearer
Path parameters
| Parameter | Type | Description |
|---|---|---|
id | UUID | The destination ID |
curl example
curl -s http://localhost:8080/v1/destinations/d1d2d3d4-... \
-H "Authorization: Bearer $API_KEY" | jq .Update destination
Partial update — only provided fields are changed.
PATCH /v1/destinations/{id}Authentication: Bearer
Request body
All fields are optional. Include only the fields you want to change.
| Field | Type | Description |
|---|---|---|
name | string | New label |
url | string | New target URL |
timeout_seconds | integer | New HTTP timeout |
active | boolean | Enable (true) or disable (false) the destination |
auth_config | object | Replace auth config |
custom_headers | object | Replace custom headers |
Response 200 OK
Returns the full updated destination object.
curl examples
# Disable a destination
curl -s -X PATCH http://localhost:8080/v1/destinations/d1d2d3d4-... \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"active": false}' | jq .# Update URL and timeout
curl -s -X PATCH http://localhost:8080/v1/destinations/d1d2d3d4-... \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://new-api.example.com/webhooks",
"timeout_seconds": 60
}' | jq .Disabling vs deleting
Setting active: false stops delivery to that destination without losing its configuration or delivery history. Useful during maintenance windows.
Destination Presets
Use the preset field to auto-configure auth and headers for popular delivery targets.
GET /v1/destination-presetsAuthentication: None
Supported presets
preset | Name | Auth Type | Notes |
|---|---|---|---|
slack | Slack | None (URL auth) | Incoming Webhooks URL contains secret |
discord | Discord | None (URL auth) | Webhook URL contains secret |
teams | Microsoft Teams | None (URL auth) | Office 365 Incoming Webhook |
pagerduty | PagerDuty | Bearer (routing_key) | Events API v2 |
datadog | Datadog | API key (DD-API-KEY header) | Events API |
hubspot | HubSpot | Bearer | Access token |
linear | Linear | Bearer | API key |
notion | Notion | Bearer | Integration token; Notion-Version header auto-added |
airtable | Airtable | Bearer | Personal access token |
zapier | Zapier | None (URL auth) | Catch Hook URL |
n8n | n8n | None (URL auth) | Webhook trigger node URL |
make | Make | None (URL auth) | Webhook module URL |
curl example — Slack preset
curl -s -X POST http://localhost:8080/v1/destinations \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "#alerts",
"url": "https://hooks.slack.com/services/T.../B.../...",
"preset": "slack"
}' | jq .curl example — Datadog preset
curl -s -X POST http://localhost:8080/v1/destinations \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Datadog Events",
"url": "https://api.datadoghq.com/api/v1/events",
"preset": "datadog",
"auth_config": {
"type": "header",
"header": "DD-API-KEY",
"value": "your-datadog-api-key"
}
}' | jq .