Webhooks entrants
Endpoints that receive events from external tools (monitoring, CI/CD, SIEM/EDR, ITSM bridges, SNMP gateways) and turn them into tickets or updates. Requests are authenticated with an HMAC signature computed with the connector’s secret.
Recevoir un événement d’un outil de supervision, DevOps ou sécurité
Section intitulée « Recevoir un événement d’un outil de supervision, DevOps ou sécurité »POST /api/connectors/{vendor}/{project}
Point your tool’s webhook at this URL. project is the exoCortex tenant/project the
connector was configured for in Core → Integrations. The payload is the vendor’s
native webhook format and exoCortex normalizes it.
Authentication depends on the vendor:
- Vendors with native signing are verified with their own scheme: GitHub
X-Hub-Signature-256, GitLabX-Gitlab-Token, PagerDutyX-PagerDuty-Signature, OpsgenieAuthorization: GenieKey, Statuspage. - All other vendors use the exoCortex scheme:
X-Exo-Timestamp+X-Exo-Signature: v1=HMAC-SHA256(secret, "<timestamp>.<raw body>"), with a 300-second tolerance. See Webhook signatures. The legacyX-NH-Connector-Signature(hex HMAC of the body, no timestamp) is deprecated.
Authentification: Aucune : la requête est authentifiée par la signature décrite ci-dessus.
Paramètres
Section intitulée « Paramètres »| Nom | Emplacement | Type | Obligatoire | Description |
|---|---|---|---|---|
vendor |
chemin | string (datadog, newrelic, prometheus, grafana, github, gitlab, jenkins, bitbucket, nagios, icinga, centreon, statuspage, pagerduty, opsgenie, wazuh, sentinel, tenable, qualys, splunk, elastic, crowdstrike, sentinelone, qradar, cyberprotect, edr_network, fortigate, checkpoint, ninjaone) |
oui | |
project |
chemin | string | oui | |
X-Exo-Timestamp |
en-tête | string | non | Unix time in seconds when the request was signed. Required when X-Exo-Signature is sent. |
X-Exo-Signature |
en-tête | string | non | v1= + hex HMAC-SHA256(secret, “<X-Exo-Timestamp>.<raw body>”). Several comma-separated values are allowed. |
X-NH-Connector-Signature |
en-tête | string | non | déprécié Legacy signature, the hex HMAC-SHA256 of the raw body. Sunset 2027-06-30. |
Corps de la requête
Section intitulée « Corps de la requête »application/json
{ "title": "[Triggered] CPU usage above 90% on web-01", "alert_type": "error", "priority": "P2", "host": "web-01", "tags": [ "env:prod", "team:payments" ]}Réponses
Section intitulée « Réponses »| Statut | Description |
|---|---|
200 |
Event processed. |
400 |
Invalid request. |
401 |
Not authenticated. |
403 |
Signature invalid, expired or missing. |
404 |
Resource not found or not configured. |
503 |
The connector’s circuit breaker is open after repeated failures. Retry later. |
Exemple 200
{ "ok": true, "normalized": { "severity": "high", "title": "[Triggered] CPU usage above 90% on web-01", "source": "datadog" }, "ticket_created": "ACME-1044"}Exemple avec curl
Section intitulée « Exemple avec curl »curl -X POST "https://exocortex-api.ai-exo-cortex.com/api/connectors/<vendor>/ACME" \ -H "X-Exo-Timestamp: $TS" \ -H "X-Exo-Signature: v1=$SIGNATURE" \ -H "Content-Type: application/json" \ --data '{"title":"[Triggered] CPU usage above 90% on web-01","alert_type":"error","priority":"P2","host":"web-01","tags":["env:prod","team:payments"]}'Recevoir un événement pour une intégration ou une passerelle ITSM
Section intitulée « Recevoir un événement pour une intégration ou une passerelle ITSM »POST /api/integration/webhook/{integration_id}
Generic inbound endpoint for integrations configured in Core → Integration Center (for example ServiceNow, Jira, Zendesk, BMC or a generic REST source). The payload is mapped with the integration’s field mapping.
Signature: X-Exo-Timestamp + X-Exo-Signature (recommended). Otherwise one of
X-Bridge-Signature, X-Hub-Signature-256 or X-Signature carrying
sha256=<hex HMAC of the raw body>. A signature is mandatory when the integration has
a webhook secret, and integrations in webhook mode must have one.
Authentification: Aucune : la requête est authentifiée par la signature décrite ci-dessus.
Paramètres
Section intitulée « Paramètres »| Nom | Emplacement | Type | Obligatoire | Description |
|---|---|---|---|---|
integration_id |
chemin | string | oui | |
X-Exo-Timestamp |
en-tête | string | non | Unix time in seconds when the request was signed. Required when X-Exo-Signature is sent. |
X-Exo-Signature |
en-tête | string | non | v1= + hex HMAC-SHA256(secret, “<X-Exo-Timestamp>.<raw body>”). Several comma-separated values are allowed. |
Corps de la requête
Section intitulée « Corps de la requête »application/json
{ "sys_id": "6f1d2c3b4a5e", "number": "INC0012345", "short_description": "Email delivery delayed", "state": "2", "priority": "3"}Réponses
Section intitulée « Réponses »| Statut | Description |
|---|---|
200 |
Event processed. |
202 |
Event queued for durable processing. |
400 |
Invalid request. |
401 |
Signature missing or invalid. |
404 |
Resource not found or not configured. |
500 |
Unexpected server error. |
503 |
Circuit breaker open for this integration. |
Exemple 200
{ "ok": true, "accepted": true, "ticket_key": "ACME-1045", "action": "created"}Exemple avec curl
Section intitulée « Exemple avec curl »curl -X POST "https://exocortex-api.ai-exo-cortex.com/api/integration/webhook/servicenow_acme" \ -H "X-Exo-Timestamp: $TS" \ -H "X-Exo-Signature: v1=$SIGNATURE" \ -H "Content-Type: application/json" \ --data '{"sys_id":"6f1d2c3b4a5e","number":"INC0012345","short_description":"Email delivery delayed","state":"2","priority":"3"}'Recevoir un trap SNMP d’une passerelle
Section intitulée « Recevoir un trap SNMP d’une passerelle »POST /api/snmp-gateway/trap/{tenant}
Your SNMP-to-HTTP gateway converts traps to JSON and posts them here. Authentication:
X-NH-SNMP-Timestamp (Unix time in milliseconds) and
X-NH-SNMP-Signature: sha256=<hex HMAC-SHA256(secret, "<timestamp>|<raw body>")>,
with a 5-minute tolerance. The secret is set in Core → Integrations → SNMP gateway.
Authentification: Aucune : la requête est authentifiée par la signature décrite ci-dessus.
Paramètres
Section intitulée « Paramètres »| Nom | Emplacement | Type | Obligatoire | Description |
|---|---|---|---|---|
tenant |
chemin | string | oui | Tenant code (case-insensitive). |
X-NH-SNMP-Timestamp |
en-tête | string | oui | |
X-NH-SNMP-Signature |
en-tête | string | oui |
Corps de la requête
Section intitulée « Corps de la requête »application/json
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
source_ip |
string | non | |
source_sysname |
string | non | |
trap_oid |
string | oui | |
severity |
string (critical, major, minor, warning, info) |
non | |
varbinds |
object | non |
{ "source_ip": "192.0.2.10", "source_sysname": "core-sw-01", "trap_oid": "1.3.6.1.6.3.1.1.5.3", "severity": "major", "varbinds": { "1.3.6.1.2.1.2.2.1.1": "12", "1.3.6.1.2.1.2.2.1.2": "GigabitEthernet1/0/12" }}Réponses
Section intitulée « Réponses »| Statut | Description |
|---|---|
200 |
Trap ingested. |
400 |
Invalid request. |
401 |
Not authenticated. |
404 |
Resource not found or not configured. |
500 |
Unexpected server error. |
Exemple 200
{ "ok": true, "ticket_key": "ACME-1046", "ingestion_id": "ing_c1a2b3d4", "action": "created"}Exemple avec curl
Section intitulée « Exemple avec curl »curl -X POST "https://exocortex-api.ai-exo-cortex.com/api/snmp-gateway/trap/ACME" \ -H "Content-Type: application/json" \ --data '{"source_ip":"192.0.2.10","source_sysname":"core-sw-01","trap_oid":"1.3.6.1.6.3.1.1.5.3","severity":"major","varbinds":{"1.3.6.1.2.1.2.2.1.1":"12","1.3.6.1.2.1.2.2.1.2":"GigabitEthernet1/0/12"}}'Page générée à partir de la spécification OpenAPI de l’API d’intégration, version 1.1.0.