Skip to main content

Data Alerts - Email Notification Subscriptions

Real-time data import alert notifications via Email and Webhook

Updated over a week ago

Overview

Toolio now supports email notifications for Data Alerts, allowing users to receive real-time email alerts when importer or integration issues occur. Previously, Data Alerts were only visible within the Toolio application itself - requiring users to log in and check the Data Alerts panel or Import History page. With this release, technical team members and stakeholders who may not be actively working in Toolio can stay informed about data pipeline issues without needing to monitor the application directly.

Subscribing to Email Notifications

Users can manage their notification subscriptions from the Settings area within Toolio:

  1. Navigate to Settings > Organization Settings > Notifications > Subscriptions

  2. Click to create a new subscription

  3. Select the notification channel (Email or Webhook)

  4. Choose which event types to subscribe to

  5. Save the subscription


Once subscribed, the user will receive an email each time the selected alert type is triggered for their tenant.

There are also 2 methods of notification delivery (more details below):

Channel

Description

Email

Sends alert notifications directly to the subscribed user's email address.

Webhook

Sends alert payloads to a configured webhook endpoint for programmatic consumption.

Supported Alert Event Types

The following event types are available for subscription:

Event Type

Description

IMPORT_JOB_FAILED

Triggered when a data import does not complete successfully.

IMPORT_JOB_MISSING

Triggered when a recent expected import is not found. (Trigger threshold configured via Missing Import Alerts)

INTEGRATION_FAILED

Triggered when there is a connection issue with an integration (e.g., Shopify).

IMPORT_JOB_STARTED

Triggered when a data import job begins processing.

IMPORT_JOB_COMPLETED

Triggered when a data import job finishes processing successfully.

IMPORT_JOB_COMPLETED_WITH_ERRORS

Triggered when a data import job finishes processing successfully, but there are unsuccessful line items from the job.

Email

You can simply define any email(s) you'd like to deliver notifications to in the configuration menu.

Notification emails are sent with the following subject line format:

Toolio Report: [EVENT_TYPE] Context - Error Type - Date

For example:

Toolio Report: [IMPORT_JOB_MISSING] Sale - Missing Import - 2026-01-28

The email body includes:

  • The alert details (event type, context, and error information)

  • A direct link to the Data Alerts view inside Toolio — the same view a user would see by navigating to Data Alerts within the application


Webhook

Webhook-specific config requires:

  • url must be a valid URI

  • headers are optional

If headers are configured, they are forwarded on the outbound webhook request:

{
"url": "https://hooks.example.com/toolio",
"headers": {
"Authorization": "12345",
"Tenant": "demo"
}
}


Webhook Event Payloads

When an event fires, Toolio sends an HTTP POST with a JSON body to your configured webhook URL. Your endpoint should respond with a 2xx status to acknowledge receipt.


Envelope Fields

Every webhook payload shares the same top-level structure:

Field

Type

Required

Description

eventType

string

Yes

The event that triggered this delivery

eventOccurredAt

integer

Yes

Unix timestamp in milliseconds when the event occurred

payload

object

Yes

Event-specific data (see each event below)


IMPORT_JOB_FAILED

Triggered when a data import job encounters a fatal error and cannot finish processing.

Channels: Email, Webhook, In-App

Payload Fields

Field

Type

Required

Description

integration

string

Yes

Source system name (e.g. Shopify, Cin7)

resource

string

Yes

The resource type being imported (e.g. Sale, Product)

importer

string

Yes

Internal importer configuration name

filename

string

Yes

Name of the uploaded file

status

string

Yes

Always "failed" for this event

lineCount

integer

No

Total number of lines in the file

skippedLineCount

integer

No

Lines skipped during processing

errorCount

integer

No

Number of lines that encountered errors

message

string

No

Human-readable description of the failure reason

uploadedAt

datetime

No

ISO 8601 — when the file was uploaded

startedAt

datetime

No

ISO 8601 — when processing began

finishedAt

datetime

No

ISO 8601 — when processing ended

Example

{   "eventType": "IMPORT_JOB_FAILED",   "eventOccurredAt": 1706500800000,   "payload": {     "integration": "Shopify",     "resource": "Sale",     "importer": "shopify_sales_daily",     "filename": "sales_2026-01-28.csv",     "status": "failed",     "lineCount": 15230,     "skippedLineCount": 0,     "errorCount": 47,     "message": "Column mismatch: expected 12 columns, found 11 on line 482",     "uploadedAt": "2026-01-28T06:00:00.000Z",     "startedAt": "2026-01-28T06:01:12.000Z",     "finishedAt": "2026-01-28T06:03:45.000Z"   } }

IMPORT_JOB_MISSING

Triggered when Toolio expected a scheduled import to arrive but it was not received within the configured window.

Channels: Email, Webhook, In-App

Payload Fields

Field

Type

Required

Description

resource

string

Yes

The resource type that was expected but not received

Example

{   "eventType": "IMPORT_JOB_MISSING",   "eventOccurredAt": 1706500800000,   "payload": {     "resource": "Sale"   } }

IMPORT_JOB_STARTED

Sent as soon as Toolio starts processing an uploaded file.

Channels: Email, Webhook

Payload Fields

Field

Type

Required

Description

integration

string

Yes

Source system name

resource

string

Yes

The resource type being imported

importer

string

Yes

Internal importer configuration name

filename

string

Yes

Name of the uploaded file

status

string

Yes

Always "processing" for this event

lineCount

integer

No

Total number of lines in the file

uploadedAt

datetime

No

ISO 8601 — when the file was uploaded

startedAt

datetime

No

ISO 8601 — when processing began

Example

{   "eventType": "IMPORT_JOB_STARTED",   "eventOccurredAt": 1706500800000,   "payload": {     "integration": "Cin7",     "resource": "Product",     "importer": "cin7_products",     "filename": "products_2026-01-28.csv",     "status": "processing",     "lineCount": 8421,     "uploadedAt": "2026-01-28T06:00:00.000Z",     "startedAt": "2026-01-28T06:01:05.000Z"   } }

IMPORT_JOB_COMPLETED

Sent when all rows in the uploaded file were processed without any errors.

Channels: Email, Webhook

Payload Fields

Field

Type

Required

Description

integration

string

Yes

Source system name

resource

string

Yes

The resource type imported

importer

string

Yes

Internal importer configuration name

filename

string

Yes

Name of the uploaded file

status

string

Yes

Always "completed" for this event

lineCount

integer

No

Total number of lines in the file

skippedLineCount

integer

No

Lines intentionally skipped during processing

uploadedAt

datetime

No

ISO 8601 — when the file was uploaded

startedAt

datetime

No

ISO 8601 — when processing began

finishedAt

datetime

No

ISO 8601 — when processing completed

Example

{   "eventType": "IMPORT_JOB_COMPLETED",   "eventOccurredAt": 1706500800000,   "payload": {     "integration": "Cin7",     "resource": "Product",     "importer": "cin7_products",     "filename": "products_2026-01-28.csv",     "status": "completed",     "lineCount": 8421,     "skippedLineCount": 3,     "uploadedAt": "2026-01-28T06:00:00.000Z",     "startedAt": "2026-01-28T06:01:05.000Z",     "finishedAt": "2026-01-28T06:04:32.000Z"   } }

IMPORT_JOB_COMPLETED_WITH_ERRORS

Triggered when an import job completes but one or more rows failed validation or processing. The job is considered complete — partial data may have been imported.

Channels: Email, Webhook

Payload Fields

Field

Type

Required

Description

integration

string

Yes

Source system name

resource

string

Yes

The resource type being imported

importer

string

Yes

Internal importer configuration name

filename

string

Yes

Name of the uploaded file

status

string

Yes

Always "completed_with_errors" for this event

lineCount

integer

No

Total number of lines in the file

skippedLineCount

integer

No

Lines skipped during processing

errorCount

integer

No

Number of rows that failed

message

string

No

Summary of what went wrong

uploadedAt

datetime

No

ISO 8601 — when the file was uploaded

startedAt

datetime

No

ISO 8601 — when processing began

finishedAt

datetime

No

ISO 8601 — when processing ended

Example

{   "eventType": "IMPORT_JOB_COMPLETED_WITH_ERRORS",   "eventOccurredAt": 1706500800000,   "payload": {     "integration": "Shopify",     "resource": "Sale",     "importer": "shopify_sales_daily",     "filename": "sales_2026-01-28.csv",     "status": "completed_with_errors",     "lineCount": 15230,     "skippedLineCount": 12,     "errorCount": 5,     "message": "5 rows failed validation",     "uploadedAt": "2026-01-28T06:00:00.000Z",     "startedAt": "2026-01-28T06:01:12.000Z",     "finishedAt": "2026-01-28T06:03:45.000Z"   } }

INTEGRATION_FAILED

Sent when Toolio encounters an error communicating with a connected external system. Use activityId to look up the specific activity in your integration logs.

Channels: Email, Webhook, In-App

Payload Fields

Field

Type

Required

Description

integration

string

Yes

The integration that failed (e.g. Shopify)

resource

string

Yes

The resource associated with the failure

activityId

integer

No

Integration activity ID for cross-referencing logs (nullable)

Example

{   "eventType": "INTEGRATION_FAILED",   "eventOccurredAt": 1706500800000,   "payload": {     "integration": "Shopify",     "resource": "Sale",     "activityId": 9812   } }

Did this answer your question?