Content
You are here:
Creating workpackage via api
Added by peter lustig about 6 years ago
Hi together,
at the moment I try to create a workpackage for a project via the rest api.
I try to send a post to backend. that works fine. But I don't know how the post data have to look like and which attributes are mandatory.
http://docs.openproject.org/apiv3-doc/#work-packages-work-packages-by-project-post
My code looks like this:
**val** r = requests.post("http://url/api/v3/projects/36/work_packages",
data = Map("description"->"TEST","subject"->"test11"),
headers = Map("Authorization" -> "Basic base64code"))
Is there an working example which data has to be send via post?
Thanks in advance.
Replies (7)
tried this:
**val** r = requests.post("http://url/api/v3/projects/36/work_packages/form",
// data = Map("description"->"TEST","subject"->"test11"),
data = """{
"subject": "new work_package",
"description": {
"format": "textile",
"raw": "hallo"
},
"_links": {
"type": {
"href": "/api/v3/types/1",
"title": "Task"
},
"status": {
"href": "/api/v3/statuses/1"
},
"priority": {
"href": "/api/v3/priorities/8",
"title": "Normal"
},
"assignee": {
"href": "/api/v3/users/3"
}
}
}""",
headers = Map("Authorization" -> "Basic Y="))
println("adasd", r);
Response is:
Response(http://url/api/v3/projects/36/work_packages/form,406,Not Acceptable,Map(server -> Buffer(nginx/1.10.3 + Phusion Passenger 5.1.5), x-request-id -> Buffer(33b6eafd-f00b-4abc-8534-6e987ffd62e8), cache-control -> Buffer(no-cache), keep-alive -> Buffer(timeout=5, max=100), date -> Buffer(Tue, 27 Nov 2018 14:23:29 GMT),
content-type -> Buffer(application/hal+json; charset=utf-8), status -> Buffer(406 Not Acceptable), via -> Buffer(1.1 url), transfer-encoding -> Buffer(chunked), connection -> Buffer(Keep-Alive), x-powered-by -> Buffer(Phusion Passenger 5.1.5), x-runtime -> Buffer(0.005146), vary -> Buffer(Accept-Encoding), content-encoding -> Buff
er(gzip)),ResponseBlob(57 bytes),None))
Generally speaking,
project
,type
andsubject
need to be provided. The project does not have to be provided if you are using the project specific create end point/api/v3/projects/:id/work_packages
. Both project and type need to be provided as an href in the _links section while subject is a scalar property of work_packages.A minimal payload could (see below) be:
But because of custom fields the above is just a general answer and the properties actually required differ based on the configuration.
Because of that, there are quite handy utility end points
POST /api/v3/projects/:id/work_packages/form
(project specific) orPOST /api/v3/work_packages/form
which guide a client towards having a valid payload for creating a work package.When posting to the end point you will receive a response consisting of
payload
,schema
, andvalidationErrors
. Thepayload
can be taken as the body for a POST request either against this form end point or against the actual create end point. Before POSTing to the later however, check thevalidationErrors
section. If it is empty, the payload is valid. If it is not, the client needs to fix the mentioned errors before posting to the create end point. Theschema
part describes the resource i.e. work package. It e.g. points out the required properties.Please note that all properties of a resource that are resources themselves need to be provided in the
_links
section via an href.Based on your error log, your problem is not your payload but you are lacking headers. Therefore a 406 is returned
You need to send a
Content-Type
Header withapplication/json
as well, as theAuthorization
Header.thanks! works like a charm.
I can't add a category to the workpackage my json looks like this:
{
"_links": {
"project": {
"href": "/api/v3/projects/3"
},
"type": {
"href": "/api/v3/types/1"
}
},
"subject": "TITEL",
"description": {
"format": "markdown",
"raw": "test",
"html": "test"
},
"_embedded": {
"category": {
"_type": "Category",
"id": 3,
"name": "NIST",
"_links": {
"self": {
"href": "/api/v3/categories/3",
"title": "NIST"
},
"project": {
"href": "/api/v3/projects/3",
"title": "nist"
}
}
}
}
}
what is wrong in my json?
Thanks! Would be nice if the api spec got a working example