---
title: "Event kinds and the data each one carries"
url: "https://conecto.chat/docs/event-kinds"
markdown: "https://conecto.chat/docs/event-kinds.md"
description: "Every event Conecto records for an account, by area, with what it means and the fields its data carries, read from the code that sends it."
section: "Reference"
published: 2026-10-19
updated: 2026-10-19
---

# Event kinds

Every kind of event an account can get, by area. Each carries the same fields, and its data holds the facts listed under it.

## The fields of every event

Every event has `event_id`, `kind`, `title`, `text`, `data`, `link` and `occurred_at`. [Events and webhooks](https://conecto.chat/docs/events.md) explains them, how to read events and how to send them to a channel.

To get one, subscribe a channel to its kind with `notify_subscribe`, to its whole area with `area.*`, or poll `account_events`. The lists under each kind name the fields of its `data`, read from the code that sends it. A bot's own events, `custom.<name>`, carry whatever the bot sent.

## Account

### `account.budget_alert`

A team reached the alert line of its budget (once a period: a month, a quarter, a fiscal year or a project).

`data` carries `team`, `spent_usd`, `budget_usd`, `alert_percent`, `period`, `budget_period` and `budget`. Sometimes it also carries `month`.

### `account.balance_low`

With auto-reload off, the balance is down to a fifth of what the last top-up left (once per top-up).

`data` carries `balance_usd`, `after_last_top_up_usd` and `auto_reload`. It can carry more fields than these.

### `account.join_requested`

Someone on one of the account's email domains asks to join it: approve or decline with `admin_decide_join_request`.

`data` carries `request_id`, `email`, `name`, `domain` and `decide_with`.

### `account.person_joined`

Someone joined the account with their work address, right away or once approved.

`data` carries `email`, `name`, `domain` and `team`. Sometimes it also carries `approved_by`.

### `account.dashboard_change`

A person changed something on a dashboard link, as the key that asked for the link: what (the tool), on which page, and the call (`account_get_call` has its result).

`data` carries `tool`, `action`, `area`, `call_id` and `bot`.

### `account.limit_request_answered`

Conecto answered a request for a higher limit: approved (with the amount granted) or declined, with its note.

`data` carries `request_id`, `limit`, `status`, `asked_for` and `granted`.

### `account.balance_empty`

With auto-reload off, the balance ran out: paid tools are refused until someone adds credit (once per top-up).

`data` carries `balance_usd`, `after_last_top_up_usd` and `auto_reload`. It can carry more fields than these.

## Calendar

### `calendar.booking_created`

Someone booked a meeting.

`data` carries `reference`, `meeting_type`, `start`, `end`, `name`, `email`, `phone`, `source`, `hosts`, `guests` and `reason`.

### `calendar.booking_moved`

A meeting moved to another time.

`data` carries `reference`, `meeting_type`, `start`, `end`, `name`, `email`, `phone`, `source`, `hosts`, `guests` and `reason`.

### `calendar.booking_cancelled`

A meeting was cancelled.

`data` carries `reference`, `meeting_type`, `start`, `end`, `name`, `email`, `phone`, `source`, `hosts`, `guests` and `reason`.

### `calendar.routed`

Someone answered a routing form and was sent on.

Sometimes it also carries `reference`, `meeting_type`, `start`, `end`, `name`, `email`, `phone`, `source`, `hosts`, `guests`, `reason`, `form`, `response_id`, `answers`, `route` and `to`.

## Company data

### `companies.matched`

A company list finished matching to the registers: how many rows matched, were ambiguous or not found, what that cost, and the results file (`account_get_call` shows the result).

`data` carries `match_id`, `rows`, `matched`, `ambiguous`, `not_found`, `no_country`, `register_unavailable`, `charged_usd` and `file_id`.

## E-signature

### `esign.completed`

Everyone signed a document.

`data` carries `request_id`, `title`, `file_id` and `signers`.

### `esign.declined`

A signer declined a document.

`data` carries `request_id`, `title`, `name`, `email` and `reason`.

### `esign.signed`

A signer signed a document others still have to sign: who signed and who is left (the last signature sends `esign.completed` instead).

`data` carries `request_id`, `title`, `name`, `email`, `signed`, `signers`, `waiting_on` and `asked_now`.

## Email

### `email.received`

An email arrived in one of the account's inboxes (with an inbox that saves attachments: files, the `file_ids` they became, and `attachments_not_saved` with why).

`data` carries `message_id`, `inbox`, `from`, `from_name` and `subject`. Sometimes it also carries `files` and `attachments_not_saved`.

## Files

### `files.added`

A file arrived from outside the bot (an upload link, or an email attachment saved by email-in), with its text once read, so you can file it (`files_edit`).

`data` carries `file_id`, `name`, `content_type`, `size_bytes`, `source`, `duplicate_of`, `text_status`, `text`, `text_truncated` and `ocr_pages`. Sometimes it also carries `email`.

## Forms

### `forms.response_received`

A form got a response.

`data` carries `form`, `response_id` and `answers`. Sometimes it also carries `actions` and `confirmed_to`.

## Help desk

### `helpdesk.ticket_created`

A new ticket opened: from an email, a phone message or a form response.

`data` carries `ticket_id`, `number`, `from` and `subject`.

### `helpdesk.customer_replied`

A customer replied on a ticket.

`data` carries `ticket_id`, `number`, `from` and `subject`.

## Hiring

### `hiring.application_received`

Someone applied to a job.

`data` carries `applicant_id` and `job`. Sometimes it also carries `name`, `email`, `phone`, `links`, `has_resume`, `flags` and `sealed`.

### `hiring.candidate_passed`

An application passed its job's filter once the bot's screening was saved: who, the match score and the screening's summary. The hiring team is also emailed.

`data` carries `applicant_id`, `job`, `name`, `email`, `match`, `match_score`, `summary`, `risk` and `filter`.

### `hiring.test_completed`

A candidate finished a skills test.

`data` carries `applicant_id` and `assessment`.

### `hiring.interview_booked`

An invited candidate booked their interview.

`data` carries `applicant_id`, `job`, `reference` and `start`.

## HR

### `hr.policy_acknowledged`

Someone confirmed they read a policy (`hr_send_policy`).

`data` carries `policy`, `version`, `person_id` and `name`.

### `hr.daily`

The day in HR, each morning from 7:00 in the HR time zone when there is something to say: who starts, whose last day it is, who is out, birthdays and work anniversaries, probations ending within 7 days, documents expiring within 30 days, and checklist tasks due or overdue.

Its `data` depends on the day, and its `text` says it in words.

## Inventory

### `inventory.low_stock`

An item fell to its reorder point (sent once until it is restocked).

`data` carries `sku`, `name`, `quantity`, `unit`, `reorder_point` and `locations`.

## Invoices

### `invoices.paid_online`

A customer paid an invoice on its page (`invoices_set_profile` `pay_online`): the payment is recorded on it and posted to the books.

`data` carries `invoice_id`, `number`, `amount`, `currency`, `balance` and `status`. It goes out at once.

### `invoices.quote_accepted`

A customer accepted a quote on its page.

`data` carries `document_id`, `number`, `total`, `currency`, `customer`, `name` and `note`.

### `invoices.quote_declined`

A customer declined a quote on its page.

`data` carries `document_id`, `number`, `total`, `currency`, `customer`, `name` and `note`.

### `invoices.overdue`

An invoice the business sent is past its due date and still owed. Sent once per invoice, the day after it falls due where the business is.

`data` carries `invoice_id`, `number`, `customer`, `customer_email`, `balance`, `currency`, `due_date` and `days_overdue`.

## Newsletters

### `newsletters.subscribed`

Someone confirmed their newsletter subscription.

`data` carries `newsletter`, `email` and `name`.

### `newsletters.unsubscribed`

Someone unsubscribed from a newsletter.

`data` carries `newsletter` and `email`.

### `newsletters.issue_refused`

A scheduled issue wasn't sent: when it fell due, it looked like cold outreach.

`data` carries `newsletter`, `issue_id` and `number`.

### `newsletters.sending_stopped`

The business's own email service failed (a refused login, no connection, or it turned an email down): newsletters wait and are tried again every 10 minutes until it works (once per failure, not on every retry).

`data` carries `host`, `error` and `retry_after_minutes`.

## Notifications

### `notify.answered`

A person answered a question you asked with `notify_request_approval`: the option they picked and their comment.

`data` carries `request_id`, `question`, `details`, `options`, `status`, `answer`, `comment`, `answered_at`, `reference`, `sent_to`, `via`, `expires_at` and `created_at`. Sometimes it also carries `needed` and `approvals`. It goes out at once.

## Outreach

### `outreach.replied`

Someone answered an outreach email: who, the campaign and their reply's text. Their follow-ups stopped. `outreach_set_status` keeps whether they are interested.

`data` carries `campaign_id`, `campaign`, `reply_id`, `email`, `name`, `contact_id`, `subject` and `text`.

### `outreach.paused`

An outreach campaign paused on its own: the key that made it could not pay for the next person (its budget, the account's ceiling, or the key was revoked), with the reason. Resume it with `outreach_resume` once that is fixed.

`data` carries `campaign_id`, `name` and `reason`.

### `outreach.mailbox_connected`

The owner connected a mailbox for outreach from the link `outreach_connect_mailbox` gave: its `mailbox_id`, address and daily limit.

`data` carries `mailbox_id`, `email`, `sender_name` and `daily_limit`.

## Phone

### `phone.message_left`

A caller left a message on the business's line (the transcript is in the event), also when the balance couldn't pay for the call and the line took the message for free.

`data` carries `call_id`, `from`, `to`, `duration_seconds`, `answered_by` and `transcript`. Sometimes it also carries `message_id`, `reason`, `why`, `recording_file_id`, `charged_usd`, `note` and `ticket`.

### `phone.call_ended`

A call your bot answered ended (the whole transcript is in the event).

`data` carries `call_id`, `from`, `to`, `duration_seconds`, `answered_by` and `transcript`. Sometimes it also carries `ticket`.

## Prospects

### `prospects.found`

A prospect search ended: how many prospects it found of those asked for and what that cost (`prospects_get` lists them).

`data` carries `search_id`, `status`, `asked`, `found` and `charged_usd`.

### `prospects.needs_input`

A prospect search stopped finding new prospects and asks whether to widen it, with its question. Answer with `prospects_answer` or end it with `prospects_stop` (once a question).

`data` carries `search_id`, `summary` and `questions`.

## Purchasing

### `purchasing.bill_due`

A supplier bill falls due within 3 days (or is past due when recorded). Sent once per bill.

`data` carries `bill_id`, `supplier`, `reference`, `status`, `overdue`, `days_overdue`, `currency`, `issue_date`, `due_date`, `planned_date`, `total`, `amount_paid`, `balance`, `order` and `days_left`.

## Social

### `social.post_published`

A post went out on a social network (with its link).

`data` carries `post_id`, `channel_id`, `network`, `network_name`, `channel`, `publish_at` and `url`.

### `social.post_failed`

A social post could not be published, with Postiz's reason. Its charge is refunded.

`data` carries `post_id`, `channel_id`, `network`, `network_name`, `channel`, `publish_at`, `reason` and `refunded`.

### `social.post_confirmed`

The owner pressed Post on a TikTok post's page, with who may see it and their other choices. `social.post_published` or `social.post_failed` follows.

`data` carries `check_id`, `channel_id`, `network`, `network_name`, `status`, `publish_at`, `expires_at`, `post_id` and `choices`. It goes out at once.

### `social.post_declined`

A TikTok post waiting for its owner was not posted: they said no, or its link ran out. Its charge is refunded.

`data` carries `check_id`, `channel_id`, `network`, `network_name`, `status`, `publish_at`, `expires_at`, `post_id`, `reason` and `refunded`.

### `social.channel_connected`

The owner connected a social account from a link `social_connect` gave.

`data` carries `channel_id`, `network`, `network_name`, `name`, `profile`, `picture` and `disabled`.

## Uptime

### `uptime.down`

A monitored site went down.

`data` carries `monitor_id`, `name`, `url` and `error`. It goes out marked urgent where the channel has a priority, like ntfy and Pushover.

### `uptime.up`

A monitored site is back up.

`data` carries `monitor_id`, `name`, `url` and `error`.

## Website analytics

### `analytics.traffic_spike`

More people are on a site right now than its alert's number.

`data` carries `site`, `site_id`, `visitors_now`, `alert_at` and `pages`.

### `analytics.weekly_summary`

A site's visits last week, every Monday morning.

`data` carries `site`, `site_id`, `period`, `change_percent`, `pages`, `sources` and `goals`. It can carry more fields than these.

### `analytics.goal_completed`

A visitor reached a goal set with notify (`analytics_set_goals`), with where their visit came from, its landing page, the pages seen, country, device and revenue.

`data` carries `site`, `site_id`, `goal`, `event`, `page`, `visit`, `source`, `channel`, `referrer`, `campaign`, `landing_page`, `pages`, `pageviews`, `seconds_on_site`, `country`, `device` and `props`. Sometimes it also carries `revenue`. It goes out at once.

### `analytics.broken_page`

A page answered an error (404 or worse) to a real visitor, with the page that links there. Once a week a page.

`data` carries `site`, `site_id`, `page`, `status` and `linked_from`.

## Website chat

### `chat.message_received`

A visitor wrote in the website chat (first: true on a new chat): answer with `chat_reply`. With a webhook brain it says what the brain answered (`answered_by`, reply or unanswered).

`data` carries `conversation_id`, `message_id`, `first`, `text`, `visitor`, `experience`, `page` and `reply_with`. It can carry more fields than these. It goes out at once.

## Whistleblowing

### `whistleblowing.report_received`

A report reached the whistleblowing channel: its case number, category and deadlines, never its content.

`data` carries `case_number`, `category`, `received_at` and `feedback_due`.

## More in the docs

- Previous: [Errors](https://conecto.chat/docs/errors.md)
- Next: [Tools](https://conecto.chat/docs/tools.md)
- Every page in one file: https://conecto.chat/docs/all.md
- Every page's title and address: https://conecto.chat/docs/index.json
