For Developers: Getting started with the DoneDone web services API.

For paid accounts, we offer a straightforward SOAP web service that exposes methods to access issues, projects, and people in your DoneDone account. Your DoneDone web service is located at:

Web Service:
https://[your subdomain].mydonedone.com/api/DoneDone.asmx

WSDL:
https://[your subdomain].mydonedone.com/api/DoneDone.asmx?WSDL

This page is intended to help you get rolling with the DoneDone API and addresses common questions we've heard from developers.

We hope you find this helpful and happy programming!

Services and Objects

Login()
Logout()
GetProjects()
GetPriorityLevels()
GetPeopleInProject()
GetIssuesInProject()
DoesIssueExist()
GetIssue()
GetListOfPotentialStatusesForIssue()
GetListOfPeopleForIssueReassignment()
CreateIssueForProject()
AddCommentToIssue()
ReassignIssue()
SetIssueStatus()
CloseIssue()
ReopenIssue()

Custom Request Objects
Custom Return Objects




Login()

Parameters: username_or_email (string), password (string)
Returns: boolean (success or failure)
Related methods: None

This method logs a user into DoneDone. To access any other methods from the DoneDone web service, you will need to call Login first. From that point forward, any data you get back from other services will be restricted to what your logged-in user has access to within DoneDone. You must pass in either the username or email of the user (both are unique) as well as the password.

The API uses cookies to maintain session between your application and our servers, so your client will need to support this feature.

//C# sample login

DoneDone done_done = new DoneDone();
System.Net.CookieContainer cookie_container = new System.Net.CookieContainer();
done_done.CookieContainer = cookie_container;

if (done_done.Login("username", "password"))
{
   // Call other services here...
}

This article provides more info about maintaining session state between a client and server in .NET. See the section called "Create an ASP.NET Client Application", Step 8, in the method called "Button1_Click" in their example code.

For other programming languages, here's some more general info on how to maintain session state with the web service API.


Logout()

Parameters: None
Returns: Nothing
Related methods: Login

This method logs a user out of DoneDone.


GetProjects()

Parameters: None
Returns: Array of ProjectInfo
Related methods: Login

This method returns a list of project names and IDs the user has access to. You'll need to call this method to get potential project IDs to pass to project-dependent methods like GetPeopleInProject, GetIssuesInProject, GetIssue, CreateIssueForProject, and AddCommentToIssue.


GetPriorityLevels()

Parameters: None
Returns: Array of PriorityLevelInfo
Related methods: Login

This method returns a list of priority level names and IDs. You'll need to call this method to get potential priority level IDs to pass to priority level-dependent methods like CreateIssueForProject.


GetPeopleInProject()

Parameters: project_id (int)
Returns: Array of PeopleInfo
Related methods: Login, GetProjects (to get potential project_id)

This method returns a list of people names and IDs of people on a project. You'll need to call this method to get potential people IDs to pass to user-dependent methods like CreateIssueForProject.


GetIssuesInProject()

Parameters: project_id (int), load_issue_details (boolean).
Returns: Array of IssueInfo
Related methods: Login, GetProjects (to get potential project_id)

This method returns a list of issues for a given project. If load_issue_details is true, files and issue history are included as well. You may want to call this method to get potential issue IDs to pass to issue-dependent methods like GetIssue and AddCommentToIssue.


DoesIssueExist()

Parameters: project_id (int), issue_id (int).
Returns: boolean
Related methods: Login, GetProjects (to get potential project_id)

This method returns true if an issue with the given project_id exists. Alternatively, you could also just call GetIssuesInProject to get all available issues in a project.


GetIssue()

Parameters: issue_id (int), project_id (int)
Returns: IssueInfo
Related methods: Login, GetIssuesInProject (to get potential issue_id), GetProjects (to get potential project_id)

This method returns an issue's detailed info including files and history. Reference the IssueInfo object to see all issue data.


GetListOfPotentialStatusesForIssue()

Parameters: issue_id (int), project_id (int)
Returns: Array of IssueStatusInfo
Related methods: Login, GetIssuesInProject (to get potential issue_id), GetProjects (to get potential project_id)

This method returns a list of potential statuses that an issue can be changed to. In order to be able to change status, the logged in user must be assigned that issue. You may want to call this method to get potential issue status IDs to pass to issue-status-dependent methods like SetIssueStatus.


