Top Menu

Jump to content
Home
    Modules
      • Projects
      • Activity
      • Work packages
      • Gantt charts
      • Calendars
      • Team planners
      • Boards
      • News
    • Getting started
    • Introduction video
      Welcome to OpenProject Community
      Get a quick overview of project management and team collaboration with OpenProject. You can restart this video from the help menu.

    • Help and support
    • Upgrade to Enterprise edition
    • User guides
    • Videos
    • Shortcuts
    • Community forum
    • Enterprise support

    • Additional resources
    • Data privacy and security policy
    • Digital accessibility (DE)
    • OpenProject website
    • Security alerts / Newsletter
    • OpenProject blog
    • Release notes
    • Report a bug
    • Development roadmap
    • Add and edit translations
    • API documentation
  • Sign in
      Forgot your password?

      or sign in with your existing account

      Google

Side Menu

  • Overview
  • Activity
    Activity
  • Roadmap
  • Work packages
    Work packages
  • Gantt charts
    Gantt charts
  • Calendars
    Calendars
  • Team planners
    Team planners
  • Boards
    Boards
  • News
  • Forums

Content

Development
  1. OpenProject
  2. Forums
  3. Development
  4. Creating workpackage via api

Creating workpackage via api

Added by peter lustig over 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)

RE: Creating workpackage via api - Added by peter lustig over 6 years ago

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))

RE: Creating workpackage via api - Added by Jens Ulferts over 6 years ago

Generally speaking, project , type and subject 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:

{ 
  "_links": {
    "project": { "href": "/api/v3/projects/:id" },
    "type": { "href": "/api/v3/types/:id" }
  },
  "subject": "Some subject"
}

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) or POST /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, and validationErrors. The payload 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 the validationErrors 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. The schema 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.

RE: Creating workpackage via api - Added by Jens Ulferts over 6 years ago

Based on your error log, your problem is not your payload but you are lacking headers. Therefore a 406 is returned

> Buffer(406 Not Acceptable)

You need to send a Content-Type Header with application/json as well, as the Authorization Header.

RE: Creating workpackage via api - Added by peter lustig over 6 years ago

thanks! works like a charm.

RE: Creating workpackage via api - Added by peter lustig over 6 years ago

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?

RE: Creating workpackage via api - Added by Jens Ulferts over 6 years ago

Please note that all properties of a resource that are resources themselves need to be provided in the _links section via an href.

{
   "_links": {
       "project": {
           "href": "/api/v3/projects/3"
       },
       "type": {
           "href": "/api/v3/types/1"
       },
       "category": {
           "href": "/api/v3/categories/3"
       }
   },
   "subject": "TITEL",
   "description": {
       "format": "markdown",
       "raw": "test",
       "html": "test"
   }   
}

RE: Creating workpackage via api - Added by peter lustig over 6 years ago

Thanks! Would be nice if the api spec got a working example

  • (1 - 7/7)
Loading...