PHPackages                             podio-labs/podio-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. podio-labs/podio-laravel

ActiveLibrary[API Development](/categories/api)

podio-labs/podio-laravel
========================

Minimal Laravel bridge for the Podio API client.

0.1.1(today)31↑2900%[1 issues](https://github.com/podio-labs/podio-laravel/issues)MITPHPPHP ^8.3

Since Jun 19Pushed todayCompare

[ Source](https://github.com/podio-labs/podio-laravel)[ Packagist](https://packagist.org/packages/podio-labs/podio-laravel)[ RSS](/packages/podio-labs-podio-laravel/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (8)Versions (3)Used By (0)

Podio for Laravel
=================

[](#podio-for-laravel)

[![Latest Stable Version](https://camo.githubusercontent.com/e0041440131c475f771b953a6305ba2f1649ed230801c3b9bd2ca275074b957c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f706f64696f2d6c6162732f706f64696f2d6c61726176656c)](https://packagist.org/packages/podio-labs/podio-laravel)[![License](https://camo.githubusercontent.com/511b342abaa4911fdd8265affa64664d9b6ff3e79e894b467708e1c99688ef85/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f706f64696f2d6c6162732f706f64696f2d6c61726176656c)](https://packagist.org/packages/podio-labs/podio-laravel)[![Total Downloads](https://camo.githubusercontent.com/54f94dea88cd75d97515bd975fad07fa7b30508481fbf7bfe8e22a0d6f5fb21c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f706f64696f2d6c6162732f706f64696f2d6c61726176656c)](https://packagist.org/packages/podio-labs/podio-laravel)

Talk to the Podio API from Laravel through a clean, testable `Podio` facade — config-driven auth, cached tokens, and Laravel's own HTTP client under the hood.

In this example, we create an item and comment on it — authentication is handled for you:

```
use Podio\Laravel\Facades\Podio;

$item = Podio::items()->create($appId, [
    'fields' => ['title' => 'New lead'],
]);

Podio::comments()->create('item', $item->item_id, [
    'value' => 'Created from the contact form',
]);
```

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

[](#installation)

> Requires PHP 8.3+ and Laravel 12 or 13.

You can install the package via composer:

```
composer require podio-labs/podio-laravel
```

That's it — the `PodioServiceProvider` and `Podio` facade are auto-discovered, so you're ready to go.

Optionally, publish the config file:

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

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

[](#configuration)

### Minimal

[](#minimal)

Configure your `.env`:

```
PODIO_CLIENT_ID=your-app-client-id
PODIO_CLIENT_SECRET=your-app-client-secret
PODIO_USERNAME=service@example.com
PODIO_PASSWORD=password
```

### Full

[](#full)

Everything in `config/podio.php`:

KeyEnvDefault`base_url``PODIO_BASE_URL``'https://api.podio.com'``auth.client_id``PODIO_CLIENT_ID``null``auth.client_secret``PODIO_CLIENT_SECRET``null``auth.username``PODIO_USERNAME``null``auth.password``PODIO_PASSWORD``null``http.timeout``PODIO_HTTP_TIMEOUT``30``http.connect_timeout``PODIO_HTTP_CONNECT_TIMEOUT``10``cache.store``PODIO_CACHE_STORE``env('CACHE_STORE')``cache.key``PODIO_CACHE_KEY``'podio:access_token'`Usage
-----

[](#usage)

### Endpoints

[](#endpoints)

Everything goes through the `Podio` facade.

```
use Podio\Laravel\Facades\Podio;

// Items
$item = Podio::items()->get($itemId);
$item = Podio::items()->create($appId, ['fields' => ['title' => 'Hello']]);
$item = Podio::items()->update($itemId, ['fields' => ['title' => 'Updated']]);
$total = Podio::items()->getCount($appId);

// Files
$file = Podio::files()->upload($absolutePath, 'photo.jpg');
Podio::files()->attach($file->file_id, ['ref_type' => 'item', 'ref_id' => $itemId]);
$bytes = Podio::files()->getRaw($fileId);

// Comments & embeds
Podio::comments()->create('item', $itemId, ['value' => 'Imported from Dropbox']);
$embed = Podio::embed()->create(['url' => 'https://youtu.be/...']);

// Webhooks
$hooks = Podio::hooks()->getForApp($appId);
$hook = Podio::hooks()->createForApp($appId, ['url' => route('podio.hook'), 'type' => 'item.create']);
Podio::hooks()->verify($hook->hook_id);

// Apps
$app = Podio::apps()->get($appId);
```

### Raw requests

[](#raw-requests)

For anything not covered by an endpoint, send a request directly:

```
$response = Podio::send('GET', '/item/123', ['raw' => true]);

$response->statusCode();
$response->body();
$response->rateLimit();
```

### Rate limit

[](#rate-limit)

```
Podio::rateLimit()->limit();
Podio::rateLimit()->remaining();
```

How it works
------------

[](#how-it-works)

`Podio\Laravel\Podio` builds a `Podio\Client\PodioClient` from your config and:

- transports requests through Laravel's `Http` facade via a PSR-18 adapter (`LaravelHttpClient`) — so it honours your HTTP config, fakes, and middleware;
- caches the OAuth access token (`cache.store` / `cache.key`) and reuses it across requests, so you are not re-authenticating on every call.

The facade is bound as a singleton, so the client — and its cached token — is shared for the lifetime of the request.

Testing
-------

[](#testing)

```
composer test
```

Because transport runs through the `Http` facade, you can fake Podio in your own tests:

```
Http::fake([
    'api.podio.com/oauth/token' => Http::response(['access_token' => 'test', 'expires_in' => 3600]),
    'api.podio.com/item/*' => Http::response(['item_id' => 1]),
]);
```

License
-------

[](#license)

Podio Laravel is open-sourced software licensed under the [MIT license](LICENSE.md).

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance93

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 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 ~0 days

Total

2

Last Release

0d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/30530408?v=4)[Karim](/maintainers/karim-tao)[@karim-tao](https://github.com/karim-tao)

---

Top Contributors

[![karim-tao](https://avatars.githubusercontent.com/u/30530408?v=4)](https://github.com/karim-tao "karim-tao (2 commits)")

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/podio-labs-podio-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/podio-labs-podio-laravel/health.svg)](https://phpackages.com/packages/podio-labs-podio-laravel)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[defstudio/telegraph

A laravel facade to interact with Telegram Bots

815320.5k3](/packages/defstudio-telegraph)[simplestats-io/laravel-client

Analytics for Laravel. Track visitors, registrations, and payments. Discover which channels actually drive revenue, not just traffic. Server-side, GDPR compliant, ad-blocker proof.

5019.3k](/packages/simplestats-io-laravel-client)[jasara/php-amzn-selling-partner-api

A fluent interface for Amazon's Selling Partner API in PHP

1348.1k1](/packages/jasara-php-amzn-selling-partner-api)

PHPackages © 2026

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