Get collection of work items (Epics, Features, User Stories, Tasks, Bugs, Test Plans, Test Plan Runs, Requests)
Entity Types derived from Assignable base class
- Epic
- Feature
- UserStory
- Task
- Bug
- TestPlan
- TestPlanRun
- Request
- InboundAssignable
- OutboundAssignable
More information
Options for working with inner collections
If you'd like to get an inner collection there is an option to either include it into the list of retrieved fields, or to query this collection directly:
- /api/v1/assignables?include=[Id,Name,Assignments[GeneralUser,Role]]&take=100&innertake=1000
- /api/v1/Assignments?include=[Assignable[Id,Name],GeneralUser,Role]&take=1000
We recommend using the second approach.
Here are some popular queries:
-
get work items created last months:
/api/v1/assignables?where=(CreateDate gte '2017-01-01')and(CreateDate lte '2017-01-31')&take=1000 -
get work items closed last months:
/api/v1/assignables?where=(EndDate gte '2017-01-01')and(EndDate lte '2017-01-31')&take=1000 -
get work items in the current iteration:
/api/v1/assignables?where=(Iteration.IsCurrent eq 'true')&take=1000 -
get work items in the current release:
/api/v1/assignables?where=(Release.IsCurrent eq 'true')&take=1000 -
get work items created by user ID#1:
/api/v1/assignables?where=(Owner.Id eq 1)&include=[Id,Name,CreateDate,StartDate,EndDate,EntityState]&take=1000
using System;
using System.Net;
using System.Net.Http;
namespace REST.Test
{
class Program
{
static void Main(string[] args)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://restapi.tpondemand.com/api/v1/");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
//get 5 oldest work items which are not closed yet
string query = "assignables?where=(EntityState.IsFinal eq 'false')&take=5&orderby=CreateDate&include=[Id,Name,EntityState]";
//using a token generated at /api/v1/Authentication
query += "&token=Njo4OTIyQzkzN0M5NEY3NzNENDIyNTM2RDU3MTMwMTMwOA==";
Console.WriteLine("Pulling " + query);
HttpResponseMessage response = client.GetAsync(query).Result;
if (response.IsSuccessStatusCode)
{
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}
else
{
Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
}
}
}
}
using System;
using System.Net;
using System.Net.Http;
namespace REST.Test
{
class Program
{
static void Main(string[] args)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://restapi.tpondemand.com/api/v1/");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
//get work items closed last week
string lastMonday = DateTime.Now.AddDays(-(int)DateTime.Now.DayOfWeek - 6).ToString("yyyy-MM-dd");
string query = "assignables?where=(EndDate gte '" + lastMonday + "')&include=[Id,Name,EndDate,TimeSpent]&take=1000";
//using access token generated at Personal Details page (Access Tokens tab)
query += "&access_token=NjplaXdQeTJDOHVITFBta0QyME85QlhEOWpwTGdPM2V6VjIyelZlZ0NKWG1RPQ==";
Console.WriteLine("Pulling " + query);
HttpResponseMessage response = client.GetAsync(query).Result;
if (response.IsSuccessStatusCode)
{
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}
else
{
Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
}
}
}
}
using System;
using System.Net;
using System.Net.Http;
using System.Text;
namespace REST.Test
{
class Program
{
static void Main(string[] args)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://restapi.tpondemand.com/api/v1/");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
//get work items for project with ID#192
string query = "assignables?where=(Project.Id eq 192)&take=1000&include=[Id,Name,EntityState]";
//using basic authentication (here 'John' is login and '123' is password)
string authentication = Convert.ToBase64String(Encoding.ASCII.GetBytes("John:123"));
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authentication);
Console.WriteLine("Pulling " + query);
HttpResponseMessage response = client.GetAsync(query).Result;
if (response.IsSuccessStatusCode)
{
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}
else
{
Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
}
}
}
}
using System;
using System.Net;
using System.Net.Http;
namespace REST.Test
{
class Program
{
static void Main(string[] args)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://restapi.tpondemand.com/api/v1/");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
//get work item ID#191
string query = "assignables/191?include=[Id,Name,EntityState]&append=[Comments-count]";
//using no authentication will result in 401 Unauthorized response
Console.WriteLine("Pulling " + query);
HttpResponseMessage response = client.GetAsync(query).Result;
if (response.IsSuccessStatusCode)
{
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}
else
{
Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
}
}
}
}