Management APIs / Reactions

List data reactions

GEThttps://api.spice.ai/v1/projects/{projectId}/reactions

Returns Drasi data reactions for the specified project. Requires reactions:read.

Authorizations

  • AuthorizationstringRequired

    Bearer <token>. Authentication lists the tokens it accepts.

Path parameters

  • projectIdintegerRequired

    The ID of the project

Header parameters

  • X-Org-Namestring

    The 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 (400 org_assertion_required otherwise).

    • Pattern: ^[A-Za-z0-9._-]{1,255}$

Responses

200List of data reactionsapplication/json
  • reactionsarray of object

    17 properties
    • idstring (uuid)Required

      Identifier of the monitor or reaction. This is the value the get, update and delete operations take.

    • org_idintegerRequired

      Organization that owns the project

    • app_idintegerRequired

      Project the monitor or reaction belongs to

    • created_byinteger | nullRequired

      User who created it, when it was created by a user credential

    • namestringRequired

      Display name, unique case-insensitively among the project's live monitors and data reactions

    • descriptionstring | nullRequired

    • kindstringRequired

      The reactions endpoints only ever return data.

      • Value: data
    • statusstringRequired

      Whether it is evaluating

      • Allowed values: active, disabled
    • template_idstringRequired

      Template it was created from

    • specobjectRequired

      Reaction parameters, normalized for the response: a reaction whose model transform is still held on target is returned with that transform copied into spec.model. Which properties are meaningful is decided by template_id. The create operation's request body lists the properties each template reads.

    • targetobjectRequired

      The primary sink (email, then slack, then http). targets is the full list. An HTTP sink's token is write-only and is never returned.

      3 options

      One of

      type: emailobject
      • typestringRequired

        • Value: email
      • recipientUserIdsarray of integer

      • emailsarray of string (email)

      type: httpobject
      • typestringRequired

        • Value: http
      • urlstring (uri) | ""Required

        The 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
      type: slackobject
      • typestringRequired

        • Value: slack
      • channelIdstring | ""Required

        The 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
    • targetsarray of objectRequired

      Every configured sink, ordered email, then slack, then http. target is 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
      • recipientUserIdsarray of integer

      • emailsarray of string (email)

      type: httpobject
      • typestringRequired

        • Value: http
      • urlstring (uri) | ""Required

        The 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
      type: slackobject
      • typestringRequired

        • Value: slack
      • channelIdstring | ""Required

        The 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
    • recipient_user_idsarray of integerRequired

      Organization 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) | nullRequired

      When it last fired, or null if it never has

    • last_resolved_atstring (date-time) | nullRequired

      When it last resolved, or null if it never has

    • created_atstring (date-time)Required

    • updated_atstring (date-time)Required

400Invalid project ID

401Unauthorized

403Insufficient scope

404Project not found

500Internal server error

curl "https://api.spice.ai/v1/projects/<projectId>/reactions" \
  -H "Authorization: Bearer <token>"
{
  "reactions": [
    {
      "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

GEThttps://api.spice.ai/v1/orgs/{orgId}/projects/{projectId}/reactions

The org is orgId in the path. Returns Drasi data reactions for the specified project. Requires reactions:read.

Authorizations

  • AuthorizationstringRequired

    Bearer <token>. Authentication lists the tokens it accepts.

Path parameters

  • orgIdintegerRequired

    The org id from GET /v1/orgs

    • Minimum: 1
  • projectIdintegerRequired

    The ID of the project

Header parameters

  • X-Org-Namestring

    When 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}$

Responses

200List of data reactionsapplication/json
  • reactionsarray of object

    17 properties
    • idstring (uuid)Required

      Identifier of the monitor or reaction. This is the value the get, update and delete operations take.

    • org_idintegerRequired

      Organization that owns the project

    • app_idintegerRequired

      Project the monitor or reaction belongs to

    • created_byinteger | nullRequired

      User who created it, when it was created by a user credential

    • namestringRequired

      Display name, unique case-insensitively among the project's live monitors and data reactions

    • descriptionstring | nullRequired

    • kindstringRequired

      The reactions endpoints only ever return data.

      • Value: data
    • statusstringRequired

      Whether it is evaluating

      • Allowed values: active, disabled
    • template_idstringRequired

      Template it was created from

    • specobjectRequired

      Reaction parameters, normalized for the response: a reaction whose model transform is still held on target is returned with that transform copied into spec.model. Which properties are meaningful is decided by template_id. The create operation's request body lists the properties each template reads.

    • targetobjectRequired

      The primary sink (email, then slack, then http). targets is the full list. An HTTP sink's token is write-only and is never returned.

      3 options

      One of

      type: emailobject
      • typestringRequired

        • Value: email
      • recipientUserIdsarray of integer

      • emailsarray of string (email)

      type: httpobject
      • typestringRequired

        • Value: http
      • urlstring (uri) | ""Required

        The 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
      type: slackobject
      • typestringRequired

        • Value: slack
      • channelIdstring | ""Required

        The 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
    • targetsarray of objectRequired

      Every configured sink, ordered email, then slack, then http. target is 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
      • recipientUserIdsarray of integer

      • emailsarray of string (email)

      type: httpobject
      • typestringRequired

        • Value: http
      • urlstring (uri) | ""Required

        The 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
      type: slackobject
      • typestringRequired

        • Value: slack
      • channelIdstring | ""Required

        The 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
    • recipient_user_idsarray of integerRequired

      Organization 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) | nullRequired

      When it last fired, or null if it never has

    • last_resolved_atstring (date-time) | nullRequired

      When it last resolved, or null if it never has

    • created_atstring (date-time)Required

    • updated_atstring (date-time)Required

400Bad Request

Invalid project 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 not found

500Internal server error

curl "https://api.spice.ai/v1/orgs/<orgId>/projects/<projectId>/reactions" \
  -H "Authorization: Bearer <token>"
{
  "reactions": [
    {
      "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

GEThttps://api.spice.ai/v1/apps/{appId}/reactionsDeprecated

Legacy alias of /v1/projects/{projectId}/reactions — projects were previously called apps. Returns Drasi data reactions for the specified project. Requires reactions:read.

Authorizations

  • AuthorizationstringRequired

    Bearer <token>. Authentication lists the tokens it accepts.

Path parameters

  • appIdintegerRequired

    The ID of the project

Header parameters

  • X-Org-Namestring

    The 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 (400 org_assertion_required otherwise).

    • Pattern: ^[A-Za-z0-9._-]{1,255}$

Responses

200List of data reactionsapplication/json
  • reactionsarray of object

    17 properties
    • idstring (uuid)Required

      Identifier of the monitor or reaction. This is the value the get, update and delete operations take.

    • org_idintegerRequired

      Organization that owns the project

    • app_idintegerRequired

      Project the monitor or reaction belongs to

    • created_byinteger | nullRequired

      User who created it, when it was created by a user credential

    • namestringRequired

      Display name, unique case-insensitively among the project's live monitors and data reactions

    • descriptionstring | nullRequired

    • kindstringRequired

      The reactions endpoints only ever return data.

      • Value: data
    • statusstringRequired

      Whether it is evaluating

      • Allowed values: active, disabled
    • template_idstringRequired

      Template it was created from

    • specobjectRequired

      Reaction parameters, normalized for the response: a reaction whose model transform is still held on target is returned with that transform copied into spec.model. Which properties are meaningful is decided by template_id. The create operation's request body lists the properties each template reads.

    • targetobjectRequired

      The primary sink (email, then slack, then http). targets is the full list. An HTTP sink's token is write-only and is never returned.

      3 options

      One of

      type: emailobject
      • typestringRequired

        • Value: email
      • recipientUserIdsarray of integer

      • emailsarray of string (email)

      type: httpobject
      • typestringRequired

        • Value: http
      • urlstring (uri) | ""Required

        The 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
      type: slackobject
      • typestringRequired

        • Value: slack
      • channelIdstring | ""Required

        The 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
    • targetsarray of objectRequired

      Every configured sink, ordered email, then slack, then http. target is 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
      • recipientUserIdsarray of integer

      • emailsarray of string (email)

      type: httpobject
      • typestringRequired

        • Value: http
      • urlstring (uri) | ""Required

        The 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
      type: slackobject
      • typestringRequired

        • Value: slack
      • channelIdstring | ""Required

        The 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
    • recipient_user_idsarray of integerRequired

      Organization 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) | nullRequired

      When it last fired, or null if it never has

    • last_resolved_atstring (date-time) | nullRequired

      When it last resolved, or null if it never has

    • created_atstring (date-time)Required

    • updated_atstring (date-time)Required

400Invalid project ID

401Unauthorized

403Insufficient scope

404Project not found

500Internal server error

OpenAPIapi.spice.ai/openapi.json

curl "https://api.spice.ai/v1/apps/<appId>/reactions" \
  -H "Authorization: Bearer <token>"
{
  "reactions": [
    {
      "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