Caution
This project is deprecated and no longer maintained. Version 7.1.0 is the final release: there will be no further updates, bug fixes or security fixes, and this repository is archived. We no longer use Harvest nor Forecast and no longer recommend using this library. Read why.
Forecast is a product built by Harvest. JoliCode had been a Harvest customer for 14 years. We created this SDK in 2019 and maintained it ever since, as an open source contribution to the PHP ecosystem.
In early August 2026, we were informed that the price of our subscription would be multiplied by 12, with only a few weeks' notice, in the middle of the summer, and without any meaningful change in the features provided.
We consider that a vendor changing its pricing in such proportions, with such short notice, is not a partner we can rely on in the long run. We have therefore moved away from Harvest and Forecast entirely, and have no reason left to maintain this library. Our Harvest PHP client is deprecated for the same reasons.
What this means:
- no more releases: the SDK will not follow future changes of the Forecast API;
- no support: issues and pull requests are closed, the repository is read-only;
- the package is flagged as
abandonedon Packagist: Composer warns on install, andcomposer auditreports it.
If you are a Harvest or Forecast customer, we encourage you to evaluate alternatives. If you still need this library, it remains available under the MIT license: feel free to fork it.
The following documentation is kept for reference only.
Harvest Forecast is a planification tool built by Harvest.
This PHP SDK was generated automatically with JanePHP using a Forecast OpenAPI specification. It means that:
- the code in the
generateddorectory is not hand-written but generated; - if the API changes and you need to fix an API call in a fork, edit the OpenAPI specification file, then regenerate the SDK.
This library is built atop of PSR-7 and PSR-18. So you will need to install some implementations for those interfaces.
If no PSR-18 client or PSR-7 message factory is available yet in your project or you don't care which one to use, just install some default:
composer require symfony/http-client nyholm/psr7You can now install the Forecast client:
composer require jolicode/forecast-php-apiFirst, you need to retrieve an access token. Please checkout Harvest's documentation about the OAuth2 Authorization Flow.
Then, use the factory that is provided to create the client:
// $client contains all the methods to interact with the API
$client = JoliCode\Forecast\ClientFactory::create(
$accessToken,
$forecastAccountId
);
$clients = $client->listClients()->getClients();
$assignments = $client->listAssignments([
'start_date' => '2019-01-01',
'end_date' => '2019-01-31',
])->getAssignments();
dump($clients);
dump($assignments);In the above example, the $client variable is an instance of the Client class, which you can browse through to learn more about the API features.
Want more example or documentation? See the documentation.
Instead of the listClients() method above, you can use all of these methods:
- Account:
getAccount()
- Aggregations:
countScheduledHours()getRemainingBudgetedHours()
- Assignments:
createAssignment()deleteAssignment()editAssignment()getAssignment()listAssignments()
- Clients:
getClient()listClients()
- Persons:
createPerson()deletePerson()editPerson()getPerson()listPeople()
- Placeholders:
createPlaceholder()deletePlaceholder()editPlaceholder()getPlaceholder()listPlaceholders()
- Profile:
whoAmI()
- Projects:
getProject()listProjects()
- RepeatedAssignmentSets:
createRepeatedAssignmentSet()deleteRepeatedAssignmentSet()editRepeatedAssignmentSet()getRepeatedAssignmentSet()listRepeatedAssignmentSets()
- Roles:
createRole()deleteRole()editRole()getRole()listRoles()
You can see the past versions using one of the following:
- the
git tagcommand - the releases page on Github
- the file listing the changes between versions
This library is licensed under the MIT License - see the LICENSE file for details.