For AI agents and LLMs: a structured documentation index is available at /llms.txt. Every page has a Markdown sibling — append .md to any URL.

Skip to content
Docs

Laravel Cashier Paddle

Official Laravel package that provides a fluent interface to Paddle Billing subscription services, including swaps, pausing, quantities, and grace periods.

AI summary

Use Laravel Cashier Paddle to integrate Paddle Billing with a fluent Laravel API for subscriptions, swaps, pausing, quantities, and cancellation grace periods. The package is maintained by the Laravel team, not by Paddle.

  • • Install with composer require laravel/cashier-paddle, then publish migrations and add the Billable trait to your User model following the Laravel Cashier Paddle documentation.
  • • Set PADDLE_CLIENT_SIDE_TOKEN, PADDLE_API_KEY, PADDLE_WEBHOOK_SECRET, and PADDLE_SANDBOX from Paddle > Developer tools > Authentication.
  • • Use the @paddleJS Blade directive to load Paddle.js, then build checkouts via $user->checkout('pri_...') and render with the <x-paddle-button> component.

Laravel Cashier Paddle is a Laravel package that provides a fluent interface to Paddle Billing. It wraps subscription management — swaps, pausing, quantities, cancellation grace periods — so you don't have to write the boilerplate.

Install

Require the package via Composer:

Shell
composer require laravel/cashier-paddle

Follow the Laravel documentation for the full install — publishing migrations, configuring environment variables, and wiring up the Billable trait on your User model.

Configure

Cashier Paddle reads configuration from standard Laravel environment variables:

env
PADDLE_CLIENT_SIDE_TOKEN=your-paddle-client-side-token
PADDLE_API_KEY=your-paddle-api-key
PADDLE_WEBHOOK_SECRET="your-paddle-webhook-secret"
PADDLE_SANDBOX=true

Create the API key and client-side token in Paddle > Developer tools > Authentication and the webhook secret on your notification destination in Paddle > Developer tools > Notifications.

Quick example

Load Paddle.js by placing the @paddleJS Blade directive right before your application layout's closing </head> tag:

blade
<head>
@paddleJS
</head>

Open a checkout for a single price inside a route:

PHP
use Illuminate\Http\Request;
Route::get('/buy', function (Request $request) {
$checkout = $request->user()
->checkout('pri_01hsxyh9txq4rzbrhbyngkhy46')
->returnTo(route('dashboard'));
return view('checkout', ['checkout' => $checkout]);
});

Render the checkout in a Blade template using the Paddle.js button component provided by Cashier:

blade
<x-paddle-button :checkout="$checkout" class="px-8 py-4">
Buy
</x-paddle-button>

Was this page helpful?