PHPackages                             juanparati/podium - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. juanparati/podium

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

juanparati/podium
=================

A modern PHP library for Podium compatible with Laravel

1.2.0(2y ago)11.8kMITPHPPHP &gt;=8.1

Since May 19Pushed 2y ago1 watchersCompare

[ Source](https://github.com/juanparati/podium)[ Packagist](https://packagist.org/packages/juanparati/podium)[ RSS](/packages/juanparati-podium/feed)WikiDiscussions master Synced yesterday

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

Podium
======

[](#podium)

A modern [Podio](https://www.podio.com/) API client compatible with Laravel.

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

[](#installation)

```
composer require juanparati/podium

```

### Laravel setup

[](#laravel-setup)

This library can is compatible with Laravel. The following command will deploy the configuration file:

```
artisan vendor:publish --provider="Juanparati\Podium\Providers\PodiumProvider"

```

How to use it?
--------------

[](#how-to-use-it)

### Client instance and authentication

[](#client-instance-and-authentication)

```
$client = new \Juanparati\Podium\Podium(
        session: '12346',
        clientId: 'myClientId',
        clientSecret: 'myClientSecret'
);

$client->authenticate(
    new \Juanparati\Podium\Auths\AppAuth(
        appId: '987654',
        appToken: 'myAppToken'
    )
);
```

### Request a single item

[](#request-a-single-item)

```
$item = (new \Juanparati\Podium\Requests\ItemRequest($client))->get(itemId: 11111111);
```

### Request all the items of an App

[](#request-all-the-items-of-an-app)

```
$models = (new \Juanparati\Podium\Requests\ItemRequest($client))->filter(appId: 987654);
```

or alternatively with custom options:

```
$models =  (new \Juanparati\Podium\Models\ItemFilterModel([], $client))
        ->setSortBy('last_edit_on')
        ->setSortDesc(true)
        ->setLimit(5);
```

Read all the items. Note that items() method is a generator, and it will automatically request the additional pages.

```
$itemNum = 0;

foreach ($models->items() as $item) {
    print_r($item->originalValues())

    // The setLimit options indicate the limit of items per page to the request,
    // but the generator will automatically request the next page.
    // In order to limit the number of results we should manually limit the results.
    if ($itemNum === 10)
        break;

    $itemNum++;
}
```

### Reading item values.

[](#reading-item-values)

This library provides to ways to read the values of the items.

1. Obtain the original values using the `originalValues` method:

```
$item->originalValues();
```

2. Obtain the simplified values using the `decodeValue` method:

```
$item->decodeValue();
```

Both values will transverse all the values tree, however you can reference to an specific value.

```
// Accessing to the fields
$item->fields->decodeValue();
```

or

```
// Accessing to specific values
$item->fields->title;
$item->fields->{'my-custom-field'};
```

### Saving items

[](#saving-items)

⚠️ **Note**: Saving items is still an experimental feature. Use this feature at your own risk.

It's possible to save/update items.

```
// Accessing to specific values
$item->fields->title = "My new title";
$item->save(silent: false, hook: true); // Will perform silent update calling the bounded hooks
```

### Inserting new items

[](#inserting-new-items)

⚠️ **Note**: Saving items is still an experimental feature. Use this feature at your own risk.

```
$attr = [
    'title' => 'My new title'
    'revenue' => ['currency' => 'DKK', 'value' => 123.34];
];

(new \Juanparati\Podium\Requests\ItemRequest($client))->create(
    appId: 987654,
    attr: $attr,
    silent: false,
    hook: false
);
```

### Using different field keys

[](#using-different-field-keys)

It's possible to retrieve the field keys using the following formats:

- external\_id (Default).
- external\_id in snake case format.
- field\_id.

For example sometime is very suitable to retrieve the field keys in snake case so it's easiest to manipulate.

```
$item = (new \Juanparati\Podium\Requests\ItemRequest($client))->get(itemId: 11111111);
echo $item->fields->{'my-long-named-field'};

$item->setOptions([
    \Juanparati\Podium\Models\ItemFieldModel::class => [
        \Juanparati\Podium\Models\ItemFieldModel::OPTION_KEY_AS => \Juanparati\Podium\Models\ItemFieldModel::KEY_AS_SNAKECASE,
    ]
);

echo $item->fields->my_long_named_field;

$item->setOptions([
    \Juanparati\Podium\Models\ItemFieldModel::class => [
        \Juanparati\Podium\Models\ItemFieldModel::OPTION_KEY_AS => \Juanparati\Podium\Models\ItemFieldModel::KEY_AS_FIELD_ID,
    ]
);

echo $item->fields->{'12345567'};
```

### Transforming date and datetime to different time zones and formats

[](#transforming-date-and-datetime-to-different-time-zones-and-formats)

```
$item = (new \Juanparati\Podium\Requests\ItemRequest($client))->get(itemId: 11111111);

$item->setOptions([
    \Juanparati\Podium\Models\ItemFieldModel::class => [
        \Juanparati\Podium\Models\ItemFields\DateItemField::class => [
            \Juanparati\Podium\Models\ItemFields\DateItemField::OPTION_TIMEZONE => 'Europe/Copenhagen',
            \Juanparati\Podium\Models\ItemFields\DateItemField::OPTION_FORMAT => \Juanparati\Podium\Models\ItemFields\DateItemField::FORMAT_TIMESTAMP
        ]
    ]
);
```

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity17

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

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

Total

3

Last Release

1069d ago

Major Versions

0.9.16 → 1.1.02023-02-23

PHP version history (3 changes)0.9.16PHP ^8.0

1.1.0PHP ^8.1

1.2.0PHP &gt;=8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/4caf72b4d969cfb8cdfbdc1d594c85b51c9316caf76b80aa0f9de7e3736cf59f?d=identicon)[juanparati](/maintainers/juanparati)

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/juanparati-podium/health.svg)

```
[![Health](https://phpackages.com/badges/juanparati-podium/health.svg)](https://phpackages.com/packages/juanparati-podium)
```

###  Alternatives

[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

255.2k](/packages/aedart-athenaeum)[laravel-zero/framework

The Laravel Zero Framework.

3371.4M369](/packages/laravel-zero-framework)[laravolt/avatar

Turn name, email, and any other string into initial-based avatar or gravatar.

2.0k5.4M31](/packages/laravolt-avatar)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9682.1M97](/packages/roots-acorn)[flarum/core

Delightfully simple forum software.

211.3M1.9k](/packages/flarum-core)[illuminate/broadcasting

The Illuminate Broadcasting package.

7126.5M178](/packages/illuminate-broadcasting)

PHPackages © 2026

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