revolution/laravel-mastodon-api

Mastodon API for Laravel

Fund package maintenance!
invokable

Installs: 40 061

Dependents: 2

Suggesters: 0

Security: 0

Stars: 26

Watchers: 3

Forks: 2

3.4.0 2025-06-07 02:44 UTC

README

Requirements

  • PHP >= 8.2
  • Laravel >= 11.0

Installation

Composer

composer require revolution/laravel-mastodon-api

Socialite and Notification packages will also be installed.

Usage

Registering an application

By Web UI

  1. Go to your Mastodon's user preferences page.
  2. Go to development page.

By API

use Revolution\Mastodon\Facades\Mastodon;

class MastodonController
{
    public function app()
    {
        $client_name = 'my-app';
        $redirect_uris = 'https://my-instance/callback';
        $scopes = 'read write follow';
        
        $app_info = Mastodon::domain('https://example.com')
                            ->createApp($client_name, $redirect_uris, $scopes);

        dd($app_info);
        //[
        //    'id' => '',
        //    'client_id' => '',
        //    'client_secret' => '',
        //]
     }
}

OAuth authentication

Use https://github.com/invokable/socialite-mastodon

Save account info.(id, token, username, acct...and more.)

Get statuses

use Revolution\Mastodon\Facades\Mastodon;

$statuses = Mastodon::domain('https://example.com')
                    ->token('token')
                    ->statuses($account_id);

dd($statuses);

Get one status

use Revolution\Mastodon\Facades\Mastodon;

$status = Mastodon::domain('https://example.com')
                  ->token('token')
                  ->status($status_id);

dd($status);

Post status

use Revolution\Mastodon\Facades\Mastodon;

Mastodon::domain('https://example.com')->token('token');
$response = Mastodon::createStatus('test1');
$response = Mastodon::createStatus('test2', ['visibility' => 'unlisted']);

dd($response);

Any API by get or post method

use Revolution\Mastodon\Facades\Mastodon;

$response = Mastodon::domain('https://example.com')
                    ->token('token')
                    ->get('/timelines/public', ['local' => true]);
use Revolution\Mastodon\Facades\Mastodon;

$response = Mastodon::domain('https://example.com')
                    ->token('token')
                    ->post('/follows', ['uri' => '']);

Any API can call by call method

use Revolution\Mastodon\Facades\Mastodon;

$response = Mastodon::domain('https://example.com')
                    ->token('token')
                    ->call('DELETE', '/statuses/1');

Other methods

Check public methods in Contracts/Factory.php

Streaming API

Edit $token and $url in streaming_example.php

php ./streaming_example.php

Ctrl+C to quit.

LICENSE

MIT