Laravel

Status page and uptime monitoring for Laravel apps

Monitor Laravel routes, queues, schedulers, and Horizon. Custom-domain status page with one CNAME, or build your own on top of our API.

Three ways to ship a status page for Laravel

Pick the level of control you need — zero-code, low-code, or full headless.

Hosted

Add your Laravel endpoint, point a CNAME at status.yourdomain.com, done. Works in 5 minutes.

Headless

Use our public API to build your own UI inside your Laravel app. Full control over design and branding.

See the API

Embedded badges

Drop SVG uptime and status badges into your README or landing page. Auto-updates every 5 minutes.

Drop this health endpoint into your Laravel app

Copy, paste, point PulseAPI at the URL. Returns 200 when healthy, 503 when degraded.

routes/web.php
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;

Route::get('/health', function () {
    $checks = [];
    try {
        DB::select('select 1');
        $checks['database'] = 'ok';
    } catch (\Throwable $e) {
        $checks['database'] = 'fail';
    }
    try {
        Redis::ping();
        $checks['cache'] = 'ok';
    } catch (\Throwable $e) {
        $checks['cache'] = 'fail';
    }
    $healthy = collect($checks)->every(fn ($v) => $v === 'ok');
    return response()->json(
        ['status' => $healthy ? 'healthy' : 'degraded', ...$checks],
        $healthy ? 200 : 503
    );
})->withoutMiddleware([
    \App\Http\Middleware\VerifyCsrfToken::class,
]);

Skip CSRF and auth middleware. Return 503 on partial failure. Add rate-limit exemption if you have a strict throttle.

What breaks in Laravel apps — and how to catch it

Horizon queues falling behind

A backlog in a specific queue kills async UX. Queue-depth assertions catch it early.

Scheduler jobs that stop running

Stuck cron leaves invoices un-sent. Heartbeat endpoint + assert last-run timestamp.

Cache / session driver failures

Redis hiccups cause intermittent 500s when sessions fail. Cache check in /health surfaces this.

Headless angle

Don't like our status page? Build your own in Laravel.

Our API returns the same data our hosted UI consumes. Full OpenAPI spec documented at api.pulseapi.tech/docs.

A Laravel controller that fetches and renders our status API.
use Illuminate\Support\Facades\Http;

class StatusController extends Controller
{
    public function index()
    {
        $data = Http::timeout(5)
            ->get('https://api.pulseapi.tech/status/acme')
            ->json();
        return view('status', ['data' => $data]);
    }
}

Laravel monitoring — FAQ

Does it work with Laravel Forge, Vapor, or self-hosted?

All of them — PulseAPI hits a public URL.

Can I monitor Horizon?

Yes. Endpoint that reads Horizon::status() and queue depths. Assert on specific queues with JSON-path rules.

Does it handle Laravel maintenance mode?

Yes. 503 from `php artisan down` triggers an incident. Mark scheduled maintenance windows to suppress alerts during deploys.

Can I render the status page inside Laravel?

Yes. Hit the API from a controller, pass to a Blade view.

Start monitoring your Laravel app in 5 minutes

Free tier. No credit card. Add your endpoint and get alerts when it breaks.