Overview
GraphQL subscriptions provide a way to receive real-time updates from the Speckle server. Unlike webhooks, which are HTTP-based and designed for server-to-server communication, subscriptions are ideal for client applications that need to stay synchronized with Speckle data in real-time.When to Use Subscriptions vs Webhooks:
- Subscriptions: Use for client applications (web apps, desktop apps) that need real-time UI updates. Subscriptions use WebSocket connections and require an active connection.
- Webhooks: Use for server-to-server integrations, CI/CD pipelines, and HTTP-based automation workflows. Webhooks send HTTP POST requests to your endpoint, making them ideal for serverless functions and webhook endpoints.
Available Subscriptions
The complete list of available subscriptions is documented in Apollo Studio: Apollo Studio - Subscriptions Common subscription types include:- Project Events:
projectUpdated,projectModelsUpdated,projectVersionsUpdated,projectCommentsUpdated,projectIssuesUpdated - Version Events:
projectVersionsUpdated,projectPendingVersionsUpdated - Automation Events:
projectAutomationsUpdated,projectTriggeredAutomationsStatusUpdated - Workspace & User Events:
workspaceUpdated,userProjectsUpdated
Using Subscriptions
Endpoint and Authentication
Subscriptions use WebSocket connections. The endpoint forapp.speckle.systems is:
Example
Most subscriptions accept anid parameter to filter events for a specific project:
userProjectsUpdated, don’t require parameters and will send updates for all projects the authenticated user has access to.
Connection Management
WebSocket connections may drop due to network issues. Implement reconnection logic with exponential backoff in your client. Unsubscribe from subscriptions when components unmount or are no longer needed.Comparison with Webhooks
Both subscriptions and webhooks provide real-time event notifications, but they serve different use cases:| Feature | Subscriptions | Webhooks |
|---|---|---|
| Connection Type | WebSocket (persistent) | HTTP POST (stateless) |
| Best For | Client applications, real-time UI | Server-to-server, CI/CD, automation |
| Connection Management | Requires active connection | No connection needed |
| Scalability | Limited by WebSocket connections | Scales with HTTP endpoints |
| Setup Complexity | Requires WebSocket client | Simple HTTP endpoint |