Real-Time Updates
Get instant notifications about export job progress, completions, and failures via a persistent WebSocket connection. This is the fastest way to track export status — no polling required.
premium business
How It Works
ExportComments uses Centrifugo as its real-time messaging server. Clients connect via WebSocket using the centrifuge-js SDK and subscribe to channels that deliver events as they happen.
1. Authenticate → POST /api/public/auth/socket → JWT token2. Connect → WebSocket to wss://exportcomments.com/connection/websocket3. Subscribe → Auto-subscribed to your user channels4. Receive → Events pushed in real-time as exports progress
Real-Time vs Webhooks vs Polling
| Method | Latency | Use Case |
|---|---|---|
| WebSocket | Instant (~50ms) | Dashboards, live progress bars, interactive UIs |
| Webhooks | Near-instant | Server-to-server integrations, background processing |
| Polling | 5-10 seconds | Simple scripts, environments without WebSocket support |
Use WebSocket for client-facing real-time updates (progress bars, notifications) and webhooks for server-side event processing (triggering pipelines, storing results). They can be used together.
Available Channels
When you authenticate, you are automatically subscribed to these personal channels:
| Channel | Description |
|---|---|
exports:{uuid} | Export job events (created, progress, finished, failed) |
webhooks:{uuid} | Webhook delivery events |
user:{uuid} | Account-level notifications (subscription changes) |
user_notifications_channel:{uuid} | Toast-style notifications |
user_dashboard_channel:{uuid} | Dashboard data updates (activity, usage stats) |
Where {uuid} is your user UUID.
Event Types
| Event | Channel | Description |
|---|---|---|
job.created | exports:{uuid} | New export job started |
job.progress | exports:{uuid} | Export progress update (throttled to every 5s) |
job.finished | exports:{uuid} | Export completed successfully |
job.failed | exports:{uuid} | Export failed |
job.requeued | exports:{uuid} | Export requeued for retry |
job.convert.done | exports:{uuid} | File conversion completed |
job.convert.failed | exports:{uuid} | File conversion failed |
webhook.event.created | webhooks:{uuid} | Webhook delivery attempted |
subscription.updated | user:{uuid} | Subscription plan changed |
bulk_download.ready | exports:{uuid} | Bulk download ZIP is ready |
bulk_download.failed | exports:{uuid} | Bulk download failed |
Quick Start
import { Centrifuge } from 'centrifuge';// 1. Create client with token authenticationconst client = new Centrifuge('wss://exportcomments.com/connection/websocket', {getToken: async () => {const res = await fetch('https://exportcomments.com/api/public/auth/socket', {method: 'POST',headers: { 'X-AUTH-TOKEN': 'your-api-key' },});const data = await res.json();return data.token;},});// 2. Listen for events on your exports channelclient.on('publication', (ctx) => {console.log('Event:', ctx.data.event, ctx.data);});// 3. Connectclient.connect();
See the Connection Guide for complete examples in multiple languages.