1. U4 ERPx
  2. API Reference
  3. Project management
  4. Projects

Projects

The Project API in Unit4 ERPx manages project-related data - creation, retrieval, updates, and termination (soft-delete) of project records. It is designed for integration with mobile and other external applications, supporting microservice-based development, testing, and maintenance.

Purpose:
The Project API manages all aspects of project data, including creation, update, validation, and soft deletion (termination).

Base URL:
/v1/projects

Authentication:
All APIs require a Client ID and Client Secret.
Refer to the global authentication documentation for details.

System Parameters:
System parameters for this API are available in Online Help → Project Management → Project Information → Fixed Registers → System Parameters.    

Supported Methods

HTTP MethodEndpointDescriptionLimits & Notes
POST/v1/projectsCreate a single project recordOnly 1 project per call.
GET/v1/projects/{projectId}Retrieve single project dataSupports optional company filter. Response contains project relations, flexi-fields, billing information, activities, global projects, and work orders.
GET/v1/projects/portfolioRetrieve portfolio of projectsReturns list of projects managed by currently logged user.
PATCH/v1/projects/{projectId}Update project dataAllows modifying project records. One project per call, multiple fields can be updated.
DELETE/v1/projects/{projectId}Terminate (soft-delete) a projectChanges status to ‘Closed’.
   

Swagger / Schema

Version v1

   

Method Details

Sample Request

{
  "postTimeCosts": true,
  "companyId": "EN",
  "authorisation": "N",
  "costCentre": "410",
  "projectName": "Project Name RR1",
  "mainProject": "RR1",
  "probability": 0,
  "projectId": "RR1",
  "projectManagerId": "87010101",
  "status": "N",
  "projectType": "IN",
  "containsWorkOrders": true
}

   

Validation Rules for POST Method

POST_001 - User is not authorised
ElementDetails
Scenario IDPOST_001
Scenario NameUser is not authorised
HTTP Code403
GIVENA new project needs to be created
WHENCalling the POST method of the API
BUTUser does NOT have permissions
THENAPI is not reached; 403 Forbidden response is returned
Example Error Message“User is not authorised.”
POST_002 - Missing mandatory fields
ElementDetails
Scenario IDPOST_002
Scenario NameMissing mandatory fields
HTTP Code422
GIVENA new project needs to be created
WHENCalling the POST method of the API
BUTA mandatory field is missing
THENProject is not created; 422 response is returned
Example Error Message“The {0} field is required.” / “Illegal value entered” / “A value must be entered for {0}.”
POST_003 - Invalid format of fields
ElementDetails
Scenario IDPOST_003
Scenario NameInvalid format of fields
HTTP Code422
GIVENA new project needs to be created
WHENCalling the POST method of the API
BUTField format is invalid
THENProject is not created; 422 response is returned
Example Error Message“Invalid date time format…” / “Error converting value {0} to type ‘{1}’…” / “The field {0} must be between 0 and 100.”
POST_004 - Unsatisfied model restrictions
ElementDetails
Scenario IDPOST_004
Scenario NameUnsatisfied model restrictions
HTTP Code422
GIVENA new project needs to be created
WHENCalling the POST method of the API
BUTField violates model restrictions (length, range, numeric limits)
THENProject is not created; 422 response is returned
Example Error Message“The field {0} must be a string with max length {1}” / “{0} must be equal or earlier than {1}”
POST_005 - Duplicate projectId
ElementDetails
Scenario IDPOST_005
Scenario NameDuplicate projectId
HTTP Code422
GIVENA new project needs to be created
WHENCalling the POST method of the API
BUTprojectId already exists within companyId
THENProject is not created; 409 response is returned
Example Error Message“{0} already exists.”
POST_006 - Invalid data
ElementDetails
Scenario IDPOST_006
Scenario NameInvalid data
HTTP Code422
GIVENA new project needs to be created
WHENCalling the POST method of the API
BUTData does not exist on ERP (attribute values, list of possible values)
THENProject is not created; 422 response is returned
Example Error Message“{0} is not a legal {1}” / “Illegal {0}”
POST_007 - Project created
ElementDetails
Scenario IDPOST_007
Scenario NameProject created
HTTP Code201
GIVENA new project needs to be created
WHENCalling the POST method of the API
BUT
THENA new project is created
Example Error MessageRESPONSE: returns the created project
   

Sample Request

GET /projects/123

   

Additional Parameters

The following parameters help retrieve basic information about a project:

ParameterValueDescriptionData TypeDefault Value
companyIdoptionalSpecify if you wish to retrieve a project that exists in a specific company or client.stringempty

   

