Updating Redmine's Issue Status via the REST API

Posted on Sun 26 February 2012 in General

Updating statuses in Redmine via the API turned out to be harder than I expected. Taking the representation it sends you, and changing the appropriate values gets you strange behaviour:

  • The server responds to the PUT request with 200 OK
  • The status is not changed.

After a bunch of trial, error, and googling, I hit upon the solution:

Note:I tried posting the following on the Redmine topic about this, but it was rejected as spam, so I'm posting it here in the hopes that it'll help someone.

I was able to get it to work using XML:

<?xml version='1.0' encoding='utf-8'?>
<issue>
    <status_id>10</status_id>
</issue>

Note that I had to also set the Content-Type header to text/xml (despite .xml already being in the url) for the the update to take.

When I send the equivalent JSON (and Content-Type: application/json) I get an HTTP 500.

To me it's pretty bonkers that for an API claiming to be RESTful:
  • you have to include .xml or .json in the url AND set the Content-Type. Content-Type alone should do the trick.
  • the representation that you send to PUT an update is different than the one you GET from the server. (ie. 10 vs. )
  • the server responds 200 OK for requests where it does no work for whatever reason.

But anyways, that's how I managed to update the status. Hope it helps someone.