async def handle_observed_action(self,
                                     action: str, request_id: str, **kwargs):
        """
        run the action.
        """
        try:
            await self.check_permissions(action, **kwargs)

            reply = partial(self.reply, action=action, request_id=request_id)

            if action == 'delete':
                await reply(data=kwargs, status=204)
                # send the delete
                return

            # the @action decorator will wrap non-async action into async ones.

            response = await self.retrieve(
                request_id=request_id,
                action=action,
                **kwargs
            )

            if isinstance(response, tuple):
                data, status = response
                await reply(
                    data=data,
                    status=status
                )

        except Exception as exc:
            await self.handle_exception(
                exc,
                action=action,
                request_id=request_id
            )