Validation Rules for GET Method (projectId)

GET_001 - User is not authorised
ElementDetails
Scenario IDGET_001
Scenario NameUser is not authorised
HTTP Code403
GIVENData from an existing project needs to be retrieved
WHENCalling the GET method of the API
BUTUser does NOT have permissions
THENAPI is not reached; 403 Forbidden response is returned
Example Error Message“User is not authorised.”
GET_002 - Unknown companyID
ElementDetails
Scenario IDGET_002
Scenario NameUnknown companyID
HTTP Code403
GIVENData from an existing project needs to be retrieved
WHENCalling the GET method of the API
BUTcompanyID does not exist
THENAPI is not reached; 403 Forbidden response is returned
Example Error Message“User is not authorised.”
GET_003 - Missing mandatory fields
ElementDetails
Scenario IDGET_003
Scenario NameMissing mandatory fields
HTTP Code405
GIVENData from an existing project needs to be retrieved
WHENCalling the GET method of the API
BUTprojectId is not indicated
THENProject is not retrieved; 405 response is returned
Example Error Message(Empty message)
GET_004 - projectId does not exist
ElementDetails
Scenario IDGET_004
Scenario NameprojectId does not exist
HTTP Code404
GIVENData from an existing project needs to be retrieved
WHENCalling the GET method of the API
BUTprojectId does not exist for the companyId
THENProject is not retrieved; 404 response is returned
Example Error Message“The entity of the following parameters [Company: {0}, Project: {1}] was not found.”
GET_005 - Project exists
ElementDetails
Scenario IDGET_005
Scenario NameProject exists
HTTP Code200
GIVENData from an existing project needs to be retrieved
WHENCalling the GET method of the API
BUT
THEN200 response is returned together with the information of the project
Example Error MessageRESPONSE: Project information is retrieved
   

Sample Request

N/A

   

Additional Parameters

The following parameters help retrieve basic information about projects:

ParameterValueDescriptionData TypeDefault Value
companyIdoptionalSpecify if you wish to retrieve a project that exists in a specific company or client.stringempty

Limits & Notes

  • It is not possible to request projects that belong to another user.
  • The response code will be 200 regardless of whether the user is not a Project manager of any Project OR if they are the Project manager of a Project with the status “Closed” or “Terminated”.

   

Validation Rules for GET Method (Portfolio)

GET_001 - User is not authorised
ElementDetails
Scenario IDGET_001
Scenario NameUser is not authorised
HTTP Code403
GIVENUser needs to know which project they run as a Project manager
WHENCalling the GET method of the API
BUTUser does NOT have permissions
THENAPI is not reached; 403 Forbidden response is returned
Example Error Message“User is not authorised.”
GET_002 - User does not have any project assigned
ElementDetails
Scenario IDGET_002
Scenario NameUser does not have any project assigned
HTTP Code200
GIVENUser needs to know which project they run as a Project manager
WHENCalling the GET method of the API
BUTConnected user does not have a project assigned
THEN200 response is returned with an empty list
Example Error Message[]
GET_003 - User is the Project manager of a Project with "Closed" or "Terminated" status
ElementDetails
Scenario IDGET_003
Scenario NameUser is the Project manager of a Project with “Closed” or “Terminated” status
HTTP Code200
GIVENUser needs to know which project they run as a Project manager
WHENCalling the GET method of the API
BUTConnected user does not have an “Active” project assigned
THEN200 response is returned with an empty list
Example Error Message[]
GET_004 - User is the Project manager of at least one Project with "Active" status
ElementDetails
Scenario IDGET_004
Scenario NameUser is the Project manager of at least one Project with “Active” status
HTTP Code200
GIVENUser needs to know which project they run as a Project manager
WHENCalling the GET method of the API
BUTConnected user is the Project manager of at least one project
THEN200 response is returned together with the basic information of all projects where the user is the Project manager
Example Error MessageRESPONSE: List of projects is retrieved
GET_005 - User is the Project manager of several projects and one has "Closed" or "Terminated" status
ElementDetails
Scenario IDGET_005
Scenario NameUser is the Project manager of several projects and one has “Closed” or “Terminated” status
HTTP Code200
GIVENUser needs to know which project they run as a Project manager
WHENCalling the GET method of the API
BUTOne of the projects has the status “Closed” or “Terminated”
THEN200 response is returned together with the basic information of all projects where the user is the Project manager, and the project status is not “Closed” or “Terminated”
Example Error MessageRESPONSE: List of projects is retrieved
   

Sample Request

