docs/documentation/platform/event-subscriptions.mdx
Event Subscriptions allow you to receive real-time notifications when specific actions occur within your Infisical projects. You can subscribe to changes such as secret modifications, with support for additional resource types coming soon.
Event Subscriptions use Server-Sent Events (SSE) to deliver real-time updates to your applications:
You can subscribe to the following event types:
| Event | Description |
|---|---|
secret:create | Triggered when a new secret is created |
secret:update | Triggered when an existing secret is modified |
secret:delete | Triggered when a secret is removed |
secret:import-mutation | Triggered when a secret changes via an import |
To receive events, the machine identity must have the Secret Events permission with the appropriate actions enabled.
<Steps> <Step title="Open Project Roles">  Go to **Access Management** and select **Project Roles**.
Create a new role for event subscriptions, or edit an existing one.
Select the resources the role should have access to.

Enable the actions corresponding to the events you want to receive (e.g., read, create, update, delete).
You can scope events to specific secret paths, environments, or other conditions.
This allows you to receive only the events relevant to your use case, reducing noise and improving efficiency.
Event Subscriptions are currently available via the Events API. Support for SDKs, Kubernetes Operator, and other integrations is coming soon.
You need an authentication token from a machine identity. Follow the machine identities documentation to set up authentication.
To subscribe to events, make a request to the events endpoint with your project ID and optional filters.
| Parameter | Type | Description |
|---|---|---|
projectId | string | The ID of the project to subscribe to |
register | array | List of event filters |
register[].conditions | object | Optional conditions to filter events |
register[].conditions.environmentSlug | string | Filter by environment (e.g., dev, staging, prod) |
register[].conditions.secretPath | string | Filter by secret path (e.g., /api/keys) |
The endpoint responds with Content-Type: text/event-stream to initiate an SSE connection. In the cURL example below, we use the -N flag to keep the connection open to receive incoming events from Infisical.
curl -X POST -N --location \
'https://app.infisical.com/api/v1/events/subscribe/project-events' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <identity-access-token>" \
--data '{
"projectId": "<project-id>",
"register": [
{
"event": "secret:create",
"conditions": {
"environmentSlug": "dev",
"secretPath": "/micro_service1"
}
},
{
"event": "secret:update",
"conditions": {
"environmentSlug": "staging",
"secretPath": "/**"
}
},
{
"event": "secret:delete",
"conditions": {
"environmentSlug": "prod",
"secretPath": "/database"
}
},
{
"event": "secret:import-mutation",
"conditions": {
"environmentSlug": "prod",
"secretPath": "/database"
}
}
]
}'
{
"projectType": "secret-manager",
"data": {
"eventType": "secret:create|update|delete",
"payload": [
{
"environment": "staging",
"secretPath": "/",
"secretKey": "SECRET_KEY1"
},
{
"environment": "staging",
"secretPath": "/",
"secretKey": "SECRET_KEY2"
}
],
}
}
{
"projectType": "secret-manager",
"data": {
"eventType": "secret:import-mutation",
"payload": {
"environment": "staging",
"secretPath": "/"
}
}
}