GetListOfPeopleForIssueReassignment()

Parameters: issue_id (int), project_id (int)
Returns: Array of PersonInfo
Related methods: Login, GetIssuesInProject (to get potential issue_id), GetProjects (to get potential project_id)

This method returns a list of potential people that can be reassigned an issue. You may want to call this method to get potential person IDs to pass to people-dependent methods like ReassignIssue.


CreateIssueForProject()

Parameters: CreateIssueRequest (object)
Returns: String (URL to created issue)
Related methods: Login, GetProjects (to get potential CreateIssueRequest.ProjectID), GetPeopleInProject (to get potential CreateIssueRequest.CreatorID, CreateIssueRequest.ResolverID), GetPriorityLevels (to get potential CreateIssueRequest.PriorityLevelID)

This method creates a new issue for a project and accepts a CreateIssueRequest object. If the logged in user is an administrator, you may optionally set a value to CreatorID in the CreateIssueRequest object. This lets you create an issue on behalf of the person whose ID matches the CreatorID.

You can optionally set a file attachment to the CreateIssueRequest object as well. This method does not allow for multiple file attachments.

The CreateIssueRequest.PriorityLevelID is also optional. If it is left blank, the issue will be assigned a priority level of "Low."

If the issue submits properly, a direct URL to the issue will be returned.


AddCommentToIssue()

Parameters: AddCommentToIssueRequest (object)
Returns: String (URL to created issue)
Related methods: Login, GetProjects (to get potential AddCommentToIssueRequest.ProjectID), GetIssuesInProject (to get potential AddCommentToIssueRequest.IssueID)

This method adds a comment to an already existing issue. You can optionally set a file attachment to the AddCommentToIssueRequest object as well. This method does not allow multiple file attachments.

If the issue submits properly, a direct URL to the issue will be returned.


ReassignIssue()

Parameters: project_id (int), issue_id (int), person_id (int), comment (string)
Returns: boolean (success or failure)
Related methods: Login, GetProjects (to get potential project_id), GetIssuesInProject (to get potential issue_id), GetListOfPeopleForIssueReassignment (to get potential person_id)

This method re-assigns an issue to another person. Only the creator, current resolver, or an admin may reassign issues. You may optionally include a comment on the reassignment as well.


SetIssueStatus()

Parameters: project_id (int), issue_id (int), status_id (int), comment (string)
Returns: boolean (success or failure)
Related methods: Login, GetProjects (to get potential project_id), GetIssuesInProject (to get potential issue_id), GetListOfPotentialStatusesForIssue (to get potential status_id)

This method changes the status of an issue. You may optionally include a comment on the issue status change as well.


CloseIssue()

Parameters: project_id (int), issue_id (int), comment (string)
Returns: boolean (success or failure)
Related methods: Login, GetProjects (to get potential project_id), GetIssuesInProject (to get potential issue_id)

This method closes an issue. This is the same as marking an issue as fixed, if it is ready for retest.


ReopenIssue()

Parameters: project_id (int), issue_id (int), comment (string)
Returns: boolean (success or failure)
Related methods: Login, GetProjects (to get potential project_id), GetIssuesInProject (to get potential issue_id)

This method re-opens an issue.


Custom Request Objects

CreateIssueRequest

public string Title;
public string Description;
public int ProjectID;
public int ResolverID;
public int CreatorID; //optional
public int PriorityLevelID; //optional
public string RelatedFileName;
public byte[] RelatedFile;
public string[] Tags;

AddCommentToIssueRequest

public int IssueID;
public int ProjectID;
public string Description;
public string RelatedFileName;
public byte[] RelatedFile;

Custom Return Objects

PersonInfo

public int ID;
public string Name;
public string CompanyName;

ProjectInfo

public int ID;
public string Name;

PriorityLevelInfo

public int ID;
public string Name;

IssueStatusInfo

public int ID;
public string Name;

IssueInfo

public int ID;
public DateTime CreateDate;
public DateTime UpdateDate;
public string Title;
public string Description;
public PersonInfo Creator;
public PersonInfo Resolver;
public string IssueStatus;
public int ProjectID;
public string PriorityLevel;
public string[] AttachedFiles;
public History[] History;
public string[] Tags;

History

public string Title;
public string Description;
public string CreatorName;
public DateTime CreateDate;
public string AttachedFile;