PHPackages                             stackla/stackla-php-sdk - 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. stackla/stackla-php-sdk

AbandonedArchivedLibrary

stackla/stackla-php-sdk
=======================

Stackla SDK API

v1.2.0(9y ago)05943PHPPHP &gt;=5.4

Since Jun 30Pushed 5y ago23 watchersCompare

[ Source](https://github.com/Stackla/stackla-php-sdk)[ Packagist](https://packagist.org/packages/stackla/stackla-php-sdk)[ RSS](/packages/stackla-stackla-php-sdk/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (6)Versions (14)Used By (0)

Stackla PHP SDK
===============

[](#stackla-php-sdk)

[![Build Status](https://camo.githubusercontent.com/ccde186169999011042a35fad82182e279c294b7d3226871c6e4c10ab0e8bd0d/68747470733a2f2f7472617669732d63692e6f72672f537461636b6c612f737461636b6c612d7068702d73646b2e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/Stackla/stackla-php-sdk)

*Copyright © 2012 to present. Stackla, Inc., Stackla Pty Ltd., and Stackla Ltd. All rights reserved.*
=====================================================================================================

[](#copyright--2012-to-present-stackla-inc-stackla-pty-ltd-and-stackla-ltd-all-rights-reserved)

Welcome to the Stackla PHP SDK GitHub repository!

This SDK is intended for PHP developers to enable them to integrate Stackla RESTful APIs into their applications with greater ease. You can find more information on working with Stackla APIs on the [Stackla Developer Portal](http://developer.stackla.com/).

We are continuously working on improving both the SDK and the documentation around it, so please feel free to give us feedback and any reports of issues to .

System requirements
-------------------

[](#system-requirements)

- PHP &gt;= 5.4
- [Composer](https://getcomposer.org/)

PHPUnit
-------

[](#phpunit)

Required `env` variable:

- ACCESS\_TOKEN
- API\_STACK =&gt; Stackla stack short\_name
- API\_HOST =&gt; `https://api.stackla.com/api/`
- DEFAULT\_FILTER\_ID
- DEFAULT TAG\_ID
- STACKLA\_POST\_TERM\_ID

```
$ php ./vendor/bin/phpunit ---configuration phpunit.xml.dist

```

Great. How do I get this thing going?
-------------------------------------

[](#great-how-do-i-get-this-thing-going)

#### Dependencies

[](#dependencies)

Include this package in your composer.json:

```
#!json
{
    "require": {
        "stackla/stackla-php-sdk": "1.0.0"
    }
}

```

And then:

```
#!bs
$ php composer.phar install

```

### Instantiating a Stack

[](#instantiating-a-stack)

There are 2 ways to connect to Stackla: *OAuth2* or the previous *api\_key* method The *api\_key* method is being deprecated over time in favour of the *OAuth2* method.

#### OAuth2 (access\_token)

[](#oauth2-access_token)

This is the preferred method and is being rolled out to all customers at present.

```
#!php

// Stackla stack name
$stack = "foo";

// Stackla Credentials details
$host = "https://api.stackla.com/api/";
$accessToken = "1234567890"; // OAuth2 access_token
$credentials = new \Stackla\Core\Credentials($host, $accessToken, $stack);

// Stackla API configs
$stack = new \Stackla\Api\Stack($credentials, $host, $stack);

```

##### Generate OAuth2 access token

[](#generate-oauth2-access-token)

If you are developing a custom application that will have a client ID, users will need to authenticate and authorise the use their account in order for you to obtain a token. If you are not developing a custom app, may not need to perform this part.

To generate the token, you can generate the OAuth2 callback endpoint for your application as per the following.

###### link.php

[](#linkphp)

```

$stack = "foo";
$host  = "https://api.stackla.com/api/";
$client_id = '1234567890';
$client_secret = '0987654321';
$callback = 'https://test.com/callback.php';

$credentials = new Stackla\Core\Credentials($host, null, $stack);
$access_uri = $credentials->getAccessUri($client_id, $client_secret, $callback);

printf('Generate Access Token', $access_uri);

```

###### callback.php

[](#callbackphp)

```

$stack = "foo";
$host  = "https://api.stackla.com/api/";
$client_id = '1234567890';
$client_secret = '0987654321';
$callback = 'https://test.com/callback.php';

$access_code = $_GET['code'];

$credentials = new Stackla\Core\Credentials($host, null, $stack);
$response = $credentials->generateToken($client_id, $client_secret, $access_code, $callback);

if ($response === false) {
    echo "Failed to create the access token.\n";
} else {
    echo "Your access token is '{$credentials->token}'\n";
}

```

[More details](tests/callback)

#### API Key (api\_key)

[](#api-key-api_key)

*This method is being deprecated. Please contact your customer representative if you are using or intend to use this method.*

```
#!php

// Stackla stack name
$stack = "foo";

// Stackla Credentials details
$host = "https://api.stackla.com/api/";
$apiKey = "1234567890"; // Stackla api key
$credentials = new \Stackla\Core\Credentials($host, $apiKey, $stack, \Stackla\Core\Credentials::TYPE_APIKEY);

// Stackla API configs
$stack = new \Stackla\Api\Stack($credentials, $host, $stack);

```

Object Reference
----------------

[](#object-reference)

### Term

[](#term)

##### Properties

[](#properties)

PropertytypevaluePostPutDefinitionid`integer`✘✘unique id for termname`string`✔✔Name this new termdisplay\_name`string`✔✔stringactive`bool`✔✔Flag - 1 or 0type\*\*`enum``Term::TYPE_PAGE`
 `Term::TYPE_HASHTAG`
 `Term::TYPE_USER`
 `Term::TYPE_SEARCH`
 `Term::TYPE_LOCATION`
 `Term::TYPE_GALLERY`
 `Term::TYPE_SET`
 `Term::TYPE_BOARD`
 `Term::TYPE_BLOG`
 `Term::TYPE_RSS`
 `Term::TYPE_ATOM`
 `Term::TYPE_DEFAULT`
 `Term::TYPE_POST`
 `Term::TYPE_WEIBO_SHOW`
 `Term::TYPE_WEIBO_PAGE`
 `Term::TYPE_WEIBO_TOPIC`✔✘network\*\*`enum``Stackla::NETWORK_TWITTER`
 `Stackla::NETWORK_FACEBOOK`
 `Stackla::NETWORK_INSTAGRAM`
 `Stackla::NETWORK_YOUTUBE`
 `Stackla::NETWORK_GPLUS`
 `Stackla::NETWORK_FLICKR`
 `Stackla::NETWORK_PINTEREST`
 `Stackla::NETWORK_TUMBLR`
 `Stackla::NETWORK_RSS`
 `Stackla::NETWORK_ECAL`
 `Stackla::NETWORK_STACKLA`
 `Stackla::NETWORK_WEIBO`✔✘term\*`string`✔✔keyword for the termfilter`string[]`✔✔Filter CSV listexclude\_filter`string[]`✔✔Exclude-filter CSV listfan\_filter`string[]`✔✔Fan-filter CSV listfan\_exclude\_filter`string[]`✔✔Fan-exclude-filter CSV listminimum\_fallowers`integer`✔✔Threshorld for minimum followers, available only for twitter - search and hashtag termsmoderate\_text`enum``Term::MODERATION_PUBLISH`
 `Term::MODERATION_QUEUE`
 `Term::MODERATION_DISABLE`
 `Term::MODERATION_EXCLUDE`✔✔value wil be eithermoderate\_image`enum`✔✔same as moderate\_text valuemoderate\_video`enum`✔✔same as moderate\_text valueretweet\_enable`bool`✔✔reply\_enable`bool`✔✔reply\_to\_enable`bool`✔✔partial\_match`bool`✔✔include\_fan\_content`bool`✔✔include\_hashtag\_in\_comments`bool`✔✔include\_official\_content`bool`✔✔search\_exact\_phrase`string`✔✔num\_of\_backfill`integer`✔✘whitelist\_handles`string[]`✔✔blacklist\_handles`string[]`✔✔avatar`string`✔✔source\_user\_id`string`✔✔tags`Tag[]`✔✔listing of tagcreated`StacklaDateTime`✘✘Term's creation timemodified`StacklaDateTime`✘✘Term's modification timelast\_ingestion\_post`StacklaDateTime`✘✘Term's last ingestion post time##### Methods

[](#methods)

Methodargumenttypedefaultreturncreate---self or falseupdate`$force``bool`falseself or falseget`$limit`
 `$page`
 `$options``integer`
 `integer`
 `array``25`
 `1`
 `[]`Term objects / self or falsegetById`$id``integer`-Term object / self or falsedelete---self or falseaddTag\*\*\*`$tag``Tag`-Term / it selfdeleteTag\*\*\*`$tag``Tag`-Term / it selfassociateTag\*\*\*\*`$tag``Tag`-Term / it selfdisassociateTag\*\*\*\*`$tag``Tag`-Term / it self#### Notes

[](#notes)

- When creating a new ***facebook*** term or ***twitter user*** term or ***instagram user*** term or ***pinterest user*** term or ***gplus user*** term or ***flickr user*** term, this method will validate the user first.
- After term creation, the `$network` and `$type` cannot be changed and if it passes, the term will be created. Alternatively, it will return an error when the the user validation has failed.
- These methods are only adding/deleting tag from the properties. You still need to call **update**.
- *Remember to call this method after the term is created*. These methods will send a request to RESTful API, there is **NO** need to call **update**.

##### Examples

[](#examples)

Create a new instance of term object:

```
// Create new instance of term object
$term = $stack->instance('term');

// Create new instance of term object with term id and pull from API
$term = $stack->instance('term', 1234);

// Create new instance of term object with term id in array format and pull from API
$term = $stack->instance('term', array('id' => 1234));

// Create new instance of term object with term id only (without pulling the data from API)
$term = $stack->instance('term', 1234, false);

```

Create a new term:

```
// Create new instance of term object
$term = $stack->instance('term');

// Populating term properties
$term->name = 'My awesome term';
$term->display_name = 'My awesome term';
$term->active = 1;
$term->num_of_backfill = 0;
$term->term = 'stacklalife';
$term->type = Term::TYPE_HASHTAG;
$term->filter = '';
$term->network = Stackla::NETWORK_TWITTER;

// Create the term
$term->create();

```

Get term:

```
// Create new instance of term object with term id and pull from API
$term = $stack->instance('term', 1234);

// Create a new instance of term
$term2 = $stack->instance('term');
// get specific term by id
$term2->getById(1234);

// Create a new instance of term
$term3 = $stack->instance('term');
// get 25 terms from RESTful API
$term3->get();

// Create new instance of term
$term4 = $stack->instance('term');
// get 5 terms from page 3
$term4->get(5, 3);

```

Looping through array of terms:

```
// Create new instance of term
$term = $stack->instance('term');
// get 25 terms from RESTful API
$term->get();

// Work with each term
foreach ($term as $iterm) {
    echo $iterm->id . " - " . $iterm->name . " - " . " - " . $iterm->network;
}

```

Update the term:

```
// Create a new instance of term object with term id and pull from API
$term = $stack->instance('term', 1234);

$term->name = "my awesome term name - edited";

// Update
$term->update();

// Create new instance of term object with term id but not pulling from server
$term = $stack->instance('term', 1234, false);

$term->name = "my awesome term name - edited";

// Force update with provided data
$term->update(true);

```

Add and delete tags:

```
// Create new instance of term object with term id and pull from API
$term = $stack->instance('term', 1234);

// Get existing tag without pulling data from API
$tag = $stack->instance('tag', 321, false);

// Add tag to term
$term->addTag($tag);
$term->update();

// Add tag to term
$term->associateTag($tag);

// Delete tag from term
$term->deleteTag($tag);
$term->update();

// Delete tag from term
$term->disassociateTag($tag);

```

Delete Term:

```
// Create new instance of term object with term id and pull from API
$term = $stack->instance('term', 1234);

// Delete term
$term->delete();

```

Catch errors:

```
$term = $stack->instance('term');
try {
    $term->update();
} catch (\Exception $e) {
    echo $e->getMessage();
}

```

---

### Filter

[](#filter)

##### Properties

[](#properties-1)

PropertytypevaluePostPutDefinitionid`integer`✘✘unique id for filtername`string`✔✔filter nameenable`enum``Filter::ENABLE_HIDDEN`
 `Filter::ENABLE_PANEL`
 `Filter::ENABLE_BAR`✔✔status to show filter in Social huborder`integer`✔✔order of filter in Social hubsort`enum``Filter::SORT_LATEST`
 `Filter::SORT_GREATEST`
 `Filter::SORT_MOST_VOTES`✔✔filter sorting typenetworks`enum[]``Stackla::NETWORK_TWITTER`
 `Stackla::NETWORK_FACEBOOK`
 `Stackla::NETWORK_INSTAGRAM`
 `Stackla::NETWORK_YOUTUBE`
 `Stackla::NETWORK_GPLUS`
 `Stackla::NETWORK_FLICKR`
 `Stackla::NETWORK_PINTEREST`
 `Stackla::NETWORK_TUMBLR`
 `Stackla::NETWORK_RSS`
 `Stackla::NETWORK_ECAL`
 `Stackla::NETWORK_STACKLA`
 `Stackla::NETWORK_WEIBO`✔✔filtering network(s)tags`Tag[]`✔✔filtering tag(s)media`enum[]``Filter::MEDIA_TEXT`
 `Filter::MEDIA_IMAGE`
 `Filter::MEDIA_VIDEO`
 `Filter::MEDIA_HTML`✔✔filtering media(s)##### Methods

[](#methods-1)

Methodargumenttypedefaultreturncreate\*---self or falseupdate`$force``bool``false`self or falseget`$limit`
 `$page`
 `$options``integer`
 `integer`
 `array``25`
 `1`
 `[]`getById`$id``integer`-Filter\[\] or falsegetContents`$force``boolean``false`false or Tile\[\]getContents`$limit`
 `$force``integer`
 `boolean``25`
 `false`false or Tile\[\]getContents`$limit`
 `$options`
 `$force``integer`
 `array`
 `boolean``25`
 `[]`
 `false`false or Tile\[\]getContents`$limit`
 `$page`
 `$force``integer`
 `integer`
 `boolean``25`
 `1`
 `false`false or Tile\[\]getContents`$limit`
 `$page`
 `$options`
 `$force``integer`
 `integer`
 `array`
 `boolean``25`
 `1`
 `[]`
 `false`false or Tile\[\]delete---self or false---

### Tile

[](#tile)

##### Properties

[](#properties-2)

PropertytypevaluePostPutDefinitionid`string`✘✘Unique identifier for the Tile, in the Stack. This is an object containing a "$id" property, which will expose the ID as a 24-byte stringsta\_feed\_id`string`✔✘Globally unique ID to be used for this post (often referencing external ID)guid`string`✔✘Globally unique ID to be used for this post (often referencing external ID)term\_id`integer`✔✘Associated term (optional)name`string`✔✘Display name to be used for the authoravatar`string`✔✘URL to be used as the post author's avatartitle`string`✔✘Tile title to accompany the message, often used for video tilesshare\_text`string`✔✘Accompanying text to be used when tile is shared on a Social network (e.g. Twitter, Instagram, Facebook, etc.)media`enum``Filter::MEDIA_TEXT`
 `Filter:MEDIA_IMAGE`
 `Filter::MEDIA_VIDEO`
 `Filter::MEDIA_HTML`✔✘The media type of the postvideo\_url`string`✔✘URL of the video file. Required when media type is "video")source\_user\_id`string`✔✘width\_ratio`string`✔✘Tile width ratio to be used as a ratio vs width\_ratio as width to height. Positive numeric value. Required when media type is "html"height\_ratio`string`✔✘Tile width ratio to be used as a ratio vs height\_ratio as width to height. Positive numeric value. Required when media type is "html"image`string`✔✘Full-sized image URLimage\_url`string`✔✘Full-sized image URLimage\_small\_url`string`✔✘Small image URL (ideally under to 300x300px, or 600x600px for retina)image\_medium\_url`string`✔✘Medium image URL (ideally under to 600x600px, or 1200x1200px for retina)image\_large\_url`string`✔✘Large image URLimage\_width`integer`✔✘image\_height`integer`✔✘image\_small\_width`integer`✔✘image\_small\_height`integer`✔✘image\_medium\_width`integer`✔✘image\_medium\_height`integer`✔✘image\_large\_width`integer`✔✘image\_large\_height`integer`✔✘message`string``Tile::STATUS_ENABLED`
 `Tile::STATUS_QUEUE`
 `Tile::STATUS_DISABLED`✔✔Message body, normalised from the content source. Will be the Tweet text, Facebook status, Instagram caption, etc. Maximum 32k charactersoriginal\_url`string`Source content urlhtml`string`✔✔HTML body, up to 32k characters. This field is mandatory for "html" media typetags`Tag[]`✔✔Array of Tag IDs associated with the Tile. Note: May be returned as array of Integers or Stringssource`string``Stackla::NETWORK_TWITTER`
 `Stackla::NETWORK_FACEBOOK`
 `Stackla::NETWORK_INSTAGRAM`
 `Stackla::NETWORK_YOUTUBE`
 `Stackla::NETWORK_GPLUS`
 `Stackla::NETWORK_FLICKR`
 `Stackla::NETWORK_PINTEREST`
 `Stackla::NETWORK_TUMBLR`
 `Stackla::NETWORK_RSS`
 `Stackla::NETWORK_ECAL`
 `Stackla::NETWORK_STACKLA`
 `Stackla::NETWORK_WEIBO`✘✘The source of the post, often a social network. This field is also referred to as "network" in the filter contextstatus`string`✔✔Tile moderation statuslongitude`string`✔✔GPS longitude co-ordinate for geo-locationlatitude`string`✔✔GPS latitude co-ordinate for geo-locationdisabled\_reason`string`✘✘The reason for disabling the tiledisabled`bool`✘✘Status either the tile is disabled or notclaimed`bool`✘✘Status either the tile is claimed or notanonymous`bool`✘✘Tiles that originate from networks that allow anonymous posts (including Stackla) will have this field set to true. Renderers should not show any attributions the creator of this Tilescore`integer`✘✘Accumulated score when the tile being votedcreated\_at`StacklaDateTime`✘✘Creation timeupdated\_at`StacklaDateTime`✘✘Updated timesource\_created\_at`StacklaDateTime`✘✘Original source creation time##### Methods

[](#methods-2)

Methodargumenttypedefaultreturncreate\*---self or falseupdate\*\*`$force``bool``false`self or falseget`$limit`
 `$page`
 `$options``integer`
 `integer`
 `array``25`
 `1`
 `[]`getById`$id``integer`-Tile / it self or falsegetByGuid`$guid``string`-Tile / it self or falsegetByStaFeedId`$sta_feed_id``string`-Tile / it self or falseaddTag\*\*\*`$tag``Tag`-Tile / it selfdeleteTag\*\*\*`$tag``Tag`-Tile / it self#### Notes

[](#notes-1)

- *create* method will only create sta\_feed network data.
- *update* method will only update `$status` and `$tag` fields for all network and for **sta\_feed** network the update method will able to update `$message`, `$html`, `$longitude`, `$latitude`.
- *addTag* and *deleteTag* will only add/delete tags from the properties, you still need to call *update*.

### Tag

[](#tag)

##### Properties

[](#properties-3)

PropertytypevaluePostPutDefinitionid`integer`✘✘Unique identifier for the Tagtag`string`✔✔Name and display title on the Tagslug`string`✔✔Simplified and class-name-fiendly Tag identifier, most often auto-generated. On output this value is often used to set the classcustom\_slug`bool`✔✔This value specifies if the slug field value is being auto-generated or overwritten by the user. Must be 1 for true or 0 for falsetype`enum``Tag:TYPE_CONTENT`
 `Tag::TYPE_PRODUCT`
 `Tag::TYPE_COMPETITION`✔✔Specifies the type of the Tagpublicly\_visible`enum``Tag::VISIBLE`
 `Tag::NOT_VISIBLE`✔✔This value specifies if display renderers should display this Tag in display contexttarget`enum``Tag::TARGET_BLANK`
 `Tag::TARGET_SELF`
 `Tag::TARGET_PARENT`
 `Tag::TARGET_TOP`✔✔When rendered as a link, this will indicate the target attribute for the anchor tag when used with custom\_urlsystem\_tag`bool`✘✘Indicates whether this Tag is a read-only tag created and managed by the system. Must be 1 for true or 0 for falsepriority`integer`✔✔Specifies the sequential sort order in which this Tag should be displayed when being rendered for display. Values range from 1 (highest) to 5 (lowest) with 3 being the defaultcustom\_url`string`✔✔URL that clicking on the Tag should take the user to. When type is product, this is the URL that the product click-through should be linked toprice`string`✔✔User provided price for Tags of type productext\_product\_id`string`✔✔User provided reference to external product for Tags of type product. Should be a continous string, best if URL-friendly. When querying for a product by ID, this value can be prefixed with ext: to fetch by itdescription`string`✔✔User provided description for Tags of type product. Maximum length: 512 charactersimage\_small\_url`string`✔✔URL of the small (optimised for 300px x 300px) image PNG/JPG/JPEG/GIF image to be displayed. This should be a HTTPS URL to so that the Stack or widget can be served over HTTPS completelyimage\_small\_width`integer`✔✔Width of the small image being used as the image\_small\_url, in pixelsimage\_small\_height`integer`✔✔Height of the small image being used as the image\_small\_url, in pixelsimage\_medium\_url`string`✔✔URL of the medium (optimised for 600px x 600px) image PNG/JPG/JPEG/GIF image to be displayed. This should be a HTTPS URL to so that the Stack or widget can be served over HTTPS completelyimage\_medium\_width`integer`✔✔Width of the small image being used as the image\_medium\_url, in pixelsimage\_medium\_height`integer`✔✔Height of the small image being used as the image\_medium\_url, in pixelscreated\_at`StacklaDateTime`✘✘UTC timestamp of when this Tag was created##### Methods

[](#methods-3)

Methodargumenttypedefaultreturncreate---self or falseupdate`$force``bool``false`self or falseget`$limit`
 `$page`
 `$options``integer`
 `integer`
 `array``25`
 `1`
 `[]`self or falsegetById`$id``integer`-self or falsegetByExtProductId`$id``string`-self or falsedelete---self or false---

### Widget

[](#widget)

##### Properties

[](#properties-4)

PropertytypevaluePostPutDefinitionid`integer`✘✘Unique identifier for the Tagname`string`✔✔Name and display title on the Tagtype`enum``Widget::TYPE_FLUID`
 `Widget::TYPE_STATIC`✔✘Specifies the type of the Tagtype\_style`enum``Widget::STYLE_VERTICAL_FLUID` (for fluid only)
 `Widget::STYLE_HORIZONTAL_FLUID` (for fluid only)
 `Widget::STYLE_CAROUSEL`
 `Widget::STYLE_SCROLL`
 `Widget::STYLE_SLIDESHOW`
 `Widget::STYLE_AUTO`✔✔This value is depend on the type.filter\_id`integer`✔✔default filter for the widgetparent\_id`integer`✘✘This field will be filled using source filter\_id if the widget is derived from other widgetembed\_code`string`✘✘The embed code (html) for website##### Methods

[](#methods-4)

Methodargumenttypedefaultreturncreate---self or falseupdate`$force``bool``false`self or falseget`$limit`
 `$page`
 `$options``integer`
 `integer`
 `array``25`
 `1`
 `[]`Term objects / self or falsegetById`$id``integer`-widget object / self or falseduplicate\*---this method will clone current loaded widget. return false if failed or widget object if successderive\*\*`$filter_id`
 `$name``integer`
 `string`-
 -This method will inherit current loaded widget to new widget with provided filter id and name. return false if failed or widget object if successdelete\*\*\*---widget object / self or false#### Notes

[](#notes-2)

- *clone* or *duplicate* will copy all CSS and JavaScript from the source.
- *derive* widget cannot be changed. The only fields that can be changed are `$filter_id` and `$name`.
- *delete* will not work if the widget has child widget.

---

[Error Handling](doc/error_handling.md)

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community20

Small or concentrated contributor base

Maturity65

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

Recently: every ~83 days

Total

13

Last Release

3470d ago

PHP version history (2 changes)v1.0.0PHP &gt;=5.3.3

v1.2.0PHP &gt;=5.4

### Community

Maintainers

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

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

---

Top Contributors

[![mcarpentierPillar](https://avatars.githubusercontent.com/u/7145456?v=4)](https://github.com/mcarpentierPillar "mcarpentierPillar (5 commits)")[![VariLilley](https://avatars.githubusercontent.com/u/4349950?v=4)](https://github.com/VariLilley "VariLilley (4 commits)")[![helman](https://avatars.githubusercontent.com/u/1606411?v=4)](https://github.com/helman "helman (1 commits)")[![minipai](https://avatars.githubusercontent.com/u/239570?v=4)](https://github.com/minipai "minipai (1 commits)")[![zorji](https://avatars.githubusercontent.com/u/5819904?v=4)](https://github.com/zorji "zorji (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/stackla-stackla-php-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/stackla-stackla-php-sdk/health.svg)](https://phpackages.com/packages/stackla-stackla-php-sdk)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M651](/packages/sylius-sylius)[ec-cube/ec-cube

EC-CUBE EC open platform.

78527.0k1](/packages/ec-cube-ec-cube)[drupal/core

Drupal is an open source content management platform powering millions of websites and applications.

19562.3M1.3k](/packages/drupal-core)[open-dxp/opendxp

Content &amp; Product Management Framework (CMS/PIM)

7310.3k29](/packages/open-dxp-opendxp)[concrete5/core

Concrete core subtree split

19159.3k48](/packages/concrete5-core)[jasonroman/nba-api

PHP Library to request data from various endpoints on NBA websites

994.6k](/packages/jasonroman-nba-api)

PHPackages © 2026

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