# Email activity and cancellation

Source: https://neondeerdata.com/docs/api/email-notifications/activity/

Review delivery activity and cancel waiting internal email alerts.

The APIs on this page require alpha access for your organization. App availability and API access are separate. [Check access and permissions](https://neondeerdata.com/docs/api/permissions/).

## Cancel waiting alerts

```http
POST /v1/email-alerts/alerts/cancel

```

Cancels the waiting alerts named, by id,. An alert that has already been sent, failed or expired is left as it is. This can't be undone.

Requires `email_notifications:config:write`. The connection also needs access to the relevant tables, objects, or workflows.

MCP action: `cancel_email_alerts`. Its argument names match the fields below; an HTTP header is passed using its argument name in MCP.

### Parameters

| Name          | Send in                   | Required | Type or allowed values | Notes |
| ------------- | ------------------------- | -------- | ---------------------- | ----- |
| `alert_ids`   | JSON body                 | Yes      | array of string (uuid) |       |
| `request_key` | Header: `Idempotency-Key` | Yes      | string                 |       |

### Response

| HTTP status | Result                                                                |
| ----------- | --------------------------------------------------------------------- |
| `200`       | The requested result. Asynchronous work returns an operation to poll. |

Required fields are required within their containing object. Notes identify fields that apply only to a particular response alternative.

| Response field  | Type                         | Required in object | Notes |
| --------------- | ---------------------------- | ------------------ | ----- |
| `data`          | object                       | Yes                |       |
| `data.object`   | `"email_alert_cancellation"` | Yes                |       |
| `data.canceled` | integer                      | Yes                |       |
| `data.paused`   | boolean                      | Yes                |       |

### Errors

| HTTP status | Meaning                                                                                                                                           |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`       | One of: credential_in_url, invalid_parameter, unknown_parameter, invalid_request.                                                                 |
| `401`       | One of: missing_credential, invalid_credential, credential_expired, credential_revoked.                                                           |
| `402`       | One of: payment_overdue.                                                                                                                          |
| `403`       | The current permissions, plan or policy do not allow this request.                                                                                |
| `404`       | One of: not_found.                                                                                                                                |
| `409`       | The request conflicts with current resource state, authorization or an earlier request. Read the error code and current resource before retrying. |
| `410`       | The requested resource or retained recovery data has expired.                                                                                     |
| `413`       | One of: request_too_large.                                                                                                                        |
| `422`       | A field, filter or selection cannot be used for this request.                                                                                     |
| `423`       | One of: organization_reopening.                                                                                                                   |
| `428`       | One of: customer_agreement_required.                                                                                                              |
| `429`       | One of: rate_limited.                                                                                                                             |
| `503`       | One of: service_unavailable.                                                                                                                      |

See [errors and recovery](https://neondeerdata.com/docs/api/errors/) and [safe retries](https://neondeerdata.com/docs/api/requests/) before repeating a write.

## Turn off alerts and cancel every waiting alert

```http
POST /v1/email-alerts/alerts/clear

```

Turns email alerts off for the organization and cancels every alert waiting to send, together. Alerts workflows send while they are off are not sent later. This can't be undone.

Requires `email_notifications:config:write`. The connection also needs access to the relevant tables, objects, or workflows.

MCP action: `cancel_all_email_alerts`. Its argument names match the fields below; an HTTP header is passed using its argument name in MCP.

### Parameters

| Name          | Send in                   | Required | Type or allowed values | Notes |
| ------------- | ------------------------- | -------- | ---------------------- | ----- |
| `request_key` | Header: `Idempotency-Key` | Yes      | string                 |       |

### Response

| HTTP status | Result                                                                |
| ----------- | --------------------------------------------------------------------- |
| `200`       | The requested result. Asynchronous work returns an operation to poll. |

Required fields are required within their containing object. Notes identify fields that apply only to a particular response alternative.

| Response field  | Type                         | Required in object | Notes |
| --------------- | ---------------------------- | ------------------ | ----- |
| `data`          | object                       | Yes                |       |
| `data.object`   | `"email_alert_cancellation"` | Yes                |       |
| `data.canceled` | integer                      | Yes                |       |
| `data.paused`   | boolean                      | Yes                |       |

### Errors

| HTTP status | Meaning                                                                                                                                           |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`       | One of: credential_in_url, invalid_parameter, unknown_parameter, invalid_request.                                                                 |
| `401`       | One of: missing_credential, invalid_credential, credential_expired, credential_revoked.                                                           |
| `402`       | One of: payment_overdue.                                                                                                                          |
| `403`       | The current permissions, plan or policy do not allow this request.                                                                                |
| `404`       | One of: not_found.                                                                                                                                |
| `409`       | The request conflicts with current resource state, authorization or an earlier request. Read the error code and current resource before retrying. |
| `410`       | The requested resource or retained recovery data has expired.                                                                                     |
| `413`       | One of: request_too_large.                                                                                                                        |
| `422`       | A field, filter or selection cannot be used for this request.                                                                                     |
| `423`       | One of: organization_reopening.                                                                                                                   |
| `428`       | One of: customer_agreement_required.                                                                                                              |
| `429`       | One of: rate_limited.                                                                                                                             |
| `503`       | One of: service_unavailable.                                                                                                                      |

See [errors and recovery](https://neondeerdata.com/docs/api/errors/) and [safe retries](https://neondeerdata.com/docs/api/requests/) before repeating a write.

## List email alert activity

```http
GET /v1/email-alerts/activity

```

Lists the alerts workflows sent, latest first: each one's state, why it was not sent, what the email provider reported and when, with the workflow and recipient as Attio ids. No subject, message or address. state narrows the list. Send next_cursor as cursor for the next page.

Requires `email_notifications:config:read`. The connection also needs access to the relevant tables, objects, or workflows.

MCP action: `list_email_notification_activity`. Its argument names match the fields below; an HTTP header is passed using its argument name in MCP.

### Parameters

| Name     | Send in | Required | Type or allowed values                                                                     | Notes |
| -------- | ------- | -------- | ------------------------------------------------------------------------------------------ | ----- |
| `cursor` | query   | No       | string                                                                                     |       |
| `state`  | query   | No       | `"pending"`, `"sending"`, `"accepted"`, `"failed"`, `"canceled"`, `"expired"`, `"unknown"` |       |

### Response

| HTTP status | Result                                                                |
| ----------- | --------------------------------------------------------------------- |
| `200`       | The requested result. Asynchronous work returns an operation to poll. |

Required fields are required within their containing object. Notes identify fields that apply only to a particular response alternative.

| Response field                      | Type                                                                                                                                                                                                                     | Required in object | Notes          |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------ | -------------- |
| `data`                              | array of object                                                                                                                                                                                                          | Yes                |                |
| `data[].object`                     | `"email_alert"`                                                                                                                                                                                                          | Yes                |                |
| `data[].id`                         | string                                                                                                                                                                                                                   | Yes                |                |
| `data[].state`                      | `"pending"`, `"sending"`, `"accepted"`, `"failed"`, `"canceled"`, `"expired"`, `"unknown"`                                                                                                                               | Yes                |                |
| `data[].reason`                     | `"sender_not_configured"`, `"member_unavailable"`, `"content_expired"`, `"provider_rejected"`, `"plan_excluded"`, `"plan_limit_reached"`, `"paused"`, `"canceled"`, `"expired"`, `"send_unconfirmed"`, `"other"` or null | Yes                |                |
| `data[].workflow_id`                | string                                                                                                                                                                                                                   | Yes                |                |
| `data[].member_id`                  | string                                                                                                                                                                                                                   | Yes                |                |
| `data[].created_at`                 | string                                                                                                                                                                                                                   | Yes                |                |
| `data[].attempted_at`               | string or null                                                                                                                                                                                                           | Yes                |                |
| `data[].delivery`                   | object or null                                                                                                                                                                                                           | Yes                |                |
| `data[].delivery.outcome`           | `"delivered"`, `"delayed"`, `"soft_bounced"`, `"hard_bounced"`, `"suppressed"`, `"complained"`                                                                                                                           | Yes                | Alternative 1. |
| `data[].delivery.at`                | string                                                                                                                                                                                                                   | Yes                | Alternative 1. |
| `summary`                           | object                                                                                                                                                                                                                   | Yes                |                |
| `summary.waiting`                   | integer                                                                                                                                                                                                                  | Yes                |                |
| `summary.last_30_days`              | object                                                                                                                                                                                                                   | Yes                |                |
| `summary.last_30_days.sent`         | integer                                                                                                                                                                                                                  | Yes                |                |
| `summary.last_30_days.not_sent`     | integer                                                                                                                                                                                                                  | Yes                |                |
| `summary.last_30_days.failed`       | integer                                                                                                                                                                                                                  | Yes                |                |
| `summary.last_30_days.last_sent_at` | string or null                                                                                                                                                                                                           | Yes                |                |
| `pagination`                        | object                                                                                                                                                                                                                   | Yes                |                |
| `pagination.next_cursor`            | string or null                                                                                                                                                                                                           | Yes                |                |

### Errors

| HTTP status | Meaning                                                                                                                                           |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`       | One of: credential_in_url, invalid_parameter, unknown_parameter, invalid_request, invalid_cursor.                                                 |
| `401`       | One of: missing_credential, invalid_credential, credential_expired, credential_revoked.                                                           |
| `402`       | One of: payment_overdue.                                                                                                                          |
| `403`       | The current permissions, plan or policy do not allow this request.                                                                                |
| `404`       | One of: not_found.                                                                                                                                |
| `409`       | The request conflicts with current resource state, authorization or an earlier request. Read the error code and current resource before retrying. |
| `410`       | The requested resource or retained recovery data has expired.                                                                                     |
| `413`       | One of: request_too_large.                                                                                                                        |
| `422`       | A field, filter or selection cannot be used for this request.                                                                                     |
| `423`       | One of: organization_reopening.                                                                                                                   |
| `428`       | One of: customer_agreement_required.                                                                                                              |
| `429`       | One of: rate_limited.                                                                                                                             |
| `503`       | One of: service_unavailable.                                                                                                                      |

See [errors and recovery](https://neondeerdata.com/docs/api/errors/) and [safe retries](https://neondeerdata.com/docs/api/requests/) before repeating a write.

The [public OpenAPI document](https://neondeerdata.com/docs/api/meta/openapi/) lists generally available API families. Alpha operations may not appear in that document; their request and response fields are listed on this page. Use the [API Playground](https://neondeerdata.com/docs/api/testing/) to inspect a real response with your connection's access.
