Overview
Outbound webhooks let you receive real-time notifications when events occur on your connection. You create a subscription with a target URL and a list of event types. When a matching event fires, Configly sends a signed POST request to your URL with the event payload.
For the list of events you can subscribe to, see Webhook event types.
Create a subscription
curl -X POST https://api.configly.app/v1/webhooks \
-H "Authorization: Bearer cly_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/webhook",
"events": ["config.applied", "health_check.completed"],
"description": "Production monitoring"
}'
| Field | Type | Required | Notes |
|---|---|---|---|
url |
string | Yes | Must use HTTPS. |
events |
string[] | Yes | One or more event types. Maximum 20 per subscription. |
description |
string | No | Optional label for your reference. |
The response includes a secret field with a whsec_ prefix. Use this to verify incoming webhook signatures.
Maximum 10 subscriptions per connection. Attempting to exceed this returns 400 LIMIT_EXCEEDED.
List subscriptions
curl https://api.configly.app/v1/webhooks \ -H "Authorization: Bearer cly_your_key"
Returns a paginated list of subscriptions. Supports page and limit query parameters.
Get a subscription
curl https://api.configly.app/v1/webhooks/{id} \
-H "Authorization: Bearer cly_your_key"
Returns subscription details. The secret is never included in read responses.
Update a subscription
curl -X PUT https://api.configly.app/v1/webhooks/{id} \
-H "Authorization: Bearer cly_your_key" \
-H "Content-Type: application/json" \
-d '{ "events": ["config.applied"], "active": true }'
All fields are optional. Send only the fields you want to change. Setting active to true re-enables a disabled subscription, resets its failure count to zero, and clears any disabled state.
Delete a subscription
curl -X DELETE https://api.configly.app/v1/webhooks/{id} \
-H "Authorization: Bearer cly_your_key"
Returns 204 No Content with no response body.
Delivery log
curl https://api.configly.app/v1/webhooks/{id}/deliveries \
-H "Authorization: Bearer cly_your_key"
Returns a paginated list of delivery attempts for a subscription. Each entry includes the event payload, HTTP response status, and any error messages.
Test a subscription
curl -X POST https://api.configly.app/v1/webhooks/{id}/test \
-H "Authorization: Bearer cly_your_key"
Sends a single test event (connection.sync_completed with test: true in the data) to the subscription URL. Test deliveries are single-shot: if the delivery fails, it is not retried. Disabled subscriptions reject test calls with 400.
Response shapes
Subscription
| Field | Type | Description |
|---|---|---|
id |
string | Subscription identifier. |
url |
string | Target URL. |
events |
string[] | Subscribed event types. |
active |
boolean | Whether the subscription is currently active. |
description |
string or null | Optional label. |
failureCount |
number | Consecutive delivery failures. Resets on success. |
disabledAt |
string or null | ISO 8601 timestamp when auto-disabled. |
disabledReason |
string or null | Reason for auto-disable. |
lastDeliveryAt |
string or null | Timestamp of the most recent delivery attempt. |
lastDeliveryStatus |
number or null | HTTP status of the most recent delivery. |
createdAt |
string | ISO 8601. |
updatedAt |
string | ISO 8601. |
Delivery
| Field | Type | Description |
|---|---|---|
id |
string | Delivery identifier. |
subscriptionId |
string | Parent subscription. |
eventType |
string | Event type that triggered this delivery. |
payload |
object | Full event payload as delivered. |
responseStatus |
number or null | HTTP status returned by your endpoint. |
responseBody |
string or null | First 1024 characters of your endpoint's response. |
attemptNumber |
number | Which attempt this was (1, 2, or 3). |
deliveredAt |
string or null | Timestamp of successful delivery. |
failedAt |
string or null | Timestamp of failed delivery. |
error |
string or null | Error message if delivery failed. |
createdAt |
string | ISO 8601. |
Error codes
| Code | Status | Cause |
|---|---|---|
VALIDATION_ERROR |
400 | Invalid URL, unknown event type, or invalid field. Also returned when testing a disabled subscription. |
LIMIT_EXCEEDED |
400 | Maximum 10 subscriptions per connection. |
INVALID_API_KEY |
401 | Missing or invalid API key. |
WRITE_SCOPE_REQUIRED |
403 | Create, update, delete, and test require a read/write API key. |
NOT_FOUND |
404 | Subscription does not exist or belongs to a different connection. |
INTERNAL_ERROR |
500 | Unexpected server error. |
Comments
0 comments
Please sign in to leave a comment.