Skip to main content

Overview

laravel-bluesky integrates with Laravel’s built-in notification system. Use BlueskyChannel to publish posts and BlueskyPrivateChannel to send direct messages (DMs).

Available channels

Notification class

BlueskyChannel

Return BlueskyChannel::class from via() and build the post in toBluesky().
The Post API is identical to the Basic client, so TextBuilder, Embed, and all other helpers work the same way.

BlueskyPrivateChannel

BlueskyPrivateMessage is similar to Post but only supports text, facets, and embed. The only supported embed type is QuoteRecord.

On-demand notifications

Send a notification without a notifiable model by using Notification::route().

BlueskyChannel

BlueskyPrivateChannel

A receiver (DID or handle) is required for private channel notifications. The receiver must have DM reception enabled.
  • App password requires DM-sending privileges.
  • OAuth requires the transition:chat.bsky scope.
Bluesky does not allow sending a DM to yourself. If you want to receive notifications on your own account, create a dedicated sender account.
For personal-use notifications where the sender and receiver are always the same, configure them in .env with a dedicated sender account.

User notifications

Define routing methods on your notifiable model.

BlueskyChannel

BlueskyPrivateChannel

You can also specify the user model itself as the receiver.

BlueskyRoute

The parameters differ depending on whether you use App password or OAuth authentication. Always use named arguments.
For notifying your own account, App password is the simpler option. You do not need to manage refresh token rotation — just set the values in .env.

Checking notification results

Use the NotificationSent event to inspect the response after the notification is dispatched, just like standard Laravel notifications.
Last modified on April 29, 2026