5pm - perfectly balanced project management solution Web-based project and task management software for your team. The powerful features are accessed through a smart customizable interface. Everything is within a click or two. Get more done by 5pm! support@5pmweb.com
5pm API (v2)

About this Guide:

5pm API developer's guide describes how to use 5pm API to access and manage you 5pm account data. This guide is intended for developers who want to programmatically access their 5pm account data through their own applications.

About 5pm API Web Services:

Using 5pm API, you can access and manage groups, projects, tasks, activity and users in 5pm.

To access and manage your 5pm account using 5pm API you must build your client application that connects to one or more of the provided web services.

The core messaging technology of 5pm is SOAP (Simple Object Access Protocol).

The 5pm API is composed of the following web services:

AuthenticationService – lets authenticate for services and get session id – persistent key (ttl – 30 min) that will authenticate each your request without sending user/password each time.
ProjectsService – allows you to create, list, modify and remove projects;
ProjectsGroupsService – allows you to create, list, modify and remove projects groups;
TasksService – create, list, modify and remove tasks
ActivityService – create, list, modify and remove activity (messages, progress notes)
UsersService – lets you to create, list, modify and remove 5pm users

Signing Up for using 5pm API:

In order to use 5pm API you must be an registered 5pm user – that's enough for the alpha/beta versions.

Attention! Be careful with the API – you can lose your data.

Getting started with 5pm API

In order to start using 5pm API, you need:

service host: - your account host name (ex: demo.5pmweb.com)
login: - a valid user domain
password: - valid password for the provided login;

Web Service Urls:

The operations provided by web service are defined in WSDL files. Before connecting to a web service, you need to know the URL that points to its WSDL file. Each 5pm API web service has its own WSDL. The URL for each WSDL has the following form, where <version> is the service version and <service host> is your customer account host:

  • Authentication: http://<service host>/api/<version>/wsdl/authentication.wsdl
  • Projects: http://<service host>/api/<version>/wsdl/projects.wsdl
  • Tasks: http://<service host>/api/<version>/wsdl/tasks.wsdl
  • Projects: http://<service host>/api/<version>/wsdl/projects.wsdl
  • ProjectsGroups: http://<service host>/api/<version>/wsdl/projectsgroups.wsdl
  • Activity: http://<service host>/api/<version>/wsdl/activity.wsdl
  • Users: http://<service host>/api/<version>/wsdl/users.wsdl

example: http://demo.5pmweb.com/api/v2/wsdl/authentication.wsdl


The details of how your client application connects to the WSDL depends on the programming language and SOAP toolkit being used. SOAP toolkits typically provide a function for connecting to a service at a specified URL. For example, the following PHP code connects to API version 2:

/** authentication service client **/
$client = new SoapClient('http://demo.5pmweb.com/api/v2/wsdl/authentication.wsdl');

Data types:

Uppercase types, such as Project and Task, shown throughout this guide's API Reference are complex data structures or enumerations defined in the XSD:

Data Types: http://<service host>/api/<version>/wsdl/schema.xsd

Logging into 5pm Web Services:

Firstly, you must provide client authentication using AuthenticationService. After you get the sessionId (using operation signIn) you must send it each request via Soap Header. If you don't do that - you will get an exception with authentication error message (you can send the authentication request without sessionId header).


Current version is v2.

The Shut Down of old versions will be announced via 5pm blog.

About SOAP:

The 5pm API Web Services uses rpc-style versions of the simple object access protocol (SOAP). A client program sends a SOAP request; the web service processes the request and sends a response. Both the request and the response are packaged as XML messages that have a header and a body. The header contains metadata about the message, and the body specifies the requested operation.

The requests that a web service can process are defined in a web services definition language (WSDL) file in XML. The WSDL file describes the operations that the web service can perform, the required parameters for each operation, and the response for each operation.

Other Service Bindings:

5pm also supports GET and POST bindings, that are described in the same WSDL files.

  1. Authentication request using GET:
  2. Projects list request using GET:
  3. Also you can authorize each request using login and password instead of sessionId as in example below:
<login> - you 5pm account username
<password> - password for provided username
<sessionId> - session string retrieved from first (authentication) request.

Example (php):

                * 5pm api v2 example: create/read/update/remove projects

                define('API_HOST', 'demo.5pmweb.com');
                define('API_USERNAME', 'blumbergh@initechweb.com');
                define('API_PASSWORD', '1111');


                try {
                  $api = new FivePm\Api(API_HOST);

                  // try to sign in
                  if (!$api->signIn(API_USERNAME, API_PASSWORD)) {
                      throw new Exception("Authorization failed");

                  // create a new project
                  $project = $api->projects->add(
                          'name' => "New Api project"

                  // update the project
                  $project->name       = $project->name . " (upd)";
                  $projectUpdateResult = $api->projects->update($project);

                  // create another project
                  $anotherProject = $api->projects->add(
                          'name' => "Another Api project",

                  // add a task to the project
                  $task = $api->tasks->add(
                          'name'      => 'New api task',
                          'projectId' => $project->id,

                  // update the task
                  $task->name       = $task->name . ' (upd)';
                  $taskUpdateResult = $api->tasks->update($task);

                  // add another task
                  $anotherTask = $api->tasks->add(
                          'name'      => 'Another api task',
                          'projectId' => $project->id,

                  // add a sub-task to previously created task
                  $subTask = $api->tasks->add(
                          'name'     => 'New api sub-task',
                          'parentId' => $task->id,

                  // move the task to another project
                  $task->projectId = $anotherProject->id;

                  // move another task to another project
                  $anotherTask->projectId = $anotherProject->id;

                  // move $task as a sub-task of "$anotherTask"
                  $task->parentId = $anotherTask->id;

                  // get 10 tasks from project
                  $tasksList = $api->tasks->getList(
                      array('projectId' => $project->id), // - filter
                      0,      // - offset (by default '0')
                      10,     // - count  (by default '20')
                      true    // - load task team true/false (by default 'false')

                  // add a new message to the created project
                  $msg = $api->activity->add(
                          'type'      => 'msg',
                          'projectId' => $project->id,
                          'text'      => 'A message on api project',

                  // add a new message to the created task
                  $msgOnTask = $api->activity->add(
                          'type'   => 'msg',
                          'taskId' => $task->id,
                          'text'   => 'A message on api task',

                  // add a new progress to the created task
                  $progressOnTask = $api->activity->add(
                          'type'     => 'progress',
                          'taskId'   => $task->id,
                          'progress' => 34,
                          'text'     => 'A progress note on api task',

                  // add a new progress to the sub-task
                  $progressOnSubTask = $api->activity->add(
                          'type'     => 'progress',
                          'taskId'   => $subTask->id,
                          'progress' => 77,
                          'text'     => 'A progress note on api task',

                  // get 10 messages from task
                  $msgList = $api->activity->getList(
                      array('taskId' => $task->id), // - filter
                      0,    // - offset (by default '0')
                      10,   // - count  (by default '20')
                      true, // - load files (by default 'false')
                      true  // - load project/task name (by default 'false')

                  // remove the progress from the sub-task

                  // remove the task

                  // remove the project

                  // remove another project

                  // sign out

                  echo "The planet is safe now!\n";
                } catch (Exception $exc) {
                  echo "Something went wrong: " . $exc->getMessage() . "\n";

WSDL Examples:

Simple code example in PHP:

Last updated: August 19, 2015