PHPackages                             cjmellor/fal-ai-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. cjmellor/fal-ai-laravel

ActiveLibrary[API Development](/categories/api)

cjmellor/fal-ai-laravel
=======================

A Laravel SDK for Fal.ai

v2.1.0(3mo ago)61.3k—8.3%2[1 PRs](https://github.com/cjmellor/fal-ai-laravel/pulls)MITPHPPHP ^8.4CI passing

Since Jul 26Pushed 3mo agoCompare

[ Source](https://github.com/cjmellor/fal-ai-laravel)[ Packagist](https://packagist.org/packages/cjmellor/fal-ai-laravel)[ Docs](https://github.com/cjmellor/fal-ai-laravel)[ RSS](/packages/cjmellor-fal-ai-laravel/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (8)Dependencies (15)Versions (9)Used By (0)

[![Fal AI Laravel SDK Banner](https://private-user-images.githubusercontent.com/1848476/471155208-17a91407-7135-4a21-b9ed-43529ce7fa77.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzQzOTYxMjgsIm5iZiI6MTc3NDM5NTgyOCwicGF0aCI6Ii8xODQ4NDc2LzQ3MTE1NTIwOC0xN2E5MTQwNy03MTM1LTRhMjEtYjllZC00MzUyOWNlN2ZhNzcucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMyNCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMjRUMjM0MzQ4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9YTE3MzA0ZGRhMDRkMjdiMGNlMjRmYzc2NGNhYTc1YTU5ODgwMjBlNmM5MzJmYmNmYjQzNDdkNzBjMmM2ZmQ5ZiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.aR_LJ9GL4EYayJn6rwtZMyAybuLNte4l31vWOyEXpss)](https://private-user-images.githubusercontent.com/1848476/471155208-17a91407-7135-4a21-b9ed-43529ce7fa77.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzQzOTYxMjgsIm5iZiI6MTc3NDM5NTgyOCwicGF0aCI6Ii8xODQ4NDc2LzQ3MTE1NTIwOC0xN2E5MTQwNy03MTM1LTRhMjEtYjllZC00MzUyOWNlN2ZhNzcucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMyNCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMjRUMjM0MzQ4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9YTE3MzA0ZGRhMDRkMjdiMGNlMjRmYzc2NGNhYTc1YTU5ODgwMjBlNmM5MzJmYmNmYjQzNDdkNzBjMmM2ZmQ5ZiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.aR_LJ9GL4EYayJn6rwtZMyAybuLNte4l31vWOyEXpss)Fal.ai Laravel Package
======================

[](#falai-laravel-package)

[![Latest Version on Packagist](https://camo.githubusercontent.com/8a7393a04c4ea38e10b91ec80ddd2276b2c7fd238fb7ec8eba90628e84ceaecc/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f636a6d656c6c6f722f66616c2d61692d6c61726176656c3f636f6c6f723d7267622532383536253230313839253230323438253239266c6162656c3d72656c65617365267374796c653d666f722d7468652d6261646765)](https://packagist.org/packages/cjmellor/fal-ai-laravel)[![GitHub Tests Action Status](https://camo.githubusercontent.com/264aeefb62d4a1d58e6419079f32037e85fd930ef0bb758d21bb0a266f68ab5e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f636a6d656c6c6f722f66616c2d61692d6c61726176656c2f72756e2d706573742e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666f722d7468652d626164676526636f6c6f723d726762253238313334253230323339253230313238253239)](https://github.com/cjmellor/fal-ai-laravel/actions?query=workflow%3Arun-pest+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/6d7c0d6ae627b377322e70e41b6ae969bb6981563f847a2fd6e5a292658dc69a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f636a6d656c6c6f722f66616c2d61692d6c61726176656c2e7376673f636f6c6f723d7267622532383234392532303131352532303232253239267374796c653d666f722d7468652d6261646765)](https://packagist.org/packages/cjmellor/fal-ai-laravel)[![Packagist PHP Version](https://camo.githubusercontent.com/e96b35734c0b730c2554ef6a436e54488276b8ce58ee6e9cae81c3c1c5eb4b1d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646570656e64656e63792d762f636a6d656c6c6f722f66616c2d61692d6c61726176656c2f7068703f636f6c6f723d726762253238313635253230313830253230323532253239266c6f676f3d706870266c6f676f436f6c6f723d726762253238313635253230313830253230323532253239267374796c653d666f722d7468652d6261646765)](https://camo.githubusercontent.com/e96b35734c0b730c2554ef6a436e54488276b8ce58ee6e9cae81c3c1c5eb4b1d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646570656e64656e63792d762f636a6d656c6c6f722f66616c2d61692d6c61726176656c2f7068703f636f6c6f723d726762253238313635253230313830253230323532253239266c6f676f3d706870266c6f676f436f6c6f723d726762253238313635253230313830253230323532253239267374796c653d666f722d7468652d6261646765)[![Laravel Version](https://camo.githubusercontent.com/5d28d0e41499f1e328e8197f2d77e92a9c657051fa112690c92030c9130543b2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d25354531322d7267622832333525323036382532303530293f7374796c653d666f722d7468652d6261646765266c6f676f3d6c61726176656c)](https://camo.githubusercontent.com/5d28d0e41499f1e328e8197f2d77e92a9c657051fa112690c92030c9130543b2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d25354531322d7267622832333525323036382532303530293f7374796c653d666f722d7468652d6261646765266c6f676f3d6c61726176656c)

A Laravel package for integrating with the [Fal.ai](https://fal.ai) API, providing a fluent interface for AI model execution with built-in webhook support, streaming, and Platform APIs.

Note

**Multi-provider support:** This package also includes a [Replicate driver](#replicate-driver) for [Replicate.com](https://replicate.com).

Features
--------

[](#features)

- Fluent API for building model requests
- Queue and Sync execution modes
- Real-time streaming with Server-Sent Events (SSE)
- Webhook support with ED25519 signature verification
- Platform APIs for pricing, usage, analytics, and cost estimation
- Multi-provider architecture
- Replicate Deployments API for auto-scaling inference

Warning

**Upgrading from v1.x?** Version 2.0 is a complete architectural rewrite with breaking changes. The configuration structure, API methods, and class namespaces have all changed. You **must** follow the [Upgrade Guide](UPGRADE.md) to migrate from v1.x to v2.x.

Installation
------------

[](#installation)

Install via Composer:

```
composer require cjmellor/fal-ai-laravel
```

Publish the configuration:

```
php artisan vendor:publish --tag=fal-ai-config
```

Add your API key to `.env`:

```
FAL_API_KEY=your_fal_api_key
```

Basic Usage
-----------

[](#basic-usage)

```
use Cjmellor\FalAi\Facades\FalAi;

$response = FalAi::model('fal-ai/flux/schnell')
    ->prompt('A beautiful sunset over mountains')
    ->imageSize('landscape_4_3')
    ->run();

$requestId = $response->requestId;
```

### Using a Default Model

[](#using-a-default-model)

Set a default model in your config to omit the model ID:

```
// config/fal-ai.php
'drivers' => [
    'fal' => [
        'default_model' => 'fal-ai/flux/schnell',
    ],
],

// Usage
$response = FalAi::model()
    ->prompt('A cozy cabin in the woods')
    ->run();
```

Queue vs Sync Modes
-------------------

[](#queue-vs-sync-modes)

### Queue Mode (Default)

[](#queue-mode-default)

Requests are processed asynchronously. Use webhooks or polling to get results.

```
$response = FalAi::model('fal-ai/flux/dev')
    ->prompt('A detailed portrait')
    ->queue() // Optional - queue is the default
    ->run();

// Returns immediately with request_id
$requestId = $response->requestId;
```

**Best for:** Complex generations, batch processing, production workloads.

### Sync Mode

[](#sync-mode)

Requests block until complete and return the result directly.

```
$response = FalAi::model('fal-ai/flux/schnell')
    ->prompt('A quick sketch')
    ->sync()
    ->run();

// Returns the complete result
$images = $response->json()['images'];
```

**Best for:** Simple generations, interactive applications, development.

Warning

Sync mode may timeout for complex requests.

Polling Status &amp; Results
----------------------------

[](#polling-status--results)

For queued requests, poll for status and retrieve results:

```
// Check status
$status = FalAi::driver('fal')->status($requestId, 'fal-ai/flux/dev');

if ($status->json()['status'] === 'COMPLETED') {
    // Get the result
    $result = FalAi::driver('fal')->result($requestId, 'fal-ai/flux/dev');
    $images = $result->json()['images'];
}

// Cancel a queued request
FalAi::driver('fal')->cancel($requestId, 'fal-ai/flux/dev');
```

### Response Helpers

[](#response-helpers)

```
$response = FalAi::model('fal-ai/flux/schnell')
    ->prompt('A fox in a forest')
    ->run();

$response->requestId;    // Request ID
$response->statusUrl;    // URL to check status
$response->responseUrl;  // URL to get result
$response->cancelUrl;    // URL to cancel
```

Streaming
---------

[](#streaming)

Stream responses in real-time using Server-Sent Events:

```
$stream = FalAi::model('fal-ai/flux/schnell')
    ->prompt('A dancing robot')
    ->stream();

// Process the stream response
$stream->getResponse();
```

Note

Not all models support streaming. Check model documentation.

Webhook Support
---------------

[](#webhook-support)

### Setting a Webhook URL

[](#setting-a-webhook-url)

Adding a webhook automatically uses queue mode:

```
$response = FalAi::model('fal-ai/flux/schnell')
    ->prompt('A beautiful landscape')
    ->withWebhook('https://yourapp.com/webhooks/fal')
    ->run();
```

Important

Webhook URLs must use HTTPS and be publicly accessible.

### Built-in Webhook Route

[](#built-in-webhook-route)

The package provides a pre-configured route at `/webhooks/fal`:

```
$response = FalAi::model('fal-ai/flux/schnell')
    ->withWebhook(url('/webhooks/fal'))
    ->prompt('Your prompt')
    ->run();
```

### Custom Webhook Endpoint

[](#custom-webhook-endpoint)

Create your own endpoint with the verification middleware:

```
use Cjmellor\FalAi\Middleware\VerifyFalWebhook;

Route::post('/webhooks/fal-custom', function (Request $request) {
    $payload = $request->json()->all();

    if ($payload['status'] === 'OK') {
        $images = $payload['data']['images'];
        // Process images
    }

    return response()->json(['status' => 'processed']);
})->middleware(VerifyFalWebhook::class);
```

### Manual Verification

[](#manual-verification)

```
use Cjmellor\FalAi\Services\WebhookVerifier;
use Cjmellor\FalAi\Exceptions\WebhookVerificationException;

$verifier = new WebhookVerifier();

try {
    $verifier->verify($request);
    // Webhook is valid
} catch (WebhookVerificationException $e) {
    // Verification failed
}
```

### Webhook Payload

[](#webhook-payload)

**Success:**

```
{
    "request_id": "req_123",
    "status": "OK",
    "data": {
        "images": [{"url": "https://...", "width": 1024, "height": 768}],
        "seed": 12345
    }
}
```

**Error:**

```
{
    "request_id": "req_123",
    "status": "ERROR",
    "error": {"type": "ValidationError", "message": "Invalid prompt"}
}
```

Platform APIs
-------------

[](#platform-apis)

Access Fal.ai Platform APIs for pricing, usage, and analytics.

### Pricing

[](#pricing)

```
$pricing = FalAi::platform()
    ->pricing()
    ->forEndpoints(['fal-ai/flux/dev', 'fal-ai/flux/schnell'])
    ->get();

$unitPrice = $pricing->getUnitPriceFor('fal-ai/flux/dev');
```

### Cost Estimation

[](#cost-estimation)

```
// Estimate by API calls
$estimate = FalAi::platform()
    ->estimateCost()
    ->historicalApiPrice()
    ->endpoint('fal-ai/flux/dev', callQuantity: 100)
    ->estimate();

echo $estimate->totalCost; // e.g., 2.50

// Estimate by billing units
$estimate = FalAi::platform()
    ->estimateCost()
    ->unitPrice()
    ->endpoint('fal-ai/flux/dev', unitQuantity: 100)
    ->estimate();
```

### Usage

[](#usage)

```
$usage = FalAi::platform()
    ->usage()
    ->forEndpoint('fal-ai/flux/dev')
    ->between('2025-01-01T00:00:00Z', '2025-01-31T23:59:59Z')
    ->timeframe('day')
    ->withSummary()
    ->get();

$totalCost = $usage->getTotalCost();
$totalQuantity = $usage->getTotalQuantity();
```

### Analytics

[](#analytics)

```
$analytics = FalAi::platform()
    ->analytics()
    ->forEndpoint('fal-ai/flux/dev')
    ->between('2025-01-01', '2025-01-31')
    ->withAllMetrics()
    ->get();

$totalRequests = $analytics->getTotalRequests();
$successRate = $analytics->getSuccessRate();
```

### Delete Request Payloads

[](#delete-request-payloads)

Remove stored input/output data for a request:

```
$response = FalAi::platform()
    ->deleteRequestPayloads('req_123456789')
    ->delete();

if (!$response->hasErrors()) {
    echo "Deleted successfully";
}
```

Fluent API
----------

[](#fluent-api)

### Dynamic Methods

[](#dynamic-methods)

Method names are converted from camelCase to snake\_case:

```
FalAi::model('fal-ai/flux/schnell')
    ->prompt('A sunset')           // prompt
    ->imageSize('1024x1024')       // image_size
    ->numInferenceSteps(50)        // num_inference_steps
    ->guidanceScale(7.5)           // guidance_scale
    ->negativePrompt('blurry')     // negative_prompt
    ->numImages(2)                 // num_images
    ->seed(12345)                  // seed
    ->run();
```

### Bulk Data

[](#bulk-data)

```
$response = FalAi::model('fal-ai/flux/schnell')
    ->with([
        'prompt' => 'A landscape',
        'image_size' => '1024x1024',
        'num_images' => 2,
    ])
    ->run();
```

### Immutable Methods

[](#immutable-methods)

Create new instances without modifying the original:

```
$base = FalAi::model('fal-ai/flux/schnell')
    ->imageSize('1024x1024')
    ->numImages(1);

$request1 = $base->promptImmutable('A dragon');
$request2 = $base->promptImmutable('A unicorn');

// $base is unchanged
```

### Conditional Methods

[](#conditional-methods)

```
$response = FalAi::model('fal-ai/flux/schnell')
    ->prompt('A sunset')
    ->when($highQuality, fn($req) => $req->numInferenceSteps(100))
    ->unless($skipSeed, fn($req) => $req->seed(42))
    ->run();
```

Configuration
-------------

[](#configuration)

```
// config/fal-ai.php
return [
    'default' => env('AI_DRIVER', 'fal'),

    'drivers' => [
        'fal' => [
            'api_key' => env('FAL_API_KEY'),
            'base_url' => env('FAL_BASE_URL', 'https://queue.fal.run'),
            'sync_url' => env('FAL_SYNC_URL', 'https://fal.run'),
            'platform_base_url' => env('FAL_PLATFORM_URL', 'https://api.fal.ai'),
            'default_model' => env('FAL_DEFAULT_MODEL'),
            'webhook' => [
                'jwks_cache_ttl' => 86400,
                'timestamp_tolerance' => 300,
                'verification_timeout' => 10,
            ],
        ],
    ],
];
```

Error Handling
--------------

[](#error-handling)

```
use Saloon\Exceptions\Request\RequestException;
use Cjmellor\FalAi\Exceptions\WebhookVerificationException;

try {
    $response = FalAi::model('fal-ai/flux/schnell')
        ->prompt('A sunset')
        ->run();
} catch (RequestException $e) {
    $status = $e->getResponse()->status();
    $body = $e->getResponse()->json();
} catch (WebhookVerificationException $e) {
    // Webhook verification failed
}
```

---

Replicate Driver
----------------

[](#replicate-driver)

This package includes a driver for [Replicate.com](https://replicate.com).

### Setup

[](#setup)

Add your Replicate API key to `.env`:

```
REPLICATE_API_KEY=your_replicate_api_key
```

### Usage

[](#usage-1)

```
use Cjmellor\FalAi\Facades\FalAi as Ai;

$response = Ai::driver('replicate')
    ->model('stability-ai/sdxl')
    ->prompt('A majestic dragon')
    ->numOutputs(2)
    ->run();
```

### Model Format

[](#model-format)

Replicate models can use two formats:

**Official Models:**

```
// Format: owner/model
->model('stability-ai/sdxl')
```

**Custom Models (with specific version):**

```
// Format: owner/model:version
->model('your-username/my-custom-model:da77bc59ee60...')
```

Note

The `:version` suffix is only required for custom models. Official Replicate models use just `owner/model`.

### Checking Status

[](#checking-status)

Replicate uses polling for status:

```
$response = Ai::driver('replicate')
    ->model('stability-ai/sdxl')
    ->prompt('A landscape')
    ->run();

// Poll for completion
$status = Ai::driver('replicate')->status($response->id);

// Status helpers
$status->isRunning();    // starting or processing
$status->isSucceeded();  // completed successfully
$status->isFailed();     // failed
$status->isCanceled();   // canceled
$status->isTerminal();   // any final state

// Get result when complete
if ($status->isSucceeded()) {
    $output = $status->output;
}
```

### Key Differences from Fal

[](#key-differences-from-fal)

FeatureFal.aiReplicateQueue/Sync modesYesNo (always async)StreamingYesNo (use polling)Platform APIsYesNoDeployments APINoYesWebhooksYesYes### Replicate Webhooks

[](#replicate-webhooks)

```
$response = Ai::driver('replicate')
    ->model('stability-ai/sdxl')
    ->prompt('A sunset')
    ->withWebhook('https://yourapp.com/webhooks/replicate')
    ->run();
```

Built-in route available at `/webhooks/replicate`.

Configure webhook verification in `.env`:

```
REPLICATE_WEBHOOK_SECRET=your_webhook_secret
```

### Deployments

[](#deployments)

Manage Replicate deployments for auto-scaling model inference.

#### Create a Deployment

[](#create-a-deployment)

```
$deployment = Ai::driver('replicate')
    ->deployments()
    ->create('my-image-generator')
    ->model('stability-ai/sdxl')
    ->version('da77bc59ee60423279fd632efb4795ab731d9e3ca9705ef3341091fb989b7eaf')
    ->hardware('gpu-t4')
    ->instances(1, 5)  // min, max
    ->save();

echo $deployment->name;       // 'my-image-generator'
echo $deployment->hardware(); // 'gpu-t4'
```

**Available Hardware:** `cpu`, `gpu-t4`, `gpu-l40s`, `gpu-l40s-2x`, `gpu-a100-large`, `gpu-a100-large-2x`, `gpu-h100`

#### List Deployments

[](#list-deployments)

```
$collection = Ai::driver('replicate')->deployments()->list();

foreach ($collection->results() as $deployment) {
    echo $deployment->name . ': ' . $deployment->hardware();
}

// Pagination
if ($collection->hasMore()) {
    $nextUrl = $collection->next();
}
```

#### Get, Update, Delete

[](#get-update-delete)

```
// Get
$deployment = Ai::driver('replicate')->deployments()->get('owner', 'name');

// Update
$updated = Ai::driver('replicate')
    ->deployments()
    ->update('owner', 'name')
    ->hardware('gpu-a100-large')
    ->instances(2, 10)
    ->save();

// Delete
Ai::driver('replicate')->deployments()->delete('owner', 'name');
```

#### Run Predictions via Deployment

[](#run-predictions-via-deployment)

```
$prediction = Ai::driver('replicate')
    ->deployment('owner/my-deployment')
    ->with(['prompt' => 'A sunset over mountains'])
    ->webhook('https://example.com/webhook')
    ->run();

// Use prediction ID with standard status/result methods
$status = Ai::driver('replicate')->status($prediction->id);
```

---

Testing
-------

[](#testing)

```
composer test
```

Security
--------

[](#security)

Important

**Webhook Verification:**

- **Fal.ai:** ED25519 signatures with JWKS
- **Replicate:** HMAC-SHA256 signatures

Always use HTTPS for webhook URLs and keep API keys secure.

Contributing
------------

[](#contributing)

Contributions are welcome! Please submit a Pull Request.

License
-------

[](#license)

MIT License. See [LICENSE](LICENSE) for details.

###  Health Score

47

—

FairBetter than 94% of packages

Maintenance78

Regular maintenance activity

Popularity27

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 85% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~25 days

Recently: every ~5 days

Total

8

Last Release

117d ago

Major Versions

v0.0.1 → v1.0.02025-09-02

v1.2.0 → v2.0.02026-01-12

### Community

Maintainers

![](https://www.gravatar.com/avatar/a50ec73c5a205880cbeeab7dc86f12acbe34eace997d01772d9380a1b2455390?d=identicon)[cmellor](/maintainers/cmellor)

---

Top Contributors

[![cjmellor](https://avatars.githubusercontent.com/u/1848476?v=4)](https://github.com/cjmellor "cjmellor (68 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (9 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (3 commits)")

---

Tags

fal-ailaravelphpsdkphplaravelsdkfal.ai

###  Code Quality

TestsPest

Static AnalysisPHPStan, Rector

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/cjmellor-fal-ai-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/cjmellor-fal-ai-laravel/health.svg)](https://phpackages.com/packages/cjmellor-fal-ai-laravel)
```

###  Alternatives

[resend/resend-laravel

Resend for Laravel

1191.4M6](/packages/resend-resend-laravel)[gemini-api-php/laravel

Gemini API client for Laravel

8915.7k](/packages/gemini-api-php-laravel)[octw/aramex

A Library to integrate with Aramex APIs

2925.2k](/packages/octw-aramex)[jetimob/asaas-sdk-php-laravel

Laravel SDK for Asaa's API

194.7k](/packages/jetimob-asaas-sdk-php-laravel)[wxm/pdd-sdk

拼多多 SDK 封装, 调用简单、语义化增强。支持 Laravel/Lumen。

154.7k](/packages/wxm-pdd-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
