PHPackages                             ocolin/plume - 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. [HTTP &amp; Networking](/categories/http)
4. /
5. ocolin/plume

ActiveLibrary[HTTP &amp; Networking](/categories/http)

ocolin/plume
============

PHP client for the Plume Design ISP cloud API. Enables ISPs and CSPs to provision and manage HomePass and WorkPass subscribers via the Plume Cloud REST API.

v3.0.1(1mo ago)116MITPHPPHP ^8.3

Since Sep 22Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/ocolin/Plume)[ Packagist](https://packagist.org/packages/ocolin/plume)[ Docs](https://github.com/ocolin/Plume)[ RSS](/packages/ocolin-plume/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (10)Versions (9)Used By (0)

Plume
=====

[](#plume)

Table of Contents
-----------------

[](#table-of-contents)

- [What is Plume?](#what-is-plume)
- [Requirements](#requirements)
- [Installation](#installation)
- [Configuration](#configuration)
    - [Environment Variables](#instantiating-with-environment-variables)
    - [Constructor Arguments](#instantiating-with-constructor-arguments)
    - [Additional Configuration](#additional-configuration)
- [Interpolation Concepts](#interpolation-concepts)
    - [Endpoint Variables](#endpoint-variables)
    - [HTTP Body Variables](#http-body-variables)
- [Response](#response)
- [Usage](#usage)
    - [GET](#get)
    - [POST](#post)
    - [PUT](#put)
    - [PATCH](#patch)
    - [DELETE](#delete)
    - [HEAD](#head)
    - [REQUEST](#request)
- [TODO](#todo)

What is Plume?
--------------

[](#what-is-plume)

This plugin is a lightweight PHP API client for Plume cloud services.

Plume hosts a cloud based service for provisioning and managing home and office wifi networks. Plume provides an API to their cloud services that allow partners to manage their customers's wifi and networking needs remotely.

This client was designed so that API calls can be quickly and easily be implemented into your tools for managing Plume services.

### Plume website

[](#plume-website)

### Plume API explorer

[](#plume-api-explorer)

Requires partner login:

### Ocolin/Plume github

[](#ocolinplume-github)

---

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

[](#requirements)

- PHP &gt;= 8.2
- psr/http-message ^1.0|^2.0
- guzzlehttp/guzzle ^7.10
- ocolin/global-type ^2.0

---

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

[](#installation)

```
composer require ocolin/plume

```

---

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

[](#configuration)

There are two ways to configure the Plume client. One is using environment variables and the other is using the constructor.

### Instantiating with environment variables

[](#instantiating-with-environment-variables)

The following environment variables are used:

NameDescriptionPLUME\_AUTH\_URLUrl to Plume's authentication service.PLUME\_AUTH\_HASHPartner token for authentication service.PLUME\_PARTNER\_IDYour assigned Plume Partner IDPLUME\_GROUP\_IDYour assigned Plume Group IDPLUME\_API\_URLURL to the Plume cloud API serverThere is an [.env.example](.env.example) file included to use as a template for your projects.

#### Example:

[](#example)

```
// Setting manually for demonstration
$_ENV['PLUME_AUTH_URL']   = 'https://url.to.authserver.test';
$_ENV['PLUME_AUTH_HASH']  = 'MyAuthenticationTokenHashHere';
$_ENV['PLUME_PARTNER_ID'] = 'myPartnerIdHere';
$_ENV['PLUME_GROUP_ID']   = 'myGroupIdHere';
$_ENV['PLUME_API_URL']    = 'https://url.to.apiserver.test';
$plume = new Ocolin\Plume\Plume();
```

### Instantiating With Constructor Arguments

[](#instantiating-with-constructor-arguments)

If you don't use environment variables, you can specify your credentials in the constructor through the use of a Config class.

#### Example:

[](#example-1)

```
$config = new Ocolin\Plume\Config(
       api_url: 'https://url.to.authserver.test',
      auth_url: 'https://url.to.apiserver.test',
     auth_hash: 'MyAuthenticationTokenHashHere',
    partner_id: 'myPartnerIdHere',
      group_id: 'myGroupIdHere'
);

$plume = new Ocolin\Plume\Plume( config: $config );
```

### Additional configuration.

[](#additional-configuration)

In addition to the Config class, there are a few other options for configuration.

- $options - Guzzle HTTP options. Good place to set timeouts, disable SSL verification, etc.
- $throwOnError - This sets Plume to throw an error when recieving an error status from the Plume cloud. This is off by default.

#### Example

[](#example-2)

```
$plume = new Ocolin\Plume\Plume(
    options: [ 'timeout' => 30, 'verify' => false ]
    throwOnError: true
);
```

---

Response
--------

[](#response)

All methods return an `Ocolin\Plume\Response` object with the following properties:

PropertyTypeDescriptionstatusintHTTP status codestatus\_messagestringHTTP status messageheadersarrayHTTP response headersbodymixedDecoded JSON response body### Example

[](#example-3)

```
$plume    = new Ocolin\Plume\Plume();
$response = $plume->get(
    endpoint: '/customers/{id}',
       query: [ 'id' => 'theClientsId' ]
);

echo $response->status;          // 200
echo $response->status_message;  // OK
echo $response->body->name;      // Customer name
```

---

Interpolation Concepts
----------------------

[](#interpolation-concepts)

Some variables in the Plume client can be automatically replaced. Here are some examples.

### Endpoint variables

[](#endpoint-variables)

Many of the plume endpoints have variables in them, such as `/customer/{id}`. These can be replaced automatically by any values in the query argument where the element key matches the variable in the endpoint.

Additionally, and groupId or partnerId variables in an endpoint will be automatically replaced with your config settings unless you opt to set them yourself. This saved you from having to populate those settings on endpoints that use them.

### HTTP Body variables

[](#http-body-variables)

Inside your body data, the groupId and partnerID values can be auto populated if you include them as blank properties in your body.

```
Example:
$body = [ 'groupId' => '', 'partnerId' => '' ];
```

---

Usage
-----

[](#usage)

The Plume client comes with a function for each HTTP request method as well as a request function that let's you specify an HTTP method.

Argument descriptions:

nameDescriptiontypedefaultendpointThe API endpoint found in Plume API Explorer.stringNonemethodHTTP method to use.stringGETqueryHTTP query parameters and path parametersarray|object\[\]bodyHTTP body. JSON or www-formarray|object\[\]formDataUse www-form instead of JSON. Needed by some endpointsbooleanfalse### GET

[](#get)

```
$plume  = new Ocolin\Plume\Plume();
$plume->get(
    endpoint: '/customers/{id}',
      query: [ 'id' => 'theClientsId' ]
);
```

### POST

[](#post)

```
$plume  = new Ocolin\Plume\Plume();
$plume->post(
    endpoint: '/customers/',
        body: [
        'name' => 'My Name',
        'accountId' => 'Account Id'
    ]
);
```

### PUT

[](#put)

```
$plume  = new Ocolin\Plume\Plume();
$plume->put(
    endpoint: '/customers/{id}',
       query: [ 'id' => 'myCustomerId' ],
        body: [
             'name' => 'My Name',
        'accountId' => 'Account Id'
    ]
);
```

### PATCH

[](#patch)

```
$plume  = new Ocolin\Plume\Plume();
$plume->patch(
    endpoint: '/customers/{id}',
       query: [ 'id' => 'myCustomerId' ],
        body: [
             'name' => 'My Name',
        'accountId' => 'Account Id'
    ]
);
```

### DELETE

[](#delete)

```
$plume  = new Ocolin\Plume\Plume();
$plume->delete(
    endpoint: '/Customers/{id}',
       query: [ 'id' => 'theClientsId' ]
);
```

### HEAD

[](#head)

```
$plume  = new Ocolin\Plume\Plume();
$plume->head(
    endpoint: '/Customers/{id}/Locations/{locationId}',
       query: [
            'id'         => 'theClientsId',
            'locationId' => 'theLocationId'
        ]
);
```

### REQUEST

[](#request)

General all-purpose API request function.

```
$plume  = new Ocolin\Plume\Plume();
$plume->request(
    endpoint: '/customers/{id}',
      method: 'PATCH',
       query: [ 'id' => 'theClientsId' ],
        body: [
             'name' => 'My Name',
        'accountId' => 'Account Id'
        ],
    formData: true
);
```

TODO
----

[](#todo)

- Some more rigorous unit testing and integration testing can be done.

###  Health Score

44

—

FairBetter than 92% of packages

Maintenance90

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity60

Established project with proven stability

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

Recently: every ~66 days

Total

7

Last Release

50d ago

Major Versions

1.1 → 2.02025-07-08

2.2 → v3.0.02026-03-27

PHP version history (2 changes)v3.0.0PHP ^8.2

v3.0.1PHP ^8.3

### Community

Maintainers

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

---

Top Contributors

[![ocolin](https://avatars.githubusercontent.com/u/8870196?v=4)](https://github.com/ocolin "ocolin (2 commits)")

---

Tags

restcspapi clientispplumewifiplume-designhomepassworkpassopensync

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/ocolin-plume/health.svg)

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

###  Alternatives

[shopify/shopify-api

Shopify API Library for PHP

4634.8M16](/packages/shopify-shopify-api)[omniphx/forrest

A Laravel library for Salesforce

2724.4M8](/packages/omniphx-forrest)[xeroapi/xero-php-oauth2

Xero official PHP SDK for oAuth2 generated with OpenAPI spec 3

1054.3M14](/packages/xeroapi-xero-php-oauth2)[linkedinapi/linkedin

PHP LinkedIn SDK

96357.1k4](/packages/linkedinapi-linkedin)[huaweicloud/huaweicloud-sdk-php

Huawei Cloud SDK for PHP

1829.2k2](/packages/huaweicloud-huaweicloud-sdk-php)[onesignal/onesignal-php-api

A powerful way to send personalized messages at scale and build effective customer engagement strategies. Learn more at onesignal.com

34170.2k2](/packages/onesignal-onesignal-php-api)

PHPackages © 2026

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