XRPC Webhooks: Protocol-Adjacent Event Streams
Published by @smokesignal.events on 2025-07-19 21:00 UTC.
ATProtocol provides an incredibly strong foundation for decentralized identity and data portability. With its identity system, authenticated XRPC invocation proofs through service tokens, and strongly typed service-to-service interfaces via lexicons, it's natural to wonder: what else can we build on this foundation?
While AT Protocol excels at handling persistent, on-protocol data, there's an interesting gap when it comes to ephemeral event data that sits adjacent to the protocol. This is where I believe we can evolve the concept of webhooks to leverage XRPC's strengths while maintaining the flexibility needed for real-time integrations.
The Challenge: Beyond Public Records
Consider a practical example from Smoke Signal, an event platform built on AT Protocol. When users RSVP to an event, that RSVP record is published on-protocol—anyone consuming repository commits can access this information. But there's additional off-protocol data relevant to the RSVP: the email address that the user wants to share with the event organizer.
This email address is deliberately off-protocol data. It's private and contextual to specific events. Yet it's valuable information that enables richer interactions between event organizers and attendees.
XRPC Webhooks: A Protocol-Adjacent Solution
What if we could create a webhook system that leverages AT Protocol's existing strengths? Imagine a procedure like events.smokesignal.automation.SubmitActivity
that accepts:
identity
: An AT Protocol identity likeat://did:plc:you
activity
: A structured activity object such as:{ "$type": "events.smokesignal.automation.activity", "activity": "rsvp.created", "record": { /* relevant event data */ }, "context": { "email": "you@example.com" } }
This approach maintains the strongly typed nature of XRPC while enabling ephemeral data flows that complement on-protocol records.
User-Controlled Automation
The real power emerges when we put users in control of their automation preferences. In this model, a user wanting to enable email notifications for RSVPs could:
- Use an external application like
https://emailer.smokesignal.events/
- Within their Smoke Signal account settings, authorize the service by adding its DID (
did:web:emailer.smokesignal.events#SmokeSignalAutomation
) to their event subscribers list - Smoke Signal would then automatically invoke the appropriate XRPC procedures when relevant events occur
This creates a webhook-like experience but with several key advantages:
- Identity-based: Leverages AT Protocol's robust identity system
- User-controlled: Users explicitly authorize which services receive their event data
- Strongly typed: Maintains XRPC's lexicon-based type safety
- Authenticated: Uses service tokens for secure invocations
The Best of Both Worlds
This approach gives us webhooks, but different. It's a hybrid that combines:
- On-protocol features: Identities, lexicons, and authentication
- Off-protocol flexibility: Ephemeral data and real-time event streams
- User sovereignty: Explicit authorization and control over data sharing
Rather than being purely on-protocol or off-protocol, XRPC webhooks occupy a protocol-adjacent space that extends AT Protocol's capabilities while respecting its design principles.
Looking Forward
As the ATProtocol ecosystem continues to evolve, exploring these protocol-adjacent patterns could unlock new possibilities for rich, user-controlled integrations. XRPC webhooks represent just one potential direction—a way to bridge the gap between AT Protocol's permanent records and the ephemeral, contextual data that powers modern applications.
What other protocol-adjacent patterns might emerge as we continue building on this foundation? The intersection of decentralized identity, user control, and real-time data presents fascinating opportunities for the future of the social web.