{
  "path": "/",
  "op": "Replace",              
  "value": {
    "projectName": "Enter your name here",
    "status": "C",
    "probability": 70
  }
}
  
{
  "path": "/customFieldGroups/oppor/status_fx",
  "op": "Replace",              
  "value": "Chance higher than 79%"
}
   

Additional Parameters

The following parameters help retrieve or update basic information about a project:

ParameterValueDescriptionData TypeDefault Value
companyIdoptionalSpecify if you wish to update a project that exists in a specific company or client.stringempty

   

Limits & Notes

  • One project per call.
  • Possibility to update several fields per call.    

Validation Rules for PATCH Method (projectId)

PATCH_001 - User is not authorised
ElementDetails
Scenario IDPATCH_001
Scenario NameUser is not authorised
HTTP Code403
GIVENUser needs to modify existing project
WHENCalling PATCH method of the API
BUTUser does NOT have permissions
THENAPI is not reached; 403 response is returned
Example Error Message“User is not authorised.”
PATCH_002 - Missing mandatory fields
ElementDetails
Scenario IDPATCH_002
Scenario NameMissing mandatory fields
HTTP Code422
GIVENUser needs to modify existing project
WHENCalling PATCH method of the API
BUTMandatory field is missing
THENData is not updated; 422 response is returned
Example Error Message“The {0} field is required.”
PATCH_003 - Invalid format of fields
ElementDetails
Scenario IDPATCH_003
Scenario NameInvalid format of fields
HTTP Code422
GIVENUser needs to modify existing project
WHENCalling PATCH method of the API
BUTField format is invalid
THENData is not updated; 422 response is returned
Example Error Message“Invalid date time format…” / “Error converting value {0} to type ‘{1}’…”
PATCH_004 - Unsatisfied model restrictions
ElementDetails
Scenario IDPATCH_004
Scenario NameUnsatisfied model restrictions
HTTP Code422
GIVENUser needs to modify existing project
WHENCalling PATCH method of the API
BUTField violates model restrictions
THENData is not updated; 422 response is returned
Example Error Message“The date must be between {0} and {1}” / “The field {0} must be a string with max length {1}”
PATCH_006 - Unknown projectId
ElementDetails
Scenario IDPATCH_006
Scenario NameUnknown projectId
HTTP Code404
GIVENUser needs to modify existing project
WHENCalling PATCH method of the API
BUTprojectId does not exist
THENData is not updated; 404 response is returned
Example Error Message“Project with ID {0} was not found within the company {1}.”
   

Sample Request

DELETE projects/123

   

Additional Parameters

The following parameters help to delete a project:

ParameterValueDescriptionData TypeDefault Value
companyIdoptionalSpecify if you wish to delete a project that exists in a specific company or client.stringempty

Limits & Notes

  • Change the status of a Project to “Closed”.
  • If you’re looking to update the project status to something other than “Closed”, you can use the PATCH endpoint.

   

Validation Rules for DELETE Method

DEL_001 - User is not authorised
ElementDetails
Scenario IDDEL_001
Scenario NameUser is not authorised
HTTP Code403
GIVENProject needs to be “Closed”
WHENCalling DELETE method of the API
BUTUser is not authorised
THENAPI is not reached; 403 response is returned
Example Error Message or Response“User is not authorised.”
DEL_002 - Missing required parameters
ElementDetails
Scenario IDDEL_002
Scenario NameMissing required parameters
HTTP Code405
GIVENProject needs to be “Closed”
WHENCalling DELETE method of the API
BUTRequired parameter is missing
THENAPI is not reached; 405 response is returned
Example Error Message or ResponseEmpty message
DEL_003 - Project does not exist
ElementDetails
Scenario IDDEL_003
Scenario NameProject does not exist
HTTP Code404
GIVENProject needs to be “Closed”
WHENCalling DELETE method of the API
BUTprojectId does not exist
THENNo deletion; 404 response is returned
Example Error Message or Response“Project with Id {0} was not found within company {1}”
DEL_004 - Project exists
ElementDetails
Scenario IDDEL_004
Scenario NameProject exists
HTTP Code200
GIVENProject needs to be “Closed”
WHENCalling DELETE method of the API
BUT
THENProject is “Closed”; 200 response is returned
Example Error Message or ResponseEmpty message

   

Best Practices

  • Use Swagger UI for testing and schema validation before production calls.
  • Handle error codes gracefully; implement retry/backoff according to global rate limits.
  • Always check for deprecation alerts on this endpoint version.
  • Validate projects before sending DELETE requests to avoid unintentional data loss.    

Action APIs


Query APIs (Read-Only)