Webhooks entrantes
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.
Recibir un evento de una herramienta de monitorización, DevOps o seguridad
Sección titulada «Recibir un evento de una herramienta de monitorización, DevOps o seguridad»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.
Autenticación: Ninguna: la solicitud se autentica con la firma descrita arriba.
Parámetros
Sección titulada «Parámetros»| Nombre | Dónde | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
vendor |
ruta | 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 |
ruta | string | sí | |
X-Exo-Timestamp |
cabecera | string | no | Unix time in seconds when the request was signed. Required when X-Exo-Signature is sent. |
X-Exo-Signature |
cabecera | string | no | v1= + hex HMAC-SHA256(secret, “<X-Exo-Timestamp>.<raw body>”). Several comma-separated values are allowed. |
X-NH-Connector-Signature |
cabecera | string | no | obsoleto Legacy signature, the hex HMAC-SHA256 of the raw body. Sunset 2027-06-30. |
Cuerpo de la solicitud
Sección titulada «Cuerpo de la solicitud»application/json
{ "title": "[Triggered] CPU usage above 90% on web-01", "alert_type": "error", "priority": "P2", "host": "web-01", "tags": [ "env:prod", "team:payments" ]}Respuestas
Sección titulada «Respuestas»| Estado | Descripción |
|---|---|
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. |
Ejemplo 200
{ "ok": true, "normalized": { "severity": "high", "title": "[Triggered] CPU usage above 90% on web-01", "source": "datadog" }, "ticket_created": "ACME-1044"}Ejemplo con curl
Sección titulada «Ejemplo 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"]}'Recibir un evento para una integración o un puente ITSM
Sección titulada «Recibir un evento para una integración o un puente 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.
Autenticación: Ninguna: la solicitud se autentica con la firma descrita arriba.
Parámetros
Sección titulada «Parámetros»| Nombre | Dónde | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
integration_id |
ruta | string | sí | |
X-Exo-Timestamp |
cabecera | string | no | Unix time in seconds when the request was signed. Required when X-Exo-Signature is sent. |
X-Exo-Signature |
cabecera | string | no | v1= + hex HMAC-SHA256(secret, “<X-Exo-Timestamp>.<raw body>”). Several comma-separated values are allowed. |
Cuerpo de la solicitud
Sección titulada «Cuerpo de la solicitud»application/json
{ "sys_id": "6f1d2c3b4a5e", "number": "INC0012345", "short_description": "Email delivery delayed", "state": "2", "priority": "3"}Respuestas
Sección titulada «Respuestas»| Estado | Descripción |
|---|---|
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. |
Ejemplo 200
{ "ok": true, "accepted": true, "ticket_key": "ACME-1045", "action": "created"}Ejemplo con curl
Sección titulada «Ejemplo 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"}'Recibir un trap SNMP de una pasarela
Sección titulada «Recibir un trap SNMP de una pasarela»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.
Autenticación: Ninguna: la solicitud se autentica con la firma descrita arriba.
Parámetros
Sección titulada «Parámetros»| Nombre | Dónde | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
tenant |
ruta | string | sí | Tenant code (case-insensitive). |
X-NH-SNMP-Timestamp |
cabecera | string | sí | |
X-NH-SNMP-Signature |
cabecera | string | sí |
Cuerpo de la solicitud
Sección titulada «Cuerpo de la solicitud»application/json
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
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" }}Respuestas
Sección titulada «Respuestas»| Estado | Descripción |
|---|---|
200 |
Trap ingested. |
400 |
Invalid request. |
401 |
Not authenticated. |
404 |
Resource not found or not configured. |
500 |
Unexpected server error. |
Ejemplo 200
{ "ok": true, "ticket_key": "ACME-1046", "ingestion_id": "ing_c1a2b3d4", "action": "created"}Ejemplo con curl
Sección titulada «Ejemplo 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"}}'Página generada a partir de la especificación OpenAPI de la API de integración, versión 1.1.0.