Get a data reaction
GEThttps://api.spice.ai/v1/projects/{projectId}/reactions/{alertId}
Returns a single data reaction. Requires reactions:read.
Authorizations
AuthorizationstringRequiredBearer <token>. Authentication lists the tokens it accepts.
Path parameters
projectIdintegerRequiredalertIdstring (uuid)Required
Header parameters
X-Org-NamestringThe organization to act on, by handle. Omit it to act on the organization the credential is bound to; sending it blank is a 400, not the same as omitting it. A user credential may name any organization its owner belongs to; a machine credential is pinned to its own. A portal session token is bound to none, so it must send this header on every route but
GET /v1/orgs(400org_assertion_requiredotherwise).- Pattern:
^[A-Za-z0-9._-]{1,255}$
- Pattern:
Responses
200Reactionapplication/json
A data reaction, as returned by the list, get, create and update operations. Every property is always present; a nullable one carries null rather than being omitted. Fields not listed here are internal to the platform and are not part of the contract.
idstring (uuid)RequiredIdentifier of the monitor or reaction. This is the value the get, update and delete operations take.
org_idintegerRequiredOrganization that owns the project
app_idintegerRequiredProject the monitor or reaction belongs to
created_byinteger | nullRequiredUser who created it, when it was created by a user credential
namestringRequiredDisplay name, unique case-insensitively among the project's live monitors and data reactions
descriptionstring | nullRequiredkindstringRequiredThe reactions endpoints only ever return
data.- Value:
data
- Value:
statusstringRequiredWhether it is evaluating
- Allowed values:
active,disabled
- Allowed values:
template_idstringRequiredTemplate it was created from
specobjectRequiredReaction parameters, normalized for the response: a reaction whose model transform is still held on
targetis returned with that transform copied intospec.model. Which properties are meaningful is decided bytemplate_id. The create operation's request body lists the properties each template reads.targetobjectRequiredThe primary sink (email, then slack, then http).
targetsis the full list. An HTTP sink'stokenis write-only and is never returned.3 options
One of
type: emailobject
typestringRequired- Value:
email
- Value:
recipientUserIdsarray of integeremailsarray of string (email)
type: httpobject
typestringRequired- Value:
http
- Value:
urlstring (uri) | ""RequiredThe sink's URL. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
methodstring- Allowed values:
POST,PUT,PATCH
- Allowed values:
type: slackobject
typestringRequired- Value:
slack
- Value:
channelIdstring | ""RequiredThe Slack channel ID. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
channelNamestring- Minimum length:
1 - Maximum length:
80
- Minimum length:
targetsarray of objectRequiredEvery configured sink, ordered email, then slack, then http.
targetis the first of these. An HTTP sink's token is never returned.- Minimum items:
1 - Maximum items:
3
3 options
One of
type: emailobject
typestringRequired- Value:
email
- Value:
recipientUserIdsarray of integeremailsarray of string (email)
type: httpobject
typestringRequired- Value:
http
- Value:
urlstring (uri) | ""RequiredThe sink's URL. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
methodstring- Allowed values:
POST,PUT,PATCH
- Allowed values:
type: slackobject
typestringRequired- Value:
slack
- Value:
channelIdstring | ""RequiredThe Slack channel ID. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
channelNamestring- Minimum length:
1 - Maximum length:
80
- Minimum length:
- Minimum items:
recipient_user_idsarray of integerRequiredOrganization members emailed when it fires. Empty when there is no email sink, and for an email sink addressed only by
emails. When a created email sink named no recipients at all, the API stores the creating user.last_fired_atstring (date-time) | nullRequiredWhen it last fired, or null if it never has
last_resolved_atstring (date-time) | nullRequiredWhen it last resolved, or null if it never has
created_atstring (date-time)Requiredupdated_atstring (date-time)Required
400Invalid project or reaction ID
401Unauthorized
403Insufficient scope
404Project or reaction not found
500Internal server error
curl "https://api.spice.ai/v1/projects/<projectId>/reactions/<alertId>" \
-H "Authorization: Bearer <token>"GET /v1/projects/<projectId>/reactions/<alertId> HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>{
"id": "123e4567-e89b-12d3-a456-426614174000",
"org_id": 0,
"app_id": 0,
"created_by": 0,
"name": "string",
"description": "string",
"kind": "data",
"status": "active",
"template_id": "string",
"spec": {},
"target": {
"type": "email",
"recipientUserIds": [
0
],
"emails": [
"user@example.com"
]
},
"targets": [
{
"type": "email",
"recipientUserIds": [
0
],
"emails": [
"user@example.com"
]
}
],
"recipient_user_ids": [
0
],
"last_fired_at": "2026-01-01T00:00:00Z",
"last_resolved_at": "2026-01-01T00:00:00Z",
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z"
}application/json
No response body
No response body
No response body
No response body
No response body
GEThttps://api.spice.ai/v1/orgs/{orgId}/projects/{projectId}/reactions/{alertId}
The org is orgId in the path. Returns a single data reaction. Requires reactions:read.
Authorizations
AuthorizationstringRequiredBearer <token>. Authentication lists the tokens it accepts.
Path parameters
orgIdintegerRequiredThe org id from GET /v1/orgs
- Minimum:
1
- Minimum:
projectIdintegerRequiredalertIdstring (uuid)Required
Header parameters
X-Org-NamestringWhen present, X-Org-Name must name the same org as orgId. Otherwise the request returns org_path_mismatch (400).
- Pattern:
^[A-Za-z0-9._-]{1,255}$
- Pattern:
Responses
200Reactionapplication/json
A data reaction, as returned by the list, get, create and update operations. Every property is always present; a nullable one carries null rather than being omitted. Fields not listed here are internal to the platform and are not part of the contract.
idstring (uuid)RequiredIdentifier of the monitor or reaction. This is the value the get, update and delete operations take.
org_idintegerRequiredOrganization that owns the project
app_idintegerRequiredProject the monitor or reaction belongs to
created_byinteger | nullRequiredUser who created it, when it was created by a user credential
namestringRequiredDisplay name, unique case-insensitively among the project's live monitors and data reactions
descriptionstring | nullRequiredkindstringRequiredThe reactions endpoints only ever return
data.- Value:
data
- Value:
statusstringRequiredWhether it is evaluating
- Allowed values:
active,disabled
- Allowed values:
template_idstringRequiredTemplate it was created from
specobjectRequiredReaction parameters, normalized for the response: a reaction whose model transform is still held on
targetis returned with that transform copied intospec.model. Which properties are meaningful is decided bytemplate_id. The create operation's request body lists the properties each template reads.targetobjectRequiredThe primary sink (email, then slack, then http).
targetsis the full list. An HTTP sink'stokenis write-only and is never returned.3 options
One of
type: emailobject
typestringRequired- Value:
email
- Value:
recipientUserIdsarray of integeremailsarray of string (email)
type: httpobject
typestringRequired- Value:
http
- Value:
urlstring (uri) | ""RequiredThe sink's URL. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
methodstring- Allowed values:
POST,PUT,PATCH
- Allowed values:
type: slackobject
typestringRequired- Value:
slack
- Value:
channelIdstring | ""RequiredThe Slack channel ID. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
channelNamestring- Minimum length:
1 - Maximum length:
80
- Minimum length:
targetsarray of objectRequiredEvery configured sink, ordered email, then slack, then http.
targetis the first of these. An HTTP sink's token is never returned.- Minimum items:
1 - Maximum items:
3
3 options
One of
type: emailobject
typestringRequired- Value:
email
- Value:
recipientUserIdsarray of integeremailsarray of string (email)
type: httpobject
typestringRequired- Value:
http
- Value:
urlstring (uri) | ""RequiredThe sink's URL. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
methodstring- Allowed values:
POST,PUT,PATCH
- Allowed values:
type: slackobject
typestringRequired- Value:
slack
- Value:
channelIdstring | ""RequiredThe Slack channel ID. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
channelNamestring- Minimum length:
1 - Maximum length:
80
- Minimum length:
- Minimum items:
recipient_user_idsarray of integerRequiredOrganization members emailed when it fires. Empty when there is no email sink, and for an email sink addressed only by
emails. When a created email sink named no recipients at all, the API stores the creating user.last_fired_atstring (date-time) | nullRequiredWhen it last fired, or null if it never has
last_resolved_atstring (date-time) | nullRequiredWhen it last resolved, or null if it never has
created_atstring (date-time)Requiredupdated_atstring (date-time)Required
400Bad Request
Invalid project or reaction ID. orgId is not a valid org id (invalid_org_id), or X-Org-Name does not name that org (org_path_mismatch).
401Unauthorized
403Forbidden
Insufficient scope. The caller is not a member of the org (org_forbidden). A machine credential named a different org (org_assertion_mismatch). The org is deleted (org_deleted).
404Project or reaction not found
500Internal server error
curl "https://api.spice.ai/v1/orgs/<orgId>/projects/<projectId>/reactions/<alertId>" \
-H "Authorization: Bearer <token>"GET /v1/orgs/<orgId>/projects/<projectId>/reactions/<alertId> HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>{
"id": "123e4567-e89b-12d3-a456-426614174000",
"org_id": 0,
"app_id": 0,
"created_by": 0,
"name": "string",
"description": "string",
"kind": "data",
"status": "active",
"template_id": "string",
"spec": {},
"target": {
"type": "email",
"recipientUserIds": [
0
],
"emails": [
"user@example.com"
]
},
"targets": [
{
"type": "email",
"recipientUserIds": [
0
],
"emails": [
"user@example.com"
]
}
],
"recipient_user_ids": [
0
],
"last_fired_at": "2026-01-01T00:00:00Z",
"last_resolved_at": "2026-01-01T00:00:00Z",
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z"
}application/json
No response body
No response body
No response body
No response body
No response body
GEThttps://api.spice.ai/v1/apps/{appId}/reactions/{alertId}Deprecated
Legacy alias of /v1/projects/{projectId}/reactions/{alertId} — projects were previously called apps. Returns a single data reaction. Requires reactions:read.
Authorizations
AuthorizationstringRequiredBearer <token>. Authentication lists the tokens it accepts.
Path parameters
appIdintegerRequiredalertIdstring (uuid)Required
Header parameters
X-Org-NamestringThe organization to act on, by handle. Omit it to act on the organization the credential is bound to; sending it blank is a 400, not the same as omitting it. A user credential may name any organization its owner belongs to; a machine credential is pinned to its own. A portal session token is bound to none, so it must send this header on every route but
GET /v1/orgs(400org_assertion_requiredotherwise).- Pattern:
^[A-Za-z0-9._-]{1,255}$
- Pattern:
Responses
200Reactionapplication/json
A data reaction, as returned by the list, get, create and update operations. Every property is always present; a nullable one carries null rather than being omitted. Fields not listed here are internal to the platform and are not part of the contract.
idstring (uuid)RequiredIdentifier of the monitor or reaction. This is the value the get, update and delete operations take.
org_idintegerRequiredOrganization that owns the project
app_idintegerRequiredProject the monitor or reaction belongs to
created_byinteger | nullRequiredUser who created it, when it was created by a user credential
namestringRequiredDisplay name, unique case-insensitively among the project's live monitors and data reactions
descriptionstring | nullRequiredkindstringRequiredThe reactions endpoints only ever return
data.- Value:
data
- Value:
statusstringRequiredWhether it is evaluating
- Allowed values:
active,disabled
- Allowed values:
template_idstringRequiredTemplate it was created from
specobjectRequiredReaction parameters, normalized for the response: a reaction whose model transform is still held on
targetis returned with that transform copied intospec.model. Which properties are meaningful is decided bytemplate_id. The create operation's request body lists the properties each template reads.targetobjectRequiredThe primary sink (email, then slack, then http).
targetsis the full list. An HTTP sink'stokenis write-only and is never returned.3 options
One of
type: emailobject
typestringRequired- Value:
email
- Value:
recipientUserIdsarray of integeremailsarray of string (email)
type: httpobject
typestringRequired- Value:
http
- Value:
urlstring (uri) | ""RequiredThe sink's URL. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
methodstring- Allowed values:
POST,PUT,PATCH
- Allowed values:
type: slackobject
typestringRequired- Value:
slack
- Value:
channelIdstring | ""RequiredThe Slack channel ID. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
channelNamestring- Minimum length:
1 - Maximum length:
80
- Minimum length:
targetsarray of objectRequiredEvery configured sink, ordered email, then slack, then http.
targetis the first of these. An HTTP sink's token is never returned.- Minimum items:
1 - Maximum items:
3
3 options
One of
type: emailobject
typestringRequired- Value:
email
- Value:
recipientUserIdsarray of integeremailsarray of string (email)
type: httpobject
typestringRequired- Value:
http
- Value:
urlstring (uri) | ""RequiredThe sink's URL. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
methodstring- Allowed values:
POST,PUT,PATCH
- Allowed values:
type: slackobject
typestringRequired- Value:
slack
- Value:
channelIdstring | ""RequiredThe Slack channel ID. An empty string means the stored sink no longer passes validation. Update the sink to replace it.
channelNamestring- Minimum length:
1 - Maximum length:
80
- Minimum length:
- Minimum items:
recipient_user_idsarray of integerRequiredOrganization members emailed when it fires. Empty when there is no email sink, and for an email sink addressed only by
emails. When a created email sink named no recipients at all, the API stores the creating user.last_fired_atstring (date-time) | nullRequiredWhen it last fired, or null if it never has
last_resolved_atstring (date-time) | nullRequiredWhen it last resolved, or null if it never has
created_atstring (date-time)Requiredupdated_atstring (date-time)Required
400Invalid project or reaction ID
401Unauthorized
403Insufficient scope
404Project or reaction not found
500Internal server error
OpenAPIapi.spice.ai/openapi.json
curl "https://api.spice.ai/v1/apps/<appId>/reactions/<alertId>" \
-H "Authorization: Bearer <token>"GET /v1/apps/<appId>/reactions/<alertId> HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>{
"id": "123e4567-e89b-12d3-a456-426614174000",
"org_id": 0,
"app_id": 0,
"created_by": 0,
"name": "string",
"description": "string",
"kind": "data",
"status": "active",
"template_id": "string",
"spec": {},
"target": {
"type": "email",
"recipientUserIds": [
0
],
"emails": [
"user@example.com"
]
},
"targets": [
{
"type": "email",
"recipientUserIds": [
0
],
"emails": [
"user@example.com"
]
}
],
"recipient_user_ids": [
0
],
"last_fired_at": "2026-01-01T00:00:00Z",
"last_resolved_at": "2026-01-01T00:00:00Z",
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z"
}application/json
No response body
No response body
No response body
No response body
No response body