Definitions of data types used by the REST API.

ReviewData

Contains basic information about a review.

Sample XML:

<reviewData>
  <allowReviewersToJoin>false</allowReviewersToJoin>
  <author>
    <displayName>Matt Quail</displayName>
    <userName>matt</userName>
  </author>
  <createDate>2008-08-25T12:38:14.603+1000</createDate>
  <creator>
    <displayName>Matt Quail</displayName>
    <userName>matt</userName>
  </creator>
  <description>Review things and stuff</description>
  <metricsVersion>1</metricsVersion>
  <moderator>
    <displayName>Matt Quail</displayName>
    <userName>matt</userName>
  </moderator>
  <name>Test review 1</name><permaId>
  <id>CR-1</id></permaId>
  <projectKey>CR</projectKey>
  <state>Review</state>
</reviewData>

Sample JSON:

{"reviewData": {
	"allowReviewersToJoin":false,
	"author":{"displayName":"Matt Quail","userName":"matt"},
	"createDate":"2008-10-27T09:50:05.064+1100",
	"creator":{"displayName":"Matt Quail","userName":"matt"},
	"moderator":{"displayName":"Matt Quail","userName":"matt"},
	"description":"Review things and stuff",
	"metricsVersion":1,
	"name":"Test review 1",
	"permaId":{"id":"CR-3"},
	"projectKey":"CR",
	"state":"Draft"
}}

DetailedReviewData

Note that the reviewItems element is empty when multiple reviews are retrieved via REST. To include the reviewItems in a detailedReviewData structure you must retrieve a single review via the URL /rest-service/reviews-v1/<review id>/details.

Sample XML:

<detailedReviewData>
	<allowReviewersToJoin>false</allowReviewersToJoin>
	<author>
		<displayName>Matt Quail</displayName>
		<userName>matt</userName>
	</author>
	<createDate>2008-09-16T10:50:26.862+1000</createDate>
	<creator>
		<displayName>Matt Quail</displayName>
		<userName>matt</userName>
	</creator>
	<description/>
	<metricsVersion>1</metricsVersion>
	<moderator>
		<displayName>Matt Quail</displayName>
		<userName>matt</userName>
	</moderator>
	<name/>
	<permaId>
		<id>CR-1</id>
	</permaId>
	<projectKey>CR</projectKey>
	<state>Draft</state>
	<actions>
		<actionData>
			<name>action:abandonReview</name>
		</actionData>
		<actionData>
			<name>action:closeReview</name>
		</actionData>
		<actionData>
			<name>action:submitReview</name>
		</actionData>
		<actionData>
			<name>action:reopenReview</name>
		</actionData>
		<actionData>
			<name>action:summarizeReview</name>
		</actionData>
		<actionData>
			<name>action:rejectReview</name>
		</actionData>
		<actionData>
			<name>action:deleteReview</name>
		</actionData>
		<actionData>
			<name>action:approveReview</name>
		</actionData>
		<actionData>
			<name>action:modifyReviewFiles</name>
		</actionData>
		<actionData>
			<name>action:viewReview</name>
		</actionData>
		<actionData>
			<name>action:commentOnReview</name>
		</actionData>
		<actionData>
			<name>action:recoverReview</name>
		</actionData>
		<actionData>
			<name>action:createReview</name>
		</actionData>
	</actions>
	<generalComments/>
	<reviewItems>
		<reviewItem>
			<permId>
				<id>CFR-1</id>
			</permId>
			<authorName>admin</authorName>
			<commitDate>2008-08-27T10:19:17.000+1000</commitDate>
			<commitType>Modified</commitType>
			<fileType>File</fileType>
			<fromPath>ds/Home</fromPath>
			<fromRevision>1</fromRevision>
			<repositoryName>localhost</repositoryName>
			<toPath>ds/Home</toPath>
			<toRevision>2</toRevision>
		</reviewItem>
		<reviewItem>
			<permId>
				<id>CFR-2</id>
			</permId>
			<authorName>tomd</authorName>
			<commitDate>2008-09-09T16:42:28.786+1000</commitDate>
			<commitType>Added</commitType>
			<fileType>File</fileType>
			<fromPath/>
			<fromRevision/>
			<repositoryName>mylocalsvn</repositoryName>
			<toPath>aaa/bbb/qqq.txt</toPath>
			<toRevision>3</toRevision>
		</reviewItem>
	</reviewItems>
	<reviewers/>
	<transitions>
		<transitionData>
			<name>action:approveReview</name>
		</transitionData>
		<transitionData>
			<name>action:abandonReview</name>
		</transitionData>
	</transitions>
	<versionedComments/>
</detailedReviewData>

Sample JSON:

{"detailedReviewData": {
	"allowReviewersToJoin":false,
	"author":{"displayName":"joe lowercase","userName":"joe"},
	"createDate":"2008-10-27T09:50:05.064+1100",
	"creator":{"displayName":"joe lowercase","userName":"joe"},
	"description":"",
	"metricsVersion":1,
	"moderator":{"displayName":"joe lowercase","userName":"joe"},
	"name":"readme ",
	"permaId":{"id":"CR-3"},
	"projectKey":"CR",
	"state":"Draft",
	"actions": {
		"actionData":[{"name":"action:rejectReview"},{"name":"action:closeReview"},
		{"name":"action:modifyReviewFiles"},{"name":"action:abandonReview"},
		{"name":"action:commentOnReview"},{"name":"action:reopenReview"},
		{"name":"action:createReview"},{"name":"action:recoverReview"},
		{"name":"action:deleteReview"},{"name":"action:approveReview"},
		{"name":"action:viewReview"},{"name":"action:submitReview"},
		{"name":"action:summarizeReview"}]
	},
	"generalComments":"",
	"reviewItems": {"reviewItem":[
		{"permId":{"id":"CFR-1"},
		"authorName":"evzijst",
		"commitDate":"2008-10-14T15:25:08.755+1000",
		"commitType":"Modified",
		"fileType":"File",
		"fromPath":"test2\/trunk\/src\/main\/java\/com\/atlassian\/Test.java",
		"fromRevision":9,
		"repositoryName":"Local",
		"toPath":"test2\/trunk\/src\/main\/java\/com\/atlassian\/Test.java",
		"toRevision":10},
		{"permId":{"id":"CFR-2"},
		"authorName":"evzijst",
		"commitDate":"2008-10-14T15:25:08.755+1000",
		"commitType":"Added",
		"fileType":"Directory",
		"fromPath":"",
		"fromRevision":"",
		"repositoryName":"Local",
		"toPath":"test2\/trunk\/src\/test\/java\/com",
		"toRevision":10}]
	},
	"reviewers":"",
	"transitions":{"transitionData":[
		{"name":"action:approveReview"},
		{"name":"action:abandonReview"}]
	},
	"versionedComments":""}}

|

Error

When a request cannot be serviced properly due to either a server-side problem, or invalid client input, Crucible will return an error document, combined with an HTTP status code other than 200. This XML document contains a number of elements that describe the problem. Note that the HTTP status code distinguishes between client- and server-side causes.
Below is the error that is returned when asking for a non existent resource. The status code for this response is 404 "Document Not Found". Other possible status codes for error responses include 400 "Bad Request" (for example when a request contains an invalid POST body) and 403 "Forbidden" (when accessing a resource without permission).

Sample XML:

<error>
	<code>NotFound</code>
	<message>Unknown metrics version: 45</message>
	<stacktrace>com.atlassian.crucible.spi.services.NotFoundException: Unknown metrics version: 45
	at com.atlassian.crucible.spi.impl.DefaultReviewService.getMetrics(DefaultReviewService.java:689)
	at com.atlassian.crucible.spi.rpc.RestReviewService$22.doGet(RestReviewService.java:645)
	at com.atlassian.crucible.spi.rpc.RestReviewService$22.doGet(RestReviewService.java:644)
	at com.atlassian.crucible.spi.rpc.ConditionalGet.doConditionalGet(ConditionalGet.java:46)
	at com.atlassian.crucible.spi.rpc.RestReviewService.getMetrics(RestReviewService.java:643)
	...
	</stacktrace>
</error>

Sample JSON:

{
	"code":"NotFound",
	"message":"No review exists with permId 'CR-333'",
	"stacktrace":"com.atlassian.crucible.spi.services.NotFoundException: Unknown metrics version: 45
	at com.atlassian.crucible.spi.impl.DefaultReviewService.getMetrics(DefaultReviewService.java:689)
	at com.atlassian.crucible.spi.rpc.RestReviewService$22.doGet(RestReviewService.java:645)
	at com.atlassian.crucible.spi.rpc.RestReviewService$22.doGet(RestReviewService.java:644)
	at com.atlassian.crucible.spi.rpc.ConditionalGet.doConditionalGet(ConditionalGet.java:46)
	at com.atlassian.crucible.spi.rpc.RestReviewService.getMetrics(RestReviewService.java:643)
	..."
}