Changelog

A faster inbox that stays fast as your volume grows

The inbox loads conversations as you scroll, shows every view's count from one quick request, and updates conversations in place as they change, instead of reloading every list each time one moves. It stays just as quick with hundreds of teammates online and hundreds of thousands of conversations.

How it behaves

  • Scrolling: the conversation list loads the next conversations as you reach the end of the list. You no longer page through numbered pages.
  • View counts: the sidebar counts and the list header come from one request and refresh shortly after conversations change. A view with more than 10,000 conversations shows "10,000+".
  • Live updates: a conversation's status, assignee or latest message changes on screen as soon as it happens. The list reorders or drops a conversation once it no longer belongs in the view, a few seconds after a burst of changes rather than on every message.
  • Customer presence: a conversation shows that the customer is here while they're on your site, and shows nothing once they leave, instead of an "offline" label. Moving between pages of your store no longer flickers the indicator.
  • Bulk actions: closing, assigning, snoozing, prioritising, marking as spam, trashing or returning to Aide up to 200 selected conversations at once is applied in one step. Any conversation that couldn't be changed is listed.
  • Notifications: a notification you've read is removed after 30 days, and every notification after a year. Unread notifications younger than a year stay.

Also in this change

  • Replies, routing, tagging and reply emails can no longer be lost if a server restarts at the wrong moment: each is recorded with the conversation's change and retried until it runs.
  • Widget, agent panel and help center activity is kept for six months.
  • The chat widget keeps a live connection only while the visitor has an open chat, and sends the visitor's cart only when it changed. A reply to a chat that has ended shows the next time the visitor opens the widget.
  • The notification bell updates the moment a notification arrives instead of checking every 30 seconds.

For developers

  • Paginated lists: metadata is now { total, totalIsCapped, perPage, currentPage, lastPage, hasMore }, all numbers or booleans. total stops at 10,000 (totalIsCapped: true). page runs from 1 to 500, and a page past the 10,000th row answers 422 page_too_deep. The URL keys and firstPage were removed.
  • Conversation cursor: GET /v1/conversations takes cursor for every sort and returns metadata.nextCursor. null means the end of the list. A cursor page skips the total. cursor with page answers 422 cursor_with_page; a malformed cursor, or one from another sort, answers 422 invalid_cursor.
  • Built-in views: view on GET /v1/conversations accepts the built-in view ids (needs_a_person, mine, unassigned, waiting, on_hold, closed, handled_by_aide, resolved_by_aide, handoffs, team:<teamId>) as well as saved-view ids.
  • View counts: new GET /v1/conversations/counts?view=… (1–50 views) returns { data: [{ view, count, countIsCapped }] }. count is null for a view whose filters can't be counted yet.
  • Bulk actions: new POST /v1/conversations/bulk with { ids, action } (1 to 200 distinct ids). action.type is assign, close, snooze, set_priority, mark_spam, trash or return_to_aide, each the same write as its single-conversation route. It answers { updated: [id], failed: [{ id, error: { code, message } }] }; one refusal leaves the others written.
  • Outcome filter: without a started or ordered date range, it covers the last 90 days.
  • latestMessageAt on conversations is never null. A conversation with no message yet reports when it was created.
  • Channel webhooks: the rate limit per connection is now 12,000 requests a minute.

All changes

We use cookies to enhance your Aide experience.
by clicking "accept all" you consent to our use of cookies.
Learn more