Skip to main content
Tappify publishes events for the things that happen in an owner’s project. Subscribe in your component and the host delivers them, typed, with no polling.
subscribe returns its own unsubscribe function, which is why the effect returns it directly. refetch is stable across renders, so the effect subscribes once rather than on every render. The event name is typed from the catalogue the SDK ships with, so a name that does not exist is a compile error; once tappify extension types has generated the payloads, a field that is not on that payload is one too. settings.changed is one of the six events Tappify sends today, so this handler runs the first time an owner saves your panel.

Refetching without a subscription

When all you want is for a query to reload, name the events instead of writing a handler:

The events you can subscribe to

Delivery is filtered by what the owner granted: price.changed reaches an install only when store.metadata:read is granted. The type stays the full catalogue either way. Every payload and every field is on Events.

The same events on your server

The handler routes POST /tappify/events for the names your manifest lists under server.events, with the token already verified and request.event typed to the payload:
Tappify posts every name your manifest lists under server.events to POST /tappify/events as it happens, one delivery per install. A 5xx or an unreachable server is retried three times over about twelve minutes, for that install alone; a 4xx is taken as your answer and recorded on the install’s runtime timeline instead. A name your manifest does not list reaches your components only, through tap.data.subscribe.
Adding a field to a payload is free. A renamed field is a new event name, so a handler never silently reads the wrong thing.