Webhook in entrata
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.
Ricevere un evento da uno strumento di monitoraggio, DevOps o sicurezza
Sezione intitolata “Ricevere un evento da uno strumento di monitoraggio, DevOps o sicurezza”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.
Autenticazione: Nessuna: la richiesta è autenticata dalla firma descritta sopra.
Parametri
Sezione intitolata “Parametri”| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
vendor |
percorso | 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) |
sì | |
project |
percorso | string | sì | |
X-Exo-Timestamp |
intestazione | string | no | Unix time in seconds when the request was signed. Required when X-Exo-Signature is sent. |
X-Exo-Signature |
intestazione | string | no | v1= + hex HMAC-SHA256(secret, “<X-Exo-Timestamp>.<raw body>”). Several comma-separated values are allowed. |
X-NH-Connector-Signature |
intestazione | string | no | deprecato Legacy signature, the hex HMAC-SHA256 of the raw body. Sunset 2027-06-30. |
Corpo della richiesta
Sezione intitolata “Corpo della richiesta”application/json
{ "title": "[Triggered] CPU usage above 90% on web-01", "alert_type": "error", "priority": "P2", "host": "web-01", "tags": [ "env:prod", "team:payments" ]}Risposte
Sezione intitolata “Risposte”| Stato | Descrizione |
|---|---|
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. |
Esempio 200
{ "ok": true, "normalized": { "severity": "high", "title": "[Triggered] CPU usage above 90% on web-01", "source": "datadog" }, "ticket_created": "ACME-1044"}Esempio con curl
Sezione intitolata “Esempio con 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"]}'Ricevere un evento per un’integrazione o un bridge ITSM
Sezione intitolata “Ricevere un evento per un’integrazione o un bridge 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.
Autenticazione: Nessuna: la richiesta è autenticata dalla firma descritta sopra.
Parametri
Sezione intitolata “Parametri”| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
integration_id |
percorso | string | sì | |
X-Exo-Timestamp |
intestazione | string | no | Unix time in seconds when the request was signed. Required when X-Exo-Signature is sent. |
X-Exo-Signature |
intestazione | string | no | v1= + hex HMAC-SHA256(secret, “<X-Exo-Timestamp>.<raw body>”). Several comma-separated values are allowed. |
Corpo della richiesta
Sezione intitolata “Corpo della richiesta”application/json
{ "sys_id": "6f1d2c3b4a5e", "number": "INC0012345", "short_description": "Email delivery delayed", "state": "2", "priority": "3"}Risposte
Sezione intitolata “Risposte”| Stato | Descrizione |
|---|---|
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. |
Esempio 200
{ "ok": true, "accepted": true, "ticket_key": "ACME-1045", "action": "created"}Esempio con curl
Sezione intitolata “Esempio con 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"}'Ricevere una trap SNMP da un gateway
Sezione intitolata “Ricevere una trap SNMP da un gateway”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.
Autenticazione: Nessuna: la richiesta è autenticata dalla firma descritta sopra.
Parametri
Sezione intitolata “Parametri”| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
tenant |
percorso | string | sì | Tenant code (case-insensitive). |
X-NH-SNMP-Timestamp |
intestazione | string | sì | |
X-NH-SNMP-Signature |
intestazione | string | sì |
Corpo della richiesta
Sezione intitolata “Corpo della richiesta”application/json
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
source_ip |
string | no | |
source_sysname |
string | no | |
trap_oid |
string | sì | |
severity |
string (critical, major, minor, warning, info) |
no | |
varbinds |
object | no |
{ "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" }}Risposte
Sezione intitolata “Risposte”| Stato | Descrizione |
|---|---|
200 |
Trap ingested. |
400 |
Invalid request. |
401 |
Not authenticated. |
404 |
Resource not found or not configured. |
500 |
Unexpected server error. |
Esempio 200
{ "ok": true, "ticket_key": "ACME-1046", "ingestion_id": "ing_c1a2b3d4", "action": "created"}Esempio con curl
Sezione intitolata “Esempio con 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"}}'Pagina generata dalla specifica OpenAPI dell’API di integrazione, versione 1.1.0.