Webhook subscriptions
Manage outbound webhook subscriptions. exoCortex POSTs a signed JSON event to your HTTPS endpoint whenever a subscribed event occurs (see Webhooks). These endpoints require an administrator session (Core → Integrations → Webhooks uses the same API).
List subscriptions
Section titled “List subscriptions”GET /api/webhooks/{tenant}/subscriptions
Authentication: Session of an exoCortex Core administrator
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant |
path | string | yes | Tenant code (case-insensitive). |
Responses
Section titled “Responses”| Status | Description |
|---|---|
200 |
Subscriptions of the tenant (secrets are masked). |
401 |
Not authenticated. |
403 |
Authenticated but not allowed (role, tenant or key). |
Example 200
{ "ok": true, "hooks": [ { "id": "wh_mhf2k1a9x3", "url": "https://hooks.example.com/exocortex", "events": [ "ticket.created", "ticket.status_changed" ], "format": "json", "enabled": true, "headers": {}, "secret": "***set***", "created_at": "2026-11-01T08:00:00.000Z", "created_by": "jane.doe" } ]}Example with curl
Section titled “Example with curl”curl -X GET "https://exocortex-api.ai-exo-cortex.com/api/webhooks/ACME/subscriptions" \ -H "Authorization: Bearer $EXO_ADMIN_SESSION"Create or update a subscription
Section titled “Create or update a subscription”POST /api/webhooks/{tenant}/subscriptions
Without id, this creates a new subscription. With id, it updates that subscription.
If you don’t send a secret on creation, exoCortex generates one and returns it
once in the secret response field. Store it to verify signatures.
Authentication: Session of an exoCortex Core administrator
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant |
path | string | yes | Tenant code (case-insensitive). |
Request body
Section titled “Request body”application/json
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | no | Send it to update an existing subscription. Omit it to create one. |
url |
string (uri) | yes | HTTPS endpoint that receives the events. |
events |
array<string> | no | Event types to receive. * means all. Defaults to ["*"]. Besides the ticket catalog, notification-center events defined by the tenant’s notification rules (for example approval_requested) can be subscribed by name. |
format |
string (json, datadog, pagerduty, slack-block) |
no | |
secret |
string | no | Signing secret. Generated if omitted on creation. |
enabled |
boolean | no | |
headers |
object | no | Extra static headers added to every delivery (for example an auth header for your gateway). |
{ "url": "https://hooks.example.com/exocortex", "events": [ "ticket.created", "ticket.status_changed", "ticket.resolved" ], "format": "json"}Responses
Section titled “Responses”| Status | Description |
|---|---|
200 |
Subscription saved. |
400 |
Invalid request. |
401 |
Not authenticated. |
403 |
Authenticated but not allowed (role, tenant or key). |
Example 200
{ "ok": true, "id": "wh_mhf2k1a9x3", "count": 1, "secret": "whsec_4b9e1f0c7d2a8e6b3c5f9a1d0e7b2c4a"}Example with curl
Section titled “Example with curl”curl -X POST "https://exocortex-api.ai-exo-cortex.com/api/webhooks/ACME/subscriptions" \ -H "Authorization: Bearer $EXO_ADMIN_SESSION" \ -H "Content-Type: application/json" \ --data '{"url":"https://hooks.example.com/exocortex","events":["ticket.created","ticket.status_changed","ticket.resolved"],"format":"json"}'Delete a subscription
Section titled “Delete a subscription”DELETE /api/webhooks/{tenant}/subscriptions/{id}
Authentication: Session of an exoCortex Core administrator
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant |
path | string | yes | Tenant code (case-insensitive). |
id |
path | string | yes |
Responses
Section titled “Responses”| Status | Description |
|---|---|
200 |
Deleted (removed is 0 if the id did not exist). |
401 |
Not authenticated. |
403 |
Authenticated but not allowed (role, tenant or key). |
Example 200
{ "ok": true, "removed": 1}Example with curl
Section titled “Example with curl”curl -X DELETE "https://exocortex-api.ai-exo-cortex.com/api/webhooks/ACME/subscriptions/wh_mhf2k1a9x3" \ -H "Authorization: Bearer $EXO_ADMIN_SESSION"Send a test event
Section titled “Send a test event”POST /api/webhooks/{tenant}/subscriptions/{id}/test
Sends a signed webhook.test event to the subscription URL and reports the HTTP status returned by your endpoint.
Authentication: Session of an exoCortex Core administrator
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant |
path | string | yes | Tenant code (case-insensitive). |
id |
path | string | yes |
Responses
Section titled “Responses”| Status | Description |
|---|---|
200 |
Delivery result (ok reflects your endpoint’s response). |
401 |
Not authenticated. |
403 |
Authenticated but not allowed (role, tenant or key). |
Example 200
{ "ok": true, "status": 204}Example with curl
Section titled “Example with curl”curl -X POST "https://exocortex-api.ai-exo-cortex.com/api/webhooks/ACME/subscriptions/wh_mhf2k1a9x3/test" \ -H "Authorization: Bearer $EXO_ADMIN_SESSION"List event types
Section titled “List event types”GET /api/webhooks/{tenant}/event-types
Authentication: Session of an exoCortex Core administrator
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant |
path | string | yes | Tenant code (case-insensitive). |
Responses
Section titled “Responses”| Status | Description |
|---|---|
200 |
Event catalog. |
401 |
Not authenticated. |
403 |
Authenticated but not allowed (role, tenant or key). |
Example 200
{ "ok": true, "wildcard": "*", "event_types": [ "ticket.created", "ticket.comment_added", "ticket.field_changed", "ticket.assignee_changed", "ticket.status_changed", "ticket.sla_warning", "ticket.sla_breach", "ticket.resolved", "ticket.closed", "ticket.reopened", "ticket.priority_changed", "routing.no_match", "routing.manual_routed", "ticket.link_created", "ticket.link_deleted" ]}Example with curl
Section titled “Example with curl”curl -X GET "https://exocortex-api.ai-exo-cortex.com/api/webhooks/ACME/event-types" \ -H "Authorization: Bearer $EXO_ADMIN_SESSION"Page generated from the OpenAPI specification of the integration API, version 1.1.0.