PHP wrapper for the Teamwork project management API

1.3.1 2020-09-26 12:31 UTC



Scrutinizer Code Quality Code Coverage Build Status Release License

This package aims to implement the Teamwork API in a Service Provider for Laravel 5.


Add the package through composer:

composer require "ciromattia/laravel-teamwork:~1.3"

Laravel Setup

The Service Provider is auto-discoverable by Laravel 5.5+.

If you're using Laravel 5.4 or earlier, you have to manually add the following to your config/app.php file.

'providers' => [

and then add the facade to your aliases array

'aliases' => [
    'Teamwork' => 'Ciromattia\Teamwork\Facades\Teamwork',


Add a teamwork array to your config/services.php file

'teamwork' => [
    'key'  => 'YourSecretKey',
    'url'  => 'YourTeamworkUrl'


There are two ways to use this stuff: the first is by the Teamwork Facade, like this


If you want to use dependency injection to make your application easy to test, the Service Provider binds Ciromattia\Teamwork\Factory. Here is an example of how to use it with dependency injection

Route::get('/test', function(Ciromattia\Teamwork\Factory $teamwork) {
   $activity = $teamwork->activity()->latest();


The methods available mimic the Teamwork entities in lowercase and query the namesake API, so you can retrieve e.g. a single project with:


Common methods available to all the entities are:

  • all() - returns all the query results (i.e. all the entity objects).
  • find($id) - returns a single object with the specified ID.
  • create($data) - creates a single object with $data parameters.
  • update($data) - updates a single object with $data parameters.
  • delete($id) - deletes a single object with the specified ID.

The implemented entities at the moment are:

The following special entities don't have the common methods specified above:

Configuration Without Laravel

If you are not using Laravel you can instantiate the class like this

require "vendor/autoload.php";

use GuzzleHttp\Client as Guzzle;
use Ciromattia\Teamwork\Client;
use Ciromattia\Teamwork\Factory as Teamwork;

$client     = new Client(new Guzzle, 'YourSecretKey', 'YourTeamworkUrl');
$teamwork   = new Teamwork($client);

You are ready to go now!


Not all of the Teamwork API is supported yet but there is still a lot you can do! Below are some examples of how you can access Projects, Companies, and more. To work with a specific Object pass in the ID to perform actions on it. Data can be passed through for creating and editing.

To see more examples visit the docs

// create a project
    "name" => "My New Amazing Project",
    "description" => "This is a project that I will dedicate my whole life too",
    "companyId" => "999"

// get the latest activity on a project


2.0 Release

  • Add support for paging
  • Add Support For Comments
  • Add Support For Permissions
  • Add Support For Categories
  • Add Support For People Status
  • Add Support For Files
  • Add Support For Notebooks


This library is an evolution of the now abandoned Teamwork 5 PM API Bridge by Ross Edman.