Kibana Connectors
Core Concepts
Connectors store connection information for Elastic services and third-party systems. Alerting rules use connectors to
route actions (notifications) when rule conditions are met. Connectors are managed per Kibana Space.
Connector Categories
| Category |
Connector Types |
| LLM Providers |
OpenAI, Google Gemini, Amazon Bedrock, Elastic Managed LLMs, AI Connector, MCP (Preview, 9.3+) |
| Incident Management |
PagerDuty, Opsgenie, ServiceNow (ITSM, SecOps, ITOM), Jira, Jira Service Management (9.2+), IBM Resilient, Swimlane, Torq, Tines, D3 Security, XSOAR (9.1+), TheHive |
| Endpoint Security |
CrowdStrike, SentinelOne, Microsoft Defender for Endpoint |
| Messaging |
Slack (API / Webhook), Microsoft Teams, Email |
| Logging & Observability |
Server log, Index, Observability AI Assistant |
| Webhook |
Webhook, Webhook - Case Management, xMatters |
| Elastic |
Cases |
Authentication
All connector API calls require API key auth or Basic auth. Every mutating request must include the kbn-xsrf header.
kbn-xsrf: true
API Reference
Base path: <kibana_url>/api/actions (or /s/<space_id>/api/actions for non-default spaces).
| Operation |
Method |
Endpoint |
| Create connector |
POST |
/api/actions/connector/{id} |
| Update connector |
PUT |
/api/actions/connector/{id} |
| Get connector |
GET |
/api/actions/connector/{id} |
| Delete connector |
DELETE |
/api/actions/connector/{id} |
| Get all connectors |
GET |
/api/actions/connectors |
| Get connector types |
GET |
/api/actions/connector_types |
| Run connector |
POST |
/api/actions/connector/{id}/_execute |
Creating a Connector
Example: Create a Slack Connector (Webhook)
curl -X POST "https://my-kibana:5601/api/actions/connector/my-slack-connector" \
-H "kbn-xsrf: true" \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey <your-api-key>" \
-d '{
"name": "Production Slack Alerts",
"connector_type_id": ".slack",
"config": {},
"secrets": {
"webhookUrl": "https://hooks.slack.com/services/T00/B00/XXXX"
}
}'
Example: Create a PagerDuty Connector
curl -X POST "https://my-kibana:5601/api/actions/connector/my-pagerduty" \
-H "kbn-xsrf: true" \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey <your-api-key>" \
-d '{
"name": "PagerDuty Incidents",
"connector_type_id": ".pagerduty",
"config": {
"apiUrl": "https://events.pagerduty.com/v2/enqueue"
},
"secrets": {
"routingKey": "your-pagerduty-integration-key"
}
}'
Listing Connectors
curl -X GET "https://my-kibana:5601/api/actions/connectors" \
-H "Authorization: ApiKey <your-api-key>"
The response includes referenced_by_count showing how many rules use each connector. Always check this before deleting.
Running a Connector (Test)
curl -X POST "https://my-kibana:5601/api/actions/connector/my-slack-connector/_execute" \
-H "kbn-xsrf: true" \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey <your-api-key>" \
-d '{
"params": {
"message": "Test alert from API"
}
}'
Terraform Provider
resource "elasticstack_kibana_action_connector" "slack" {
name = "Production Slack Alerts"
connector_type_id = ".slack"
config = jsonencode({})
secrets = jsonencode({
webhookUrl = "https://hooks.slack.com/services/T00/B00/XXXX"
})
}
Common Connector Type IDs
| Type ID |
Name |
License |
.email |
Email |
Gold |
.slack |
Slack (Webhook) |
Gold |
.slack_api |
Slack (API) |
Gold |
.pagerduty |
PagerDuty |
Gold |
.jira |
Jira |
Gold |
.servicenow |
ServiceNow ITSM |
Platinum |
.webhook |
Webhook |
Gold |
.index |
Index |
Basic |
.server-log |
Server log |
Basic |
.opsgenie |
Opsgenie |
Gold |
.teams |
Microsoft Teams |
Gold |
.gen-ai |
OpenAI |
Enterprise |
.bedrock |
Amazon Bedrock |
Enterprise |
.gemini |
Google Gemini |
Enterprise |
.cases |
Cases |
Platinum |
Best Practices
- Use preconfigured connectors for production on-prem. They eliminate secret sprawl.
- Test connectors before attaching to rules. Use the
_execute endpoint.
- Check
referenced_by_count before deleting.
- One connector per service, not per rule. Create a single Slack connector and reference it from multiple rules.
- Use Spaces for multi-tenant isolation.
- Always configure a recovery action alongside the active action.
- Use deduplication keys for on-call connectors. Set
dedupKey to {{rule.id}}-{{alert.id}}.
Common Pitfalls
- Missing
kbn-xsrf header. Returns 400.
- Wrong
connector_type_id. Must include leading dot (e.g., .slack).
- Empty
secrets object required. Even for connectors without secrets, pass "secrets": {}.
- Connector type is immutable. Delete and recreate to change it.
- Secrets lost on export/import. Must re-enter secrets manually after import.
Guidelines
- Include
kbn-xsrf: true on every POST, PUT, and DELETE.
connector_type_id is immutable — delete and recreate to change connector type.
- Always pass
"secrets": {} even for connectors with no secrets.
- Check
referenced_by_count before deleting.
- Connectors are space-scoped; prefix paths with
/s/<space_id>/api/actions/ for non-default Kibana Spaces.
- Test every new connector with
_execute before attaching to rules.
1---2name: kibana-connectors3description: Create and manage Kibana connectors for Slack, PagerDuty, Jira, webhooks, and more via REST API or Terraform. Use when configuring third-party integrations or managing connectors as code.4---56# Kibana Connectors78## Core Concepts910Connectors store connection information for Elastic services and third-party systems. Alerting rules use connectors to11route **actions** (notifications) when rule conditions are met. Connectors are managed per **Kibana Space**.1213### Connector Categories1415| Category | Connector Types |16| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |17| **LLM Providers** | OpenAI, Google Gemini, Amazon Bedrock, Elastic Managed LLMs, AI Connector, MCP (Preview, 9.3+) |18| **Incident Management** | PagerDuty, Opsgenie, ServiceNow (ITSM, SecOps, ITOM), Jira, Jira Service Management (9.2+), IBM Resilient, Swimlane, Torq, Tines, D3 Security, XSOAR (9.1+), TheHive |19| **Endpoint Security** | CrowdStrike, SentinelOne, Microsoft Defender for Endpoint |20| **Messaging** | Slack (API / Webhook), Microsoft Teams, Email |21| **Logging & Observability** | Server log, Index, Observability AI Assistant |22| **Webhook** | Webhook, Webhook - Case Management, xMatters |23| **Elastic** | Cases |2425## Authentication2627All connector API calls require API key auth or Basic auth. Every mutating request must include the `kbn-xsrf` header.2829```http30kbn-xsrf: true31```3233## API Reference3435Base path: `<kibana_url>/api/actions` (or `/s/<space_id>/api/actions` for non-default spaces).3637| Operation | Method | Endpoint |38| ------------------- | ------ | -------------------------------------- |39| Create connector | POST | `/api/actions/connector/{id}` |40| Update connector | PUT | `/api/actions/connector/{id}` |41| Get connector | GET | `/api/actions/connector/{id}` |42| Delete connector | DELETE | `/api/actions/connector/{id}` |43| Get all connectors | GET | `/api/actions/connectors` |44| Get connector types | GET | `/api/actions/connector_types` |45| Run connector | POST | `/api/actions/connector/{id}/_execute` |4647## Creating a Connector4849### Example: Create a Slack Connector (Webhook)5051```bash52curl -X POST "https://my-kibana:5601/api/actions/connector/my-slack-connector" \53 -H "kbn-xsrf: true" \54 -H "Content-Type: application/json" \55 -H "Authorization: ApiKey <your-api-key>" \56 -d '{57 "name": "Production Slack Alerts",58 "connector_type_id": ".slack",59 "config": {},60 "secrets": {61 "webhookUrl": "https://hooks.slack.com/services/T00/B00/XXXX"62 }63 }'64```6566### Example: Create a PagerDuty Connector6768```bash69curl -X POST "https://my-kibana:5601/api/actions/connector/my-pagerduty" \70 -H "kbn-xsrf: true" \71 -H "Content-Type: application/json" \72 -H "Authorization: ApiKey <your-api-key>" \73 -d '{74 "name": "PagerDuty Incidents",75 "connector_type_id": ".pagerduty",76 "config": {77 "apiUrl": "https://events.pagerduty.com/v2/enqueue"78 },79 "secrets": {80 "routingKey": "your-pagerduty-integration-key"81 }82 }'83```8485## Listing Connectors8687```bash88curl -X GET "https://my-kibana:5601/api/actions/connectors" \89 -H "Authorization: ApiKey <your-api-key>"90```9192The response includes `referenced_by_count` showing how many rules use each connector. Always check this before deleting.9394## Running a Connector (Test)9596```bash97curl -X POST "https://my-kibana:5601/api/actions/connector/my-slack-connector/_execute" \98 -H "kbn-xsrf: true" \99 -H "Content-Type: application/json" \100 -H "Authorization: ApiKey <your-api-key>" \101 -d '{102 "params": {103 "message": "Test alert from API"104 }105 }'106```107108## Terraform Provider109110```hcl111resource "elasticstack_kibana_action_connector" "slack" {112 name = "Production Slack Alerts"113 connector_type_id = ".slack"114115 config = jsonencode({})116117 secrets = jsonencode({118 webhookUrl = "https://hooks.slack.com/services/T00/B00/XXXX"119 })120}121```122123## Common Connector Type IDs124125| Type ID | Name | License |126| ------------------------------ | ------------------------------- | ---------- |127| `.email` | Email | Gold |128| `.slack` | Slack (Webhook) | Gold |129| `.slack_api` | Slack (API) | Gold |130| `.pagerduty` | PagerDuty | Gold |131| `.jira` | Jira | Gold |132| `.servicenow` | ServiceNow ITSM | Platinum |133| `.webhook` | Webhook | Gold |134| `.index` | Index | Basic |135| `.server-log` | Server log | Basic |136| `.opsgenie` | Opsgenie | Gold |137| `.teams` | Microsoft Teams | Gold |138| `.gen-ai` | OpenAI | Enterprise |139| `.bedrock` | Amazon Bedrock | Enterprise |140| `.gemini` | Google Gemini | Enterprise |141| `.cases` | Cases | Platinum |142143## Best Practices1441451. **Use preconfigured connectors for production on-prem.** They eliminate secret sprawl.1462. **Test connectors before attaching to rules.** Use the `_execute` endpoint.1473. **Check `referenced_by_count` before deleting.**1484. **One connector per service, not per rule.** Create a single Slack connector and reference it from multiple rules.1495. **Use Spaces for multi-tenant isolation.**1506. **Always configure a recovery action alongside the active action.**1517. **Use deduplication keys for on-call connectors.** Set `dedupKey` to `{{rule.id}}-{{alert.id}}`.152153## Common Pitfalls1541551. **Missing `kbn-xsrf` header.** Returns 400.1562. **Wrong `connector_type_id`.** Must include leading dot (e.g., `.slack`).1573. **Empty `secrets` object required.** Even for connectors without secrets, pass `"secrets": {}`.1584. **Connector type is immutable.** Delete and recreate to change it.1595. **Secrets lost on export/import.** Must re-enter secrets manually after import.160161## Guidelines162163- Include `kbn-xsrf: true` on every POST, PUT, and DELETE.164- `connector_type_id` is immutable — delete and recreate to change connector type.165- Always pass `"secrets": {}` even for connectors with no secrets.166- Check `referenced_by_count` before deleting.167- Connectors are space-scoped; prefix paths with `/s/<space_id>/api/actions/` for non-default Kibana Spaces.168- Test every new connector with `_execute` before attaching to rules.