Queuebeam

Built with Laravel Cloud

Queuebeam

A durable delivery layer for Laravel apps that need to send webhooks, callbacks, Slack messages and email without blocking the request cycle.

Your app dispatches the operation, Queuebeam stores it encrypted, returns 202 Accepted, then workers execute it with retries, scheduling, audit trail and failure diagnosis.

API response

202

Storage

encrypted

Runtime

Laravel Cloud

operation timeline tenant isolated
received authenticated, quota reserved
queued ID published to Valkey
processing worker executes delivery
retry_scheduled Retry-After respected
succeeded response encrypted and indexed

Why it exists

Stop rebuilding delivery infrastructure in every Laravel app.

Async by contract

Queuebeam never contacts the destination during API intake. Persistence happens first; execution happens later.

Retries with evidence

Each attempt records status, timing, response preview, transport errors and retry schedule.

Tenant isolation

Tenant data lives in separate physical tables, with encrypted payloads, endpoints, responses, metas and AI analysis inputs.

Operational UI

Tenants can inspect operations, search, cancel, replay and request read-only failure explanations.

Architecture

Designed around Laravel Cloud primitives.

API and web

Laravel Cloud app cluster for tenant dashboard, admin and authenticated API.

Workers

Dedicated worker cluster for delivery, retries, scheduler, reconciler and AI analysis.

Data

MySQL as source of truth, Valkey for queue publication, Object Storage for encrypted attachments.

Realtime

Private Reverb channels stream operation state changes after persistence.

Use it in Laravel

From Composer to your first durable dispatch in three steps.

Run the command in the root of your Laravel 11, 12 or 13 project. Composer installs the SDK and Laravel discovers its service provider and Queuebeam facade automatically.

1

Install it from your Laravel project root

composer require driade/queuebeam-laravel

No manual provider registration is required. If you want a local configuration file, publish the optional package config:

php artisan vendor:publish --tag=queuebeam-config
2

Configure your tenant API key

Create a key in Dashboard → API keys and add it to your application's .env:

QUEUEBEAM_URL=https://api.queuebeam.cloud
QUEUEBEAM_API_KEY=qb_live_xxx
QUEUEBEAM_THROWS=true
QUEUEBEAM_TIMEOUT_MS=3000
QUEUEBEAM_ATTEMPTS=3

The timeout is per call in milliseconds. Three attempts means the initial request plus up to two retries; idempotency prevents duplicate operations.

3

Import the facade and dispatch

use Driade\Queuebeam\Facades\Queuebeam;

$result = Queuebeam::http()
    ->post($url, ['order_id' => 8472])
    ->metas(['order_id' => 8472])
    ->idempotencyKey('sync-order-8472')
    ->dispatch(throws: false);

if ($result->accepted) {
    $operation_id = $result->operationId;
    $remaining = $result->quota?->remaining;
}

HTTP and webhooks

Post to remote APIs with encrypted payloads, HMAC signatures and retry evidence.

Email and Slack

Queue notifications without making your own app responsible for provider failures.

Scheduled work

Use at() or delay() for callbacks and future delivery.

Searchable metas

Attach metas such as order IDs so support can find operations in the dashboard.

Examples

The same SDK covers the outbound work you usually scatter across jobs.

Every dispatch can use metas, retries, idempotency, throws: false, quota headers and scheduled execution. Queuebeam stores the operation first and runs it later.

Email BYO

Bring your own email provider.

Queuebeam does not force you into our sender reputation or a hosted template system. You connect your own provider credentials, we encrypt them, then we queue, retry, fail over and record every attempt.

Supported providers for the MVP:

SMTP Cloudflare Email Workers Mailgun Postmark Resend Amazon SES

Primary and failover

Choose a primary provider and an ordered fallback chain for incidents or rate limits.

Encrypted credentials

API keys, SMTP passwords, endpoints and provider responses are encrypted per tenant.

No campaigns

Transactional email only: no contact lists, marketing campaigns or hosted templates.

Send an email

Use Queuebeam for provider retries, failover evidence and delivery history.

email
Queuebeam::email()
    ->provider('primary-mail')
    ->failover(['postmark-backup', 'ses-eu'])
    ->to('customer@example.com')
    ->from('orders@your-app.com')
    ->subject('Your order has shipped')
    ->html($html)
    ->text($plain_text)
    ->metas(['order_id' => 8472])
    ->idempotencyKey('email-order-8472')
    ->dispatch(throws: false);

Notify Slack

Send operational alerts without blocking the request that detected the issue.

slack
Queuebeam::slack()
    ->destination('operations')
    ->message('Order 8472 needs manual review')
    ->blocks($blocks)
    ->metas(['order_id' => 8472, 'severity' => 'high'])
    ->dispatch();

Call a webhook

Sign payloads, preserve responses and replay safely from the dashboard.

webhook
Queuebeam::webhook('order.shipped')
    ->to('https://partner.example.com/webhooks')
    ->payload(['order_id' => 8472])
    ->signWith($secret)
    ->metas(['partner' => 'acme'])
    ->dispatch();

Schedule a callback

Defer work for auctions, expirations, billing checks or delayed follow-ups.

callback
Queuebeam::callback('close-auction')
    ->to(route('auctions.close', $auction))
    ->at(now()->addDays(3))
    ->payload(['auction_id' => $auction->id])
    ->metas(['auction_id' => $auction->id])
    ->dispatch(throws: false);