Overview
Log streams fan out your audit events to external destinations as they are ingested. Immutable supports two destination types: HTTPS webhooks and S3-compatible storage. Log streams are quota-gated, not plan-gated — every plan can use them.Destination Types
HTTPS Webhook
Events are POSTed to your endpoint as JSON with HMAC signature verification.
S3 Storage
Events are written to your S3-compatible bucket (AWS S3, Cloudflare R2, MinIO, etc.).
HTTPS Webhooks
Payload Format
Each event is sent as aPOST request with:
Content-Type: application/jsonX-Immutable-Signature: sha256={hmac_hash}
Verifying Signatures
Failure Handling
If your endpoint returns a non-2xx status code, Immutable retries with exponential backoff. After 3 consecutive failures, the stream is automatically moved to anerror state and stops delivering events.
Re-enable the stream from the dashboard after resolving the issue.
S3 Storage
Configure a stream with your S3-compatible credentials:| Field | Description |
|---|---|
| Bucket | Target bucket name |
| Region | Bucket region (e.g. us-east-1) |
| Access Key ID | Your storage access key |
| Secret Access Key | Your storage secret key |
| Endpoint | Custom endpoint for non-AWS providers (e.g. Cloudflare R2) |
| Prefix | Optional path prefix for objects |
Immutable uses Laravel’s
Storage::build() to connect to your bucket at runtime with your credentials. Credentials are encrypted at rest.Cached Fanout
Log stream delivery uses cached configuration to minimize database lookups during high-throughput ingestion. Stream configuration is cached and refreshed periodically.Plan Quotas
| Plan | Stream Limit |
|---|---|
| Free | 1 |
| Starter | 3 |
| Pro | 10 |
| Enterprise | Unlimited |