PHPackages                             digitaldev-lx/laravel-moloni - 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. digitaldev-lx/laravel-moloni

ActiveLibrary[API Development](/categories/api)

digitaldev-lx/laravel-moloni
============================

A Laravel package for integrating with the Moloni invoicing API

2.1.0(1mo ago)058↑136.4%MITPHPPHP ^8.4CI passing

Since Apr 1Pushed 1mo agoCompare

[ Source](https://github.com/digitaldev-lx/laravel-moloni)[ Packagist](https://packagist.org/packages/digitaldev-lx/laravel-moloni)[ RSS](/packages/digitaldev-lx-laravel-moloni/feed)WikiDiscussions main Synced 4w ago

READMEChangelog (3)Dependencies (14)Versions (6)Used By (0)

Laravel Moloni
==============

[](#laravel-moloni)

[![Packagist Version](https://camo.githubusercontent.com/75d4234f8534261e64a1a83d5a8f79a453833806f4143ee67004a23536433480/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6469676974616c6465762d6c782f6c61726176656c2d6d6f6c6f6e69)](https://packagist.org/packages/digitaldev-lx/laravel-moloni)[![Tests](https://github.com/digitaldev-lx/laravel-moloni/actions/workflows/tests.yml/badge.svg)](https://github.com/digitaldev-lx/laravel-moloni/actions/workflows/tests.yml)[![PHPStan](https://camo.githubusercontent.com/bbb4b88ceed026f420c1d76bc64e1ce076ed7382a9f5bac1cd59d85d807e7af4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c253230362d627269676874677265656e)](https://phpstan.org/)[![License](https://camo.githubusercontent.com/c79fa05c8a6e7fa4b7f192bcab00b8b555c804b93752ff05656f2eaa7b6bff82/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6469676974616c6465762d6c782f6c61726176656c2d6d6f6c6f6e69)](LICENSE)

A Laravel package for integrating with the [Moloni invoicing API](https://www.moloni.pt/dev/). Provides a clean, fluent interface to manage companies, customers, products, invoices, and all other Moloni resources with full type safety through DTOs and enums.

**Official page:** [digitaldev.pt/packages/laravel-moloni](https://digitaldev.pt/packages/laravel-moloni)

Requirements
------------

[](#requirements)

- PHP 8.4+
- Laravel 12 or 13

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

[](#installation)

Install the package via Composer:

```
composer require digitaldev-lx/laravel-moloni
```

Publish the configuration file:

```
php artisan vendor:publish --tag=moloni-config
```

Run the migrations (required for OAuth token storage):

```
php artisan migrate
```

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

[](#configuration)

Add the following environment variables to your `.env` file:

```
MOLONI_CLIENT_ID=your-client-id
MOLONI_CLIENT_SECRET=your-client-secret
MOLONI_USERNAME=your-username
MOLONI_PASSWORD=your-password
MOLONI_COMPANY_ID=your-company-id

# Optional. Defaults to production. Override to point at sandbox.
# Production: https://api.moloni.pt/v1/
# Sandbox:    https://api.moloni.pt/sandbox/
MOLONI_BASE_URL=https://api.moloni.pt/v1/
```

You can obtain your API credentials from the [Moloni Developer Portal](https://www.moloni.pt/dev/).

Sandbox
-------

[](#sandbox)

Moloni provides a sandbox environment for testing API integrations without affecting production data. The sandbox is available at `https://api.moloni.pt/sandbox/` and exposes the same endpoints as production.

### Getting sandbox credentials

[](#getting-sandbox-credentials)

1. You need an active Moloni account. If your login does not yet have access to the demonstration company, request it from `apoio@moloni.pt` indicating the email associated with your login.
2. The OAuth2 `client_id` / `client_secret` are the same as in production. Only the `base_url` changes.
3. Optionally, explore the API interactively at the [Moloni API Explorer](https://api.moloni.pt/sandbox/explorer.php).

### Switching environments

[](#switching-environments)

Set `MOLONI_BASE_URL` in your `.env`:

```
# Sandbox
MOLONI_BASE_URL=https://api.moloni.pt/sandbox/

# Production (or omit the variable entirely)
MOLONI_BASE_URL=https://api.moloni.pt/v1/
```

### Important: token persistence between environments

[](#important-token-persistence-between-environments)

OAuth2 tokens are stored in the `moloni_tokens` table and are **not scoped per environment**. When you switch `MOLONI_BASE_URL`, the existing token is no longer valid for the new host and the package will silently re-authenticate on the next call. To force a clean state, truncate the table:

```
php artisan tinker --execute="\DigitaldevLx\LaravelMoloni\Models\MoloniToken::truncate();"
```

A common pattern is to use a separate database for `local`/`testing` (already the default with SQLite) so production tokens are never reused against the sandbox host.

Usage
-----

[](#usage)

### Using the Facade

[](#using-the-facade)

All API interactions are available through the `Moloni` facade:

```
use DigitaldevLx\LaravelMoloni\Facades\Moloni;
```

### Companies

[](#companies)

```
// List all companies
$companies = Moloni::companies()->getAll();
```

### Customers

[](#customers)

```
$companyId = config('moloni.company_id');

// List all customers
$customers = Moloni::customers()->getAll($companyId);

// Find a customer by VAT number
$customer = Moloni::customers()->getByVat($companyId, '123456789');

// Create a customer using a DTO
use DigitaldevLx\LaravelMoloni\DataTransferObjects\Customer as CustomerDto;

$dto = new CustomerDto(
    vat: '123456789',
    number: 'C001',
    name: 'John Doe',
    email: 'john@example.com',
    address: '123 Main Street',
    city: 'Lisbon',
    zipCode: '1000-001',
    countryId: 1,
);

$customer = Moloni::customers()->insert($companyId, $dto);

// Create a customer using an array
$customer = Moloni::customers()->insert($companyId, [
    'vat' => '123456789',
    'number' => 'C001',
    'name' => 'John Doe',
    'email' => 'john@example.com',
]);
```

### Products

[](#products)

```
// List all products
$products = Moloni::products()->getAll($companyId);

// Find a product by reference
$product = Moloni::products()->getByReference($companyId, 'PROD-001');

// Create a product using a DTO
use DigitaldevLx\LaravelMoloni\DataTransferObjects\Product as ProductDto;
use DigitaldevLx\LaravelMoloni\Enums\ProductType;

$dto = new ProductDto(
    name: 'Widget',
    reference: 'PROD-001',
    type: ProductType::Product,
    categoryId: 1,
    unitId: 1,
    price: 29.99,
);

$product = Moloni::products()->insert($companyId, $dto);
```

### Invoices

[](#invoices)

```
use DigitaldevLx\LaravelMoloni\DataTransferObjects\Document as DocumentDto;
use DigitaldevLx\LaravelMoloni\DataTransferObjects\DocumentProduct;
use DigitaldevLx\LaravelMoloni\DataTransferObjects\Payment;

// Create an invoice
$dto = new DocumentDto(
    documentSetId: 1,
    customerId: 1,
    date: '2026-03-31',
    expirationDate: '2026-04-30',
    products: [
        new DocumentProduct(
            productId: 1,
            qty: 2,
            price: 29.99,
        ),
    ],
    payments: [
        new Payment(
            paymentMethodId: 1,
            value: 59.98,
            date: '2026-03-31',
        ),
    ],
);

$invoice = Moloni::invoices()->insert($companyId, $dto);

// Get PDF link for a document
$pdfLink = Moloni::invoices()->getPdfLink($companyId, $invoiceId);
```

### Other Document Types

[](#other-document-types)

The package supports all Moloni document types through dedicated resources:

- `Moloni::receipts()` - Receipts
- `Moloni::creditNotes()` - Credit Notes
- `Moloni::debitNotes()` - Debit Notes
- `Moloni::simplifiedInvoices()` - Simplified Invoices
- `Moloni::invoiceReceipts()` - Invoice Receipts
- `Moloni::deliveryNotes()` - Delivery Notes
- `Moloni::billsOfLading()` - Bills of Lading
- `Moloni::waybills()` - Waybills
- `Moloni::estimates()` - Estimates
- `Moloni::purchaseOrders()` - Purchase Orders
- `Moloni::internalDocuments()` - Internal Documents
- `Moloni::paymentReturns()` - Payment Returns
- `Moloni::ownAssetsMovementGuides()` - Own Asset Movement Guides
- `Moloni::customerReturnNotes()` - Customer Return Notes
- `Moloni::globalGuides()` - Global Guides
- `Moloni::supplierInvoices()` - Supplier Invoices
- `Moloni::supplierPurchaseOrders()` - Supplier Purchase Orders
- `Moloni::supplierSimplifiedInvoices()` - Supplier Simplified Invoices
- `Moloni::supplierCreditNotes()` - Supplier Credit Notes
- `Moloni::supplierDebitNotes()` - Supplier Debit Notes
- `Moloni::supplierReturnNotes()` - Supplier Return Notes
- `Moloni::supplierReceipts()` - Supplier Receipts
- `Moloni::supplierWarrantyRequests()` - Supplier Warranty Requests
- `Moloni::documents()` - Generic Documents

### Settings Resources

[](#settings-resources)

Access configuration resources for taxes, payment methods, document sets, and more:

```
$taxes = Moloni::taxes()->getAll($companyId);
$paymentMethods = Moloni::paymentMethods()->getAll($companyId);
$documentSets = Moloni::documentSets()->getAll($companyId);
$warehouses = Moloni::warehouses()->getAll($companyId);
$units = Moloni::measurementUnits()->getAll($companyId);
$maturityDates = Moloni::maturityDates()->getAll($companyId);
$deliveryMethods = Moloni::deliveryMethods()->getAll($companyId);
$bankAccounts = Moloni::bankAccounts()->getAll($companyId);

// Global resources (no company_id needed)
$countries = Moloni::countries()->getAll();
$currencies = Moloni::currencies()->getAll();
$languages = Moloni::languages()->getAll();
$exemptions = Moloni::taxExemptions()->getAll();
$fiscalZones = Moloni::fiscalZones()->getAll($countryId);
```

### Using DTOs

[](#using-dtos)

The package provides readonly Data Transfer Objects for type-safe data handling:

- `Customer` - Customer data
- `Supplier` - Supplier data
- `Salesman` - Salesman data
- `Product` - Product data
- `ProductStock` - Stock movement data
- `Document` - Document header data
- `DocumentProduct` - Document line item data
- `Payment` - Payment data
- `Address` - Address data
- `Tax` - Tax data
- `Vehicle` - Vehicle data
- `Deduction` - Withholding tax data
- `PriceClass` - Price class data

All DTOs are located in the `DigitaldevLx\LaravelMoloni\DataTransferObjects` namespace.

### Using Events

[](#using-events)

The package dispatches events for all mutation operations:

EventDispatched When`DocumentCreated`A document is successfully created`DocumentUpdated`A document is updated`DocumentDeleted`A document is deleted`DocumentCancelled`A document is cancelled`DocumentClosed`A document is closed/finalized`CustomerCreated`A new customer is created`CustomerUpdated`A customer is updated`CustomerDeleted`A customer is deleted`SupplierCreated`A new supplier is created`SupplierUpdated`A supplier is updated`SupplierDeleted`A supplier is deleted`SalesmanCreated`A new salesman is created`SalesmanUpdated`A salesman is updated`SalesmanDeleted`A salesman is deleted`ProductCreated`A new product is created`ProductUpdated`A product is updated`ProductDeleted`A product is deleted`TokenRefreshed`The OAuth token is refreshed`DocumentCreated`, `DocumentUpdated` and `DocumentDeleted` carry both the API response and a `documentType` string (e.g. `'invoices'`, `'creditNotes'`) so a single listener can route by document type.

All events are located in the `DigitaldevLx\LaravelMoloni\Events` namespace.

#### Auto-discovery (recommended)

[](#auto-discovery-recommended)

Create a listener class in your `app/Listeners` directory. Laravel automatically discovers and registers listeners based on the type-hint in the `handle` method:

```
use DigitaldevLx\LaravelMoloni\Events\DocumentCreated;

class SendInvoiceNotification
{
    public function handle(DocumentCreated $event): void
    {
        // $event->data contains the API response
        // $event->documentType contains the document type
    }
}
```

#### Manual registration

[](#manual-registration)

Register listeners manually in your `AppServiceProvider`:

```
use DigitaldevLx\LaravelMoloni\Events\DocumentCreated;
use Illuminate\Support\Facades\Event;

public function boot(): void
{
    Event::listen(
        DocumentCreated::class,
        SendInvoiceNotification::class,
    );
}
```

#### Closure listeners

[](#closure-listeners)

```
use DigitaldevLx\LaravelMoloni\Events\DocumentCreated;
use Illuminate\Support\Facades\Event;

Event::listen(function (DocumentCreated $event) {
    // ...
});
```

### Error Handling

[](#error-handling)

The package provides granular exception handling that maps directly to [Moloni's error system](https://www.moloni.pt/dev/controlo-de-erros/).

#### Exception Types

[](#exception-types)

ExceptionWhen`AuthenticationException`OAuth2 errors (invalid credentials, expired tokens, invalid client)`ValidationException`Data validation errors (required fields, invalid NIF, invalid email, etc.)`RateLimitException`API rate limit exceeded (HTTP 429)`MoloniException`All other API errorsAll exceptions extend `MoloniException`, so you can catch them all with a single catch block or handle each type individually.

#### Authentication Errors

[](#authentication-errors)

```
use DigitaldevLx\LaravelMoloni\Exceptions\AuthenticationException;
use DigitaldevLx\LaravelMoloni\Enums\AuthError;

try {
    $customers = Moloni::customers()->getAll($companyId);
} catch (AuthenticationException $e) {
    $e->authError;        // AuthError enum (e.g. AuthError::InvalidGrant)
    $e->errorDescription; // Moloni's error description string
    $e->getMessage();     // Full formatted message
}
```

Available `AuthError` enum values: `InvalidClient`, `InvalidUri`, `RedirectUriMismatch`, `InvalidRequest`, `UnsupportedGrantType`, `UnauthorizedClient`, `InvalidGrant`, `InvalidScope`.

#### Validation Errors

[](#validation-errors)

```
use DigitaldevLx\LaravelMoloni\Exceptions\ValidationException;
use DigitaldevLx\LaravelMoloni\Enums\ValidationErrorCode;

try {
    $customer = Moloni::customers()->insert($companyId, $data);
} catch (ValidationException $e) {
    $e->errors;             // Array of ['code' => int, 'field' => string, 'description' => string]
    $e->getFieldErrors();   // ['field_name' => 'description', ...]
    $e->hasFieldError('vat'); // true/false
}
```

Validation error codes (mapped via `ValidationErrorCode` enum):

CodeMeaning1Campo obrigatorio2Campo numerico invalido3Endereco de email invalido4Valor deve ser unico5Valor invalido6URL invalido7Codigo postal invalido8NIF portugues invalido9Data deve estar no formato AAAA-MM-DD10Associacao de documento invalida11Documento nao pode ser enviado para a AT12Data invalida13Numero de telefone invalido14Artigo tem taxas conflituantes15Artigo tem multiplas entradas de IVA16Identificacao do cliente obrigatoria (Art. 36 CIVA)17Limite de caracteres excedido#### Catching All Errors

[](#catching-all-errors)

```
use DigitaldevLx\LaravelMoloni\Exceptions\MoloniException;
use DigitaldevLx\LaravelMoloni\Exceptions\AuthenticationException;
use DigitaldevLx\LaravelMoloni\Exceptions\ValidationException;
use DigitaldevLx\LaravelMoloni\Exceptions\RateLimitException;

try {
    $invoice = Moloni::invoices()->insert($companyId, $data);
} catch (AuthenticationException $e) {
    // Handle auth errors (invalid credentials, expired tokens)
} catch (ValidationException $e) {
    // Handle validation errors (invalid data)
} catch (RateLimitException $e) {
    // Handle rate limiting (retry later)
} catch (MoloniException $e) {
    // Handle all other API errors
}
```

### HasMoloniDocuments Trait

[](#hasmolonidocuments-trait)

Add the `HasMoloniDocuments` trait to any Eloquent model to associate it with Moloni documents:

```
use DigitaldevLx\LaravelMoloni\Concerns\HasMoloniDocuments;

class Order extends Model
{
    use HasMoloniDocuments;
}

// Then use it
$order->moloniDocuments;
```

Available Resources
-------------------

[](#available-resources)

### Account &amp; Profile

[](#account--profile)

ResourceAccessor MethodMy Profile`Moloni::myProfile()`### Company

[](#company)

ResourceAccessor MethodCompanies`Moloni::companies()`Subscription`Moloni::subscription()`Users`Moloni::users()`### Entities

[](#entities)

ResourceAccessor MethodCustomers`Moloni::customers()`Customer Alternate Addresses`Moloni::customerAlternateAddresses()`Suppliers`Moloni::suppliers()`Salesmen`Moloni::salesmen()`### Products

[](#products-1)

ResourceAccessor MethodProducts`Moloni::products()`Product Categories`Moloni::productCategories()`Product Stocks`Moloni::productStocks()`Product Properties`Moloni::productProperties()`Price Classes`Moloni::priceClasses()`### Documents

[](#documents)

ResourceAccessor MethodDocuments`Moloni::documents()`Invoices`Moloni::invoices()`Receipts`Moloni::receipts()`Credit Notes`Moloni::creditNotes()`Debit Notes`Moloni::debitNotes()`Simplified Invoices`Moloni::simplifiedInvoices()`Invoice Receipts`Moloni::invoiceReceipts()`Delivery Notes`Moloni::deliveryNotes()`Bills of Lading`Moloni::billsOfLading()`Waybills`Moloni::waybills()`Estimates`Moloni::estimates()`Purchase Orders`Moloni::purchaseOrders()`Internal Documents`Moloni::internalDocuments()`Payment Returns`Moloni::paymentReturns()`Own Asset Movement Guides`Moloni::ownAssetsMovementGuides()`Customer Return Notes`Moloni::customerReturnNotes()`Global Guides`Moloni::globalGuides()`Supplier Invoices`Moloni::supplierInvoices()`Supplier Purchase Orders`Moloni::supplierPurchaseOrders()`Supplier Simplified Invoices`Moloni::supplierSimplifiedInvoices()`Supplier Credit Notes`Moloni::supplierCreditNotes()`Supplier Debit Notes`Moloni::supplierDebitNotes()`Supplier Return Notes`Moloni::supplierReturnNotes()`Supplier Receipts`Moloni::supplierReceipts()`Supplier Warranty Requests`Moloni::supplierWarrantyRequests()`### Settings

[](#settings)

ResourceAccessor MethodTaxes`Moloni::taxes()`Tax Exemptions`Moloni::taxExemptions()`Payment Methods`Moloni::paymentMethods()`Document Sets`Moloni::documentSets()`Warehouses`Moloni::warehouses()`Measurement Units`Moloni::measurementUnits()`Maturity Dates`Moloni::maturityDates()`Delivery Methods`Moloni::deliveryMethods()`Bank Accounts`Moloni::bankAccounts()`CAE Codes`Moloni::caeCodes()`Vehicles`Moloni::vehicles()`Deductions`Moloni::deductions()`Identification Templates`Moloni::identificationTemplates()`### Global Data

[](#global-data)

ResourceAccessor MethodCountries`Moloni::countries()`Fiscal Zones`Moloni::fiscalZones()`Languages`Moloni::languages()`Currencies`Moloni::currencies()`Currency Exchange`Moloni::currencyExchange()`Document Models`Moloni::documentModels()`Multibanco Gateways`Moloni::multibancoGateways()`Testing
-------

[](#testing)

Run the package test suite with Pest:

```
vendor/bin/pest
```

When testing your own application against the Moloni API, prefer `Http::fake()` so no real requests leave your machine. The host you fake should match `MOLONI_BASE_URL` exactly:

```
use Illuminate\Support\Facades\Http;

Http::fake([
    'api.moloni.pt/sandbox/grant/*' => Http::response([
        'access_token' => 'fake-token',
        'refresh_token' => 'fake-refresh',
        'expires_in' => 3600,
    ]),
    'api.moloni.pt/sandbox/customers/getAll/*' => Http::response([
        ['customer_id' => 1, 'name' => 'Test Customer'],
    ]),
]);

$customers = Moloni::customers()->getAll($companyId);
```

For an end-to-end example see `tests/Unit/MoloniClientTest.php`.

Troubleshooting
---------------

[](#troubleshooting)

SymptomCause / FixRepeated `401` after correct credentialsThe token in `moloni_tokens` was issued for a different `MOLONI_BASE_URL`. Truncate the table and re-authenticate.`AuthenticationException` with `AuthError::InvalidGrant`Wrong `MOLONI_USERNAME` / `MOLONI_PASSWORD`. Verify against the [Moloni client area](https://www.moloni.pt/login/).`AuthenticationException` with `AuthError::InvalidClient`Wrong `MOLONI_CLIENT_ID` / `MOLONI_CLIENT_SECRET`. Re-check at the [Developer Portal](https://www.moloni.pt/dev/).`RateLimitException`Moloni returned HTTP 429. Back off and retry; consider batching requests.Calls hit production while you expected sandbox`MOLONI_BASE_URL` is not set or is cached. Run `php artisan config:clear`.Static Analysis
---------------

[](#static-analysis)

```
vendor/bin/phpstan analyse
```

Code Style
----------

[](#code-style)

```
vendor/bin/pint
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

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

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE) for more information.

Credits
-------

[](#credits)

- [DigitalDev LX](https://digitaldev.pt/packages/laravel-moloni)

###  Health Score

44

—

FairBetter than 91% of packages

Maintenance92

Actively maintained with recent releases

Popularity12

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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 ~13 days

Total

5

Last Release

40d ago

Major Versions

1.1.0 → 2.0.02026-05-08

### Community

Maintainers

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

---

Top Contributors

[![digitaldev-lx](https://avatars.githubusercontent.com/u/81043832?v=4)](https://github.com/digitaldev-lx "digitaldev-lx (1 commits)")

---

Tags

laravelinvoicingportugalfaturaçãoMoloni

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/digitaldev-lx-laravel-moloni/health.svg)

```
[![Health](https://phpackages.com/badges/digitaldev-lx-laravel-moloni/health.svg)](https://phpackages.com/packages/digitaldev-lx-laravel-moloni)
```

###  Alternatives

[statamic/cms

The Statamic CMS Core Package

4.8k3.6M946](/packages/statamic-cms)[darkaonline/l5-swagger

OpenApi or Swagger integration to Laravel

3.0k37.6M127](/packages/darkaonline-l5-swagger)[knuckleswtf/scribe

Generate API documentation for humans from your Laravel codebase.✍

2.3k14.2M62](/packages/knuckleswtf-scribe)[openai-php/laravel

OpenAI PHP for Laravel is a supercharged PHP API client that allows you to interact with the Open AI API

3.7k9.5M85](/packages/openai-php-laravel)[kyon147/laravel-shopify

Shopify package for Laravel to aide in app development

485302.1k](/packages/kyon147-laravel-shopify)[mozex/anthropic-laravel

Laravel integration for the Anthropic API: facade, config publishing, install command, testing fakes, messages, streaming, tool use, thinking, and batches.

74331.3k1](/packages/mozex-anthropic-laravel)

PHPackages © 2026

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