PHPackages                             arcasolutions/unsplash - 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. arcasolutions/unsplash

ActiveLibrary[API Development](/categories/api)

arcasolutions/unsplash
======================

Wrapper to access the Unsplash API and photo library by Arca Solutions

2.4.4(7y ago)011[1 PRs](https://github.com/ArcaSolutions/unsplash-php/pulls)MITPHPPHP &gt;=5.6.0

Since Jul 31Pushed 6y ago1 watchersCompare

[ Source](https://github.com/ArcaSolutions/unsplash-php)[ Packagist](https://packagist.org/packages/arcasolutions/unsplash)[ RSS](/packages/arcasolutions-unsplash/feed)WikiDiscussions master Synced 4w ago

READMEChangelog (1)Dependencies (9)Versions (26)Used By (0)

PHP Unsplash Wrapper
====================

[](#php-unsplash-wrapper)

[![Build Status](https://camo.githubusercontent.com/8e95d80aa86bc7c74e28ec2c25ab166c8e9ed4dffa20644c3bc31a08dcada6c1/68747470733a2f2f7472617669732d63692e6f72672f756e73706c6173682f756e73706c6173682d7068702e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/unsplash/unsplash-php)

A PHP client for the [Unsplash API](https://unsplash.com/documentation).

- [Official documentation](https://unsplash.com/documentation)
- [Changelog](https://github.com/unsplash/unsplash-pHP/blob/master/CHANGELOG.md)

Quick links to methods you're likely to care about:

- [Get a list of new photos](#photo-all) 🎉
- [Get a random photo](#photo-random) 🎑
- [Trigger a photo download](#photo-download) 📡
- [Search for a photo by keyword](#search-photos) 🕵️‍♂️

**Note:** Every application must abide by the [API Guidelines](https://medium.com/unsplash/unsplash-api-guidelines-28e0216e6daa). Specifically, remember to [hotlink images](https://medium.com/unsplash/unsplash-api-guidelines-hotlinking-images-6c6b51030d2a) and [trigger a download when appropriate](https://medium.com/unsplash/unsplash-api-guidelines-triggering-a-download-c39b24e99e02).

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

[](#installation)

`unsplash-php` uses [Composer](https://getcomposer.org/). To use it, require the library

```
composer require arcasolutions/unsplash

```

Usage
-----

[](#usage)

### Configuration

[](#configuration)

Before using, configure the client with your application ID and secret. If you don't have an application ID and secret, follow the steps from the [Unsplash API](https://unsplash.com/documentation#creating-a-developer-account) to register your application.

Note that if you're just using actions that require the [public permission scope](#permission-scopes), only the `applicationId` is required.

Note that if utmSource is omitted from $credentials a notice will be raised

```
Crew\Unsplash\HttpClient::init([
	'applicationId'	=> 'YOUR APPLICATION ID',
	'secret'		=> 'YOUR APPLICATION SECRET',
	'callbackUrl'	=> 'https://your-application.com/oauth/callback',
	'utmSource' => 'NAME OF YOUR APPLICATION'
]);
```

### Authorization workflow

[](#authorization-workflow)

To access actions that are non-public (i.e. uploading a photo to a specific account), you'll need a user's permission to access their data.

An example of this flow can be found in /examples/oauth-flow.php

Direct them to an authorization URL (configuring any scopes before generating the authorization URL):

```
$scopes = ['public', 'write_user'];
Crew\Unsplash\HttpClient::$connection->getConnectionUrl($scopes);
```

Upon authorization, Unsplash will return to you an authentication code via your OAuth callback handler. Use it to generate an access token:

```
Crew\Unsplash\HttpClient::$connection->generateToken($code);
```

With the token you can now access any additional non-public actions available for the authorized user.

#### Permission Scopes

[](#permission-scopes)

The current permission scopes defined by the [Unsplash API](https://unsplash.com/documentation#authorization) are:

- `public` (Access a user's public data)
- `read_user` (Access a user's private data)
- `write_user` (Edit and create user data)
- `read_photos` (Access private information from a user's photos)
- `write_photos` (Post and edit photos for a user)
- `write_likes` (Like a photo for a user)

---

### API methods

[](#api-methods)

For more information about the the responses for each call, refer to the [official documentation](https://unsplash.com/documentation).

Some parameters are identical across all methods:

paramDescription`$filters`Filters used by the API`$returnArrayObject`Defines if method should return ArrayObject. *Default true**Note: The methods that return multiple objects return an `ArrayObject`, which acts like a normal stdClass.*

*If `$returnArrayObject` is set to `false` they return `PageResult` which contains array of results, total number of elements, page and total number of pages.*

*There are three exceptions: `Search::collections`, `Search::photos` and `Search::users` always returns `PageResult`.*

---

### Search

[](#search)

#### Crew\\Unsplash\\Search::photos($filters)

[](#crewunsplashsearchphotosfilters)

Retrieve a single page of photo results depending on search results.

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired**Example**

```
$filters  = [
    'query' => 'Some query',
    'page' => 3,
    'per_page' => 15,
    'orientation' => 'landscape'
];

Crew\Unsplash\Search::photos($filters);
```

---

#### Crew\\Unsplash\\Search::collections($filters)

[](#crewunsplashsearchcollectionsfilters)

Retrieve a single page of collection results depending on search results.

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired**Example**

```
$filters  = [
    'query' => 'Some query',
    'page' => 3,
    'per_page' => 15,
];

Crew\Unsplash\Search::collections($filters);
```

---

#### Crew\\Unsplash\\Search::users($search, $page, $per\_page)

[](#crewunsplashsearchuserssearch-page-per_page)

Retrieve a single page of user results depending on search results.

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired**Example**

```
$filters  = [
    'query' => 'Some query',
    'page' => 3,
    'per_page' => 15,
];

Crew\Unsplash\Search::users($filters);
```

---

### Curated Collection

[](#curated-collection)

#### Crew\\Unsplash\\CuratedCollection::all($filters, $returnArrayObject)

[](#crewunsplashcuratedcollectionallfilters-returnarrayobject)

Retrieve the list of curated collections.

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired`$returnArrayObject`boolOpt *(Default: true)***Example**

```
$filters  = [
    'page' => 3,
    'per_page' => 15,
];

Crew\Unsplash\CuratedCollection::all($page, $per_page);
```

**Example for returning PageResult instead of ArrayObject**

```
Crew\Unsplash\CuratedCollection::all($page, $per_page, false);
```

---

#### Crew\\Unsplash\\CuratedCollection::find($id)

[](#crewunsplashcuratedcollectionfindid)

Retrieve a specific curated collection.

**Arguments**

ArgumentTypeOpt/Required`$id`intRequired**Example**

```
Crew\Unsplash\CuratedCollection::find(integer $id);
```

---

#### Crew\\Unsplash\\CuratedCollection::photos($returnArrayObject)

[](#crewunsplashcuratedcollectionphotosreturnarrayobject)

Retrieve photos from a curated collection.

*Note:* You need to instantiate a curated collection object first.

**Arguments**

ArgumentTypeOpt/Required`$returnArrayObject`boolOpt *(Default: true)***Example**

```
$collection = Crew\Unsplash\CuratedCollection::find(integer $id);
$photos = $collection->photos();
```

**Example for returning PageResult instead of ArrayObject**

```
$collection = Crew\Unsplash\CuratedCollection::find(integer $id);
$photos = $collection->photos(false);
```

---

### Collection

[](#collection)

#### Crew\\Unsplash\\Collection::all($filters, $returnArrayObject)

[](#crewunsplashcollectionallfilters-returnarrayobject)

Retrieve the list of collections.

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired`$returnArrayObject`boolOpt *(Default: true)***Example**

```
$filters  = [
    'page' => 3,
    'per_page' => 15,
];

Crew\Unsplash\Collection::all($filters);
```

**Example for returning PageResult instead of ArrayObject**

```
Crew\Unsplash\Collection::all($filters, false);
```

---

#### Crew\\Unsplash\\Collection::featured($filters, $returnArrayObject)

[](#crewunsplashcollectionfeaturedfilters-returnarrayobject)

Retrieve list of featured collections.

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired`$returnArrayObject`boolOpt *(Default: true)***Example**

```
$filters  = [
    'page' => 3,
    'per_page' => 15,
];

Crew\Unsplash\Collection::featured($filters);
```

**Example for returning PageResult instead of ArrayObject**

```
Crew\Unsplash\Collection::featured($filters, false);
```

---

#### Crew\\Unsplash\\Collection::related($returnArrayObject)

[](#crewunsplashcollectionrelatedreturnarrayobject)

Retrieve list of featured collections.

*Note* You must instantiate a collection first

**Arguments**

ArgumentTypeOpt/Required`$returnArrayObject`boolOpt *(Default: true)***Example**

```
$collection = Crew\Unsplash\Collection::find($id);
$collection->related();
```

**Example for returning PageResult instead of ArrayObject**

```
$collection = Crew\Unsplash\Collection::find($id);
$collection->related(false);
```

---

#### Crew\\Unsplash\\Collection::find($id)

[](#crewunsplashcollectionfindid)

Retrieve a specific collection.

**Arguments**

ArgumentTypeOpt/Required`$id`intRequired**Example**

```
Crew\Unsplash\Collection::find(integer $id);
```

---

#### Crew\\Unsplash\\Collection::photos($filters, $returnArrayObject)

[](#crewunsplashcollectionphotosfilters-returnarrayobject)

Retrieve photos from a collection.

*Note:* You need to instantiate a collection object first.

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired`$returnArrayObject`boolOpt *(Default: true)***Example**

```
$filters  = [
    'page' => 3,
    'per_page' => 15,
];

$collection = Crew\Unsplash\Collection::find(integer $id);
$photos = $collection->photos($filters);
```

**Example for returning PageResult instead of ArrayObject**

```
$filters  = [
    'page' => 3,
    'per_page' => 15,
];

$collection = Crew\Unsplash\Collection::find(integer $id);
$photos = $collection->photos($filters, false);
```

---

#### Crew\\Unsplash\\Collection::create($title, $description, $private)

[](#crewunsplashcollectioncreatetitle-description-private)

Create a collection on the user's behalf.

*Note:* You need the `write_collections` permission scope

**Arguments**

ArgumentTypeOpt/Required`$title`stringRequired`$description`stringOpt *(Default: '')*`$private`booleanOpt *(Default: false)***Example**

```
$collection = Crew\Unsplash\Collection::create($title);
```

---

#### Crew\\Unsplash\\Collection::update($parameters)

[](#crewunsplashcollectionupdateparameters)

Update a collection on the user's behalf.

*Note:* You need to instantiate a collection object first

*Note:* You need the `write_collections` permission scope

**Arguments**

ArgumentTypeOpt/RequiredNote`$parameters`arrayRequiredThe following keys can be set in the array : `title`, `description`, `private`**Example**

```
$collection = Crew\Unsplash\Collection::find(int $id);
$collection->update(['private' => true])
```

---

#### Crew\\Unsplash\\Collection::destroy()

[](#crewunsplashcollectiondestroy)

Delete a collection on the user's behalf.

*Note:* You need to instantiate a collection object first

*Note:* You need the `write_collections` permission scope

**Example**

```
$collection = Crew\Unsplash\Collection::find(int $id);
$collection->destroy()
```

---

#### Crew\\Unsplash\\Collection::add($photo\_id)

[](#crewunsplashcollectionaddphoto_id)

Add a photo in the collection on the user's behalf.

*Note:* You need to instantiate a collection object first

*Note:* You need the `write_collections` permission scope

**Arguments**

ArgumentTypeOpt/Required`$photo_id`integerRequired**Example**

```
$collection = Crew\Unsplash\Collection::find(int $id);
$collection->add(int $photo_id)
```

---

#### Crew\\Unsplash\\Collection::remove($photo\_id)

[](#crewunsplashcollectionremovephoto_id)

Remove a photo from the collection on the user's behalf.

*Note:* You need to instantiate a collection object first

*Note:* You need the `write_collections` permission scope

**Arguments**

ArgumentTypeOpt/Required`$photo_id`integerRequired**Example**

```
$collection = Crew\Unsplash\Collection::find(int $id);
$collection->remove(int $photo_id)
```

---

### Photo

[](#photo)

#### Crew\\Unsplash\\Photo::all($filters, $returnArrayObject)

[](#crewunsplashphotoallfilters-returnarrayobject)

Retrieve a list of photos.

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired`$returnArrayObject`boolOpt *(Default: true)***Example**

```
$filters  = [
    'page' => 3,
    'per_page' => 15,
    'order_by' => 'latest',
];

Crew\Unsplash\Photo::all($filters);
```

**Example for returning PageResult instead of ArrayObject**

```
$filters  = [
    'page' => 3,
    'per_page' => 15,
    'order_by' => 'latest',
];

Crew\Unsplash\Photo::all($filters, false);
```

---

#### Crew\\Unsplash\\Photo::curated($filters, $returnArrayObject)

[](#crewunsplashphotocuratedfilters-returnarrayobject)

Retrieve a list of curated photos.

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired`$returnArrayObject`boolOpt *(Default: true)***Example**

```
$filters  = [
    'page' => 3,
    'per_page' => 15,
    'order_by' => 'latest',
];

Crew\Unsplash\Photo::curated($page, $per_page, $order_by);
```

**Example for returning PageResult instead of ArrayObject**

```
$filters  = [
    'page' => 3,
    'per_page' => 15,
    'order_by' => 'latest',
];

Crew\Unsplash\Photo::curated($page, $per_page, $order_by, false);
```

---

#### Crew\\Unsplash\\Photo::find($id)

[](#crewunsplashphotofindid)

Retrieve a specific photo.

**Arguments**

ArgumentTypeOpt/Required`$id`intRequired**Example**

```
Crew\Unsplash\Photo::find($id);
```

---

#### Crew\\Unsplash\\Photo::create($file\_path)

[](#crewunsplashphotocreatefile_path)

Post a photo on the user's behalf.

*Note:* You need the `write_photos` permission scope

**Arguments**

ArgumentTypeOpt/Required`$file_path`stringRequired**Example**

```
Crew\Unsplash\Photo::create( $file_path);
```

---

#### Crew\\Unsplash\\Photo::update($parameters = \[\])

[](#crewunsplashphotoupdateparameters--)

Post a photo on the user's behalf.

*Note:* You need the `write_photos` permission scope You need to instantiate the Photo object first

**Arguments**

ArgumentTypeOpt/Required`$parameters`arrayRequired**Example**

```
$photo = Crew\Unsplash\Photo::find(string $id)
$photo->update(array $parameters);
```

---

#### Crew\\Unsplash\\Photo::photographer()

[](#crewunsplashphotophotographer)

Retrieve the photo's photographer.

*Note:* You need to instantiate a photo object first

**Arguments**

*N/A*

**Example**

```
$photo = Crew\Unsplash\Photo::find(string $id);
$photo->photographer();
```

---

#### Crew\\Unsplash\\Photo::random($filters)

[](#crewunsplashphotorandomfilters)

Retrieve a random photo from specified filters. For more information regarding filtering, [refer to the Offical documentation](https://unsplash.com/documentation#get-a-random-photo).

*Note:* An array needs to be passed as a parameter.

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired**Example**

```
// Or apply some optional filters by passing a key value array of filters
$filters = [
    'featured' => true,
    'username' => 'andy_brunner',
    'query'    => 'coffee',
];

Crew\Unsplash\Photo::random($filters);
```

---

#### Crew\\Unsplash\\Photo::like()

[](#crewunsplashphotolike)

Like a photo on the user's behalf.

*Note:* You need to instantiate a photo object first

*Note:* You need the `like_photos` permission scope

**Arguments**

*N/A*

**Example**

```
$photo = Crew\Unsplash\Photo::find(string $id);
$photo->like();
```

---

#### Crew\\Unsplash\\Photo::unlike()

[](#crewunsplashphotounlike)

Unlike a photo on the user's behalf.

*Note:* You need to instantiate a photo object first

*Note:* You need the `like_photos` permission scope

**Arguments**

*N/A*

**Example**

```
$photo = Crew\Unsplash\Photo::find(string $id);
$photo->unlike();
```

---

#### Crew\\Unsplash\\Photo::statistics(string $resolution, int $quantity)

[](#crewunsplashphotostatisticsstring-resolution-int-quantity)

Retrieve total number of downloads, views and likes of a single photo, as well as the historical breakdown of these stats in a specific timeframe (default is 30 days).

*Note:* You must instantiate a Photo object first

**Arguments**

ArgumentTypeOpt/RequiredresolutionstringOpt *(Accepts only days currently)*quantityintOpt *(Defaults to 30, can be between 1 and 30)***Example**

```
$photo = Crew\Unsplash\Photo::find($id);
$photo->statistics('days', 7);
```

---

#### Crew\\Unsplash\\Photo::download()

[](#crewunsplashphotodownload)

Trigger a download for a photo. This is needed to follow the ['trigger a download' API Guideline](https://medium.com/unsplash/unsplash-api-guidelines-triggering-a-download-c39b24e99e02).

*Note:* You must instantiate a Photo object first

**Arguments**

ArgumentTypeOpt/Required**Example**

```
$photo = Crew\Unsplash\Photo::find();
$photo->download();
```

---

### User

[](#user)

#### Crew\\Unsplash\\User::find($username)

[](#crewunsplashuserfindusername)

Retrieve a user's information.

**Arguments**

ArgumentTypeOpt/Required`$username`stringRequired**Example**

```
Crew\Unsplash\User::find($username)
```

---

#### Crew\\Unsplash\\User::portfolio($username)

[](#crewunsplashuserportfoliousername)

Retrieve a link to the user's portfolio page.

**Arguments**

ArgumentTypeOpt/Required`$username`stringRequired**Example**

```
Crew\Unsplash\User::portfolio($username)
```

---

#### Crew\\Unsplash\\User::current()

[](#crewunsplashusercurrent)

Retrieve the user's private information.

*Note:* You need the *read\_user* permission scope

**Arguments**

*N/A*

**Example**

```
$user = Crew\Unsplash\User::current();
```

---

#### Crew\\Unsplash\\User::photos($filters)

[](#crewunsplashuserphotosfilters)

Retrieve user's photos.

*Note:* You need to instantiate a user object first

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired**Example**

```
$filters  = [
    'page' => 3,
    'per_page' => 15,
    'order_by' => 'latest',
];

$user = Crew\Unsplash\User::find($username);
$user->photos($filters);
```

---

#### Crew\\Unsplash\\User::collections($filters)

[](#crewunsplashusercollectionsfilters)

Retrieve user's collections.

*Note:* You need to instantiate a user object first *Note:* You need the *read\_collections* permission scope to retrieve user's private collections

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired**Example**

```
$filters  = [
    'page' => 3,
    'per_page' => 15,
    'order_by' => 'latest',
];

$user = Crew\Unsplash\User::find($username);
$user->collections($filters);
```

---

#### Crew\\Unsplash\\User::likes($filters)

[](#crewunsplashuserlikesfilters)

Retrieve user's collections.

*Note:* You need to instantiate a user object first

**Arguments**

ArgumentTypeOpt/Required`$filters`arrayRequired**Example**

```
$user = Crew\Unsplash\User::find($username);
$user->likes($page, $per_page, $order_by);
```

---

#### Crew\\Unsplash\\User::update(\[$key =&gt; value\])

[](#crewunsplashuserupdatekey--value)

Update current user's fields. Multiple fields can be passed in the array.

*Note:* You need to instantiate a user object first

*Note:* You need the *write\_user* permission scope.

**Arguments**

ArgumentTypeOpt/RequiredNote`$key`stringRequiredThe following keys are accepted: `username`, `first_name`, `last_name`, `email`, `url`, `location`, `bio`, `instagram_username``$value`mixedrequired```
$user = Crew\Unsplash\User::current();
$user->update(['first_name' => 'Elliot', 'last_name' => 'Alderson']);
```

#### Crew\\Unsplash\\User::statistics(string $resolution, int $quantity)

[](#crewunsplashuserstatisticsstring-resolution-int-quantity)

Retrieve total number of downloads, views and likes for a user, as well as the historical breakdown of these stats in a specific timeframe (default is 30 days).

*Note:* You must instantiate the User object first

**Arguments**

ArgumentTypeOpt/RequiredresolutionstringOpt *(Accepts only days currently)*quantityintOpt *(Defaults to 30, can be between 1 and 30)***Example**

```
$user = Crew\Unsplash\User::find($id);
$user->statistics('days', 7);
```

---

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

[](#contributing)

Bug reports and pull requests are welcome on GitHub at . This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org/) code of conduct.

###  Health Score

29

—

LowBetter than 57% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity68

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

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

Recently: every ~100 days

Total

23

Last Release

2766d ago

Major Versions

1.2.0 → 2.0.02016-04-14

PHP version history (2 changes)1.0.0PHP &gt;=5.5.0

2.3.2PHP &gt;=5.6.0

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/19326642?v=4)[Arca Solutions](/maintainers/arcasolutions)[@ArcaSolutions](https://github.com/ArcaSolutions)

---

Top Contributors

[![HughbertD](https://avatars.githubusercontent.com/u/1580021?v=4)](https://github.com/HughbertD "HughbertD (41 commits)")[![lukechesser](https://avatars.githubusercontent.com/u/808452?v=4)](https://github.com/lukechesser "lukechesser (31 commits)")[![dechuck](https://avatars.githubusercontent.com/u/1096674?v=4)](https://github.com/dechuck "dechuck (26 commits)")[![aaronklaassen](https://avatars.githubusercontent.com/u/1580121?v=4)](https://github.com/aaronklaassen "aaronklaassen (22 commits)")[![zembrowski](https://avatars.githubusercontent.com/u/2451083?v=4)](https://github.com/zembrowski "zembrowski (3 commits)")[![dannyweeks](https://avatars.githubusercontent.com/u/4365775?v=4)](https://github.com/dannyweeks "dannyweeks (3 commits)")[![freezysko](https://avatars.githubusercontent.com/u/661637?v=4)](https://github.com/freezysko "freezysko (3 commits)")[![janhenckens](https://avatars.githubusercontent.com/u/755428?v=4)](https://github.com/janhenckens "janhenckens (3 commits)")[![AMS777](https://avatars.githubusercontent.com/u/32177639?v=4)](https://github.com/AMS777 "AMS777 (2 commits)")[![Anzoel](https://avatars.githubusercontent.com/u/7801512?v=4)](https://github.com/Anzoel "Anzoel (2 commits)")[![pvessel](https://avatars.githubusercontent.com/u/4034876?v=4)](https://github.com/pvessel "pvessel (1 commits)")[![seojtix](https://avatars.githubusercontent.com/u/154022?v=4)](https://github.com/seojtix "seojtix (1 commits)")[![BenMorel](https://avatars.githubusercontent.com/u/1952838?v=4)](https://github.com/BenMorel "BenMorel (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/arcasolutions-unsplash/health.svg)

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

###  Alternatives

[tempest/framework

The PHP framework that gets out of your way.

2.3k37.6k20](/packages/tempest-framework)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

762297.9k52](/packages/civicrm-civicrm-core)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3661.3M49](/packages/tencentcloud-tencentcloud-sdk-php)[eslazarev/wildberries-sdk

Wildberries OpenAPI clients (generated).

353.6k](/packages/eslazarev-wildberries-sdk)[xeroapi/xero-php-oauth2

Xero official PHP SDK for oAuth2 generated with OpenAPI spec 3

1074.9M20](/packages/xeroapi-xero-php-oauth2)[files.com/files-php-sdk

Files.com PHP SDK

2482.9k](/packages/filescom-files-php-sdk)

PHPackages © 2026

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