Visma e-conomic OpenAPI (v22.0.0)

Download OpenAPI specification:Download

Changelog

Click to see changelog.
Version Description
22.0.0 Added LastUpdated property to Project Activities.
21.0.1 Updated descriptions for timeentry prices.
21.0.0 Added OtherReference property to Project endpoints.
20.0.1 Updated descriptions for model properties.
20.0.0 Customer contacts and delivery locations endpoints deprecated. You can find the same enpoints in Customers API
19.0.0 Page-based endpoints were moved under /paged url and cursor-based endpoints dropped the /all.
18.0.0 Added isDeleted flag to customer-contacts and included deleted contacts in the response.
Deleted contacts can be used for history purposes, but cannot be set as reference persons on sales documents.
In previous versions only customer-contacts/id returns deleted contacts as well.
17.0.2 TimeEntryEmployeeNumberCannotBeUpdated and MileageEmployeeNumberCannotBeUpdated error codes removed. The change affects all versions, but we bumped the version for transparency.
17.0.1 New custom OpenAPI extension added in the specification: x-error-codes. Existing x-required-roles extension converted to an array of strings.
17.0.0 Improved the error model. Added code and property fields to the model. code represents the error code. property is the field name on which the input validation failed.
16.4.0 customer-deliverylocations endpoints added.
16.3.0 customer-contacts endpoints added.
16.2.2 Added input validations for required string properties, if a string property is required it can't be empty, it should contain at least 1 character.
16.2.1 Error codes extended for mileages and timeentries. Affects all the exisiting versions.
16.2.0 - employeegroups DELETE endpoint added.
- employees DELETE endpoint added.
- project-employeegroups DELETE endpoint added.
- project-employees DELETE endpoint added.
16.1.0 Time entry prices and Mileage entry prices endpoints added.
16.0.0 Changed parameter schema for mileages and timeentries approve endpoints.
15.0.0 Added cost and sales accounts properties in activitygroups endpoints.
14.1.3 - Added new filter for IsAccessible in activities endpoints.
- Added new filter for IsBarred in costtypes endpoints.
14.1.2 - Added input validations for activitygroups.
- Updated description for projectgroups properties.
14.1.1 Added input validations for projectgroups.
14.1.0 project-employees-count endpoint added.
14.0.0 - project-activities endpoints added.
- projects/activities have been deprecated.
13.2.0 costtypegroups endpoints added.
13.1.0 costtypes endpoints added.
13.0.0 - projectgroups POST endpoint added, Number made non-required,
- activitygroups POST endpoint added, Number made non-required.
12.0.0 projects Number made non-required.
11.0.0 employees Number made required.
10.1.2 API version number moved to the server URL.
10.1.1 - activities employeeNumber maximum value changed to 999999.
- projects employeeNumber maximum value changed to 999999.
10.1.0 project-employees POST endpoint added.
10.0.0 - activities POST and PUT endpoints added.
- activitygroups GET endpoints added.
- Object version field added to activities, projectstatuses and projectgroups endpoints.
9.0.0 Project related settings for employee resource renamed as Project employee.
8.1.0 project-customers endpoints added.
8.0.0 - employeegroups endpoints added: GET all paginated, GET count, POST and PUT.
- project-employeegroups endpoints added: GET all paginated, GET all cursor-based, GET count, GET by number, POST and PUT.
- Object version field added to employee groups endpoints.
7.0.0 Projects related settings for employee extended with new fields for Name, GroupNumber and IsBarred.
6.0.0 Readonly property IsReconciled added to TimeEntries endpoint.
5.1.0 Project delete endpoint added.
5.0.0 - Project-related properties such as isUser, userId, canApprove, canInvoice, employeeType in /employees moved to /project-employees.
- Properties lastUpdated, costPrice, salesPrice and invoicedtotal in /projects changed to readonly.
- Property date in /timeentries changed to mandatory.
- Access permission to /employees changed to requiring access to Sales.
- PUT endpoints for /timeentries/{number}, /employees/{number}, /employeeprojectrelatedsettings/{number} have been deprecated and new ones without {number} in the URL have been added.
4.0.0 project.CustomerNumber made non-required, range check introduced.
3.1.0 Error messages of time entry approval improved, timeEntry.IsApproved, mileage.IsApproved and mileage.IncludeApproval made read-only.
3.0.0 mileage.Date made required. Verification for mileage.EmployeeNumber and mileage.Distance added.
2.2.2 Range check introduced in projects.Number, employee.Number and employeeGroup.Number.
2.2.1 Employees PATCH endpoint deprecated.
2.2.0 employeegroups/all and employeegroups/{number} endpoints added.
2.1.0 /activities/allowed endpoint added to get allowed activities for an employee and project.
2.0.0 Open API released! Endpoints related to Projects module added.

TL;DR

Add these three headers to your requests.

Header Value What is this?
X-AppSecretToken YOUR_PRIVATE_TOKEN This identifies your app. This is your secret token. Try using the value demo.
X-AgreementGrantToken YOUR_AGREEMENT_GRANT_TOKEN This identifies the grant issued by an agreement, to allow your app to access the agreements data. Try using the value demo.
Content-Type application/json We’re a JSON based API. This tells us that you agree with us on using JSON.

Optional headers:

Header Value What is this?
Idempotency-Key YOUR_IDEMPOTENCY_KEY This represents your own unique idempotency key. Enables you to make use of our Idempotency Tokens feature. You can't use this feature with GET requests.

Examples

jQuery

$.ajax({
    url: "https://apis.e-conomic.com/api/v22.0.0/projects",
    dataType: "json",
    headers: {
        'X-AppSecretToken': "demo",
        'X-AgreementGrantToken': "demo",
        'Content-Type': "application/json"
    },
    type: "GET"
})
    .always(function (data) {
    $("#output").text(JSON.stringify(data, null, 4));
});

cURL

curl -H "X-AppSecretToken: demo" -H "X-AgreementGrantToken: demo" https://apis.e-conomic.com/api/v22.0.0/projects

Introduction

Welcome to the Visma e-conomic OpenAPI documentation!

The e-conomic API is a document-based JSON REST API.

For more in-depth information about e-conomic itself, please have a look at the e-copedia http://wiki.e-conomic.dk.

Usage

Versioning

API releases are versioned using a three-part versioning scheme: {major version}.{minor version}.{patch version}.

We broadly follow Semantic Versioning principles when versioning the API. The major version number is incremented when a breaking change occurs.

The format is:

/api/v{major version}.{minor version}.{patch version}/{resource-name}

Each value of the above are integers and you should configure the specific version in each API call.

An example could be: /api/v2.2.1/projects

To track the changes of versions, please see our changelog.

We reserve the right to deprecate versions at intervals since this allows for moving into a friendly environment for you faster.

Demo authentication

If you wish to try out the API before registering a developer agreement, you can do this by using the demo agreement, which mimics the authentication flow you will have to use when you create your app. All you have to do is specify HTTP header tokens X-AgreementGrantToken: demo and X-AppSecretToken: demo. Note however that you can only do GET requests with the demo agreement. If you want full access to our API's, you will need to register.

Retrieving data

Our data is exposed as collections of items. Each item has many properties, with one property as a unique identifier, usually called number or id. You can always get a single item if you already know the unique identifier. In case the unique identifier is not known, you can always search the collection and retrieve an array of items that satisfy the search criteria, or retrieve only the count of items that satisfy the search criteria. When you search for items in a collection, you can always use filtering, sorting and pagination. When it comes to pagination, we offer two distinct approaches available on separate endpoints. You can read more about filtering, sorting and pagination in the following sections.

Filtering

Filtering is enabled on all collection endpoints but not on all properties.

Filtering on collections can be done using the query string parameter filter. A filter is made up of a set of predicates and follows a syntax inspired by mongoDB. A predicate is made up of a property name, an operator, and a value.

Example: ?filter=name$eq:Joe

This matches all resources with the value Joe in the property name.

Predicates can be chained using either of the logical operators AND and OR.

Example: ?filter=name$eq:Joe$and:city$like:*port

Filtering on strings is case insensitive.

Filterable properties

Information about what properties allow filtering and on what operators can be found in the property in the schema for the collection. Each property that allows filtering has the property "x-filterable" in combination with operators set. If you try to filter on something that isn’t allowed the server will respond with a status code 400.

Specifying Operator affinity

If you want to control the operator affinity then you can use parentheses.

An example is: ?filter=name$eq:Joe$and:(city$like:*port$or:age$lt:40)

URL Encoding

URL parameter values should always be URL compatible. Always URL encode filter strings.

Filter Operators

The possible filtering operators are:

Operator Syntax
Equals $eq:
Not equals $ne:
Greater than $gt:
Greater than or equal $gte:
Less than $lt:
Less than or equal $lte:
Substring match $like:
And also $and:
Or else $or:
In $in:
Not In $nin:

Substring matching

The $like: operator supports both using wildcards (*) and not using wildcards. If no wildcards are used, the expression is considered a contains expression and effectively becomes a filter with a wildcard at the start of the string and one at the end of the string. This operator is only allowed on some properties.

Escaping special characters in your filter

To not interfere with the parsing of the filter expression, certain escape sequences are necessary.

  • “$” is escaped with “$$”
  • “(” is escaped with “$(”
  • “)” is escaped with “$)”
  • “*” is escaped with “$*”
  • “,” is escaped with “$,”
  • “[” is escaped with “$[”
  • “]” is escaped with “$]”

Using null values in your filter

Should you want to filter for the nonexistence of a property (i.e. null value) you can use the null escape sequence.

$null:

Using in and not in operators

To determine whether a specified value matches any value in (or not in) a list you filter using the $in: or $nin: operator. The list to filter by has to be enclosed in brackets and values separated by commas.

customerNumber$in:[2,5,7,22,45]

It is possible to also use the $null: keyword if you wish to include that in the filter. The max supported length of an array using the $in: or $nin: operator is 200.

Sorting

Sorting on strings is case insensitive.

Sort ascending

Sorting on collections can be done using the query string parameter ‘sort’.

?sort=name

Sort descending

The default sort direction is ascending, but this can be turned by prepending a minus (-).

?sort=-name

Sort by multiple properties

If you need to sort by multiple properties these can just be separated by commas. Mixing of directions is allowed.

?sort=-name,age

Sort alphabetically

In certain cases, you might want to enforce that even numeric values are sorted alphabetically, so 1000 is less than 30. In those cases, you can prepend the sort property with a tilde (~).

?sort=~name

Sortable properties

Information about what properties are sortable can be found in the schema for the collection. Each property that allows sorting has the property "x-sortable": true set.

Pagination

When it comes to retrieving a collection of items, you can use two distinct approaches:

  • Cursor-based pagination (continued loading of items using a cursor as a query parameter to get the next page of items)

    • This is the recommended approach, and the one you should use by default.
    • The endpoint naming scheme is "Retrieve all Items". (Usage: /{ITEM}?cursor={CURSOR_VALUE})
  • Classic pagination (limited functionality*. Specify skippages and pagesize as query parameters to get a specific page of items)

    • You should only consider using classic pagination, if you rely on loading pages (i.e. for list views or table/grid-based UI's).
    • The endpoint naming scheme is "Retrieve a page of Items". (Usage: /{ITEM}/paged?skippages=0&pagesize=20)
      * It's important to note that there is a limit of 10.000 items using this approach. Any items outside of the first 10.000 items will not be loaded.

Please bear in mind that the two approaches are supported by separate endpoints. To use classic pagination, add /paged to your request URL.

If you need to know the total count of items that you can expect to get from your search, you can use a separate endpoint called "Retrieve the number of Items".
You can also use the result of this endpoint to calculate the pagination navigation buttons for a table/grid-based UI.

Which approach should you use?

We highly recommend that you use cursor-based pagination because:

  • It is more performant and offers much faster retrieval of items;
  • It can be used for very large collections of many thousands or millions of items, whereas classic pagination is limited to only returning 10.000 results, everything else is ignored;
    Classic pagination is only appropriate when you have an app with a table/grid-based UI.

Cursor-based pagination

How it works

When you search for items in a large collection, the response will contain the first 1.000 items and a cursor that you can use in a subsequent request to get the next series of items. This way you can retrieve the next set of items only when needed (if 1.000 items suffice, you don't need to send a second request).

Please note that the cursor is currently the id of the first item on the next set and it should not be mistaken for the number of items which are yet to be displayed. Also, if the cursor is not present in the response, it means that there are no more items in the results.

Real world example

I want to retrieve all projects.

  1. I send a request to https://apis.e-conomic.com/api/v22.0.0/projects and get back an array of 1.000 projects, and a cursor with value 34781

  2. I send a request for the next items in the resulting collection:
    https://apis.e-conomic.com/api/v22.0.0/projects?cursor=34781
    and get back an array of 1.000 projects and a cursor with value 87695

  3. I send a request for the next items in the result:
    https://apis.e-conomic.com/api/v22.0.0/projects?cursor=87695
    and get back an array of 56 items and no cursor.
    No cursor means I have retrieved all the projects, i.e. I have reached the end of the list.

Classic pagination

If no parameters are used, the collection endpoint returns 20 items at a time. URL parameters allow you to increase this to up to 100 items or to skip pages if necessary.

Real world example

I want to show a grid with page size of 50 and pagination navigation buttons.

  1. I send a request to see how many projects there are in the collection:
    https://apis.e-conomic.com/api/v22.0.0/projects/count
    I get the number of projects in the collection, 2056, and I can calculate the number of pages to be 2056 divided by 50 = 40 with 6 as remainder, meaning I have 41 pages total. I can then use this to present the user the navigation buttons.

  2. I send a request to retrieve the first page of projects that my user will see:
    https://apis.e-conomic.com/api/v22.0.0/projects/paged?pagesize=50&sort=name
    with this I get back an array of 50 projects, sorted alphabetically by the project name.

  3. Now if the user wants to see page number 6, I'll send a new request, skipping the first 5 pages to get the projects from page number 6:
    https://apis.e-conomic.com/api/v22.0.0/projects/paged?pagesize=50&skippages=5&sort=name
    I get back an array of 50 projects, that belong to page number 6 when sorting alphabetically by the project name.

Number of items in a collection

As mentioned before we offer endpoint to get the count of items in the collection. You can also use this info for calculation of pagination navigation in case of classic pagination.

Example https://apis.e-conomic.com/api/v22.0.0/projects/count

HTTP Status Codes

The Open API returns these HTTP status codes.

Code Text Description
200 OK Everything is OK
201 Created When you create resources, this is what you get. This will be accompanied by the created resource in the body and a location header with a link to the created resource.
204 No Content In certain cases there is nothing to return. So we will let you know by returning a 204.
400 Bad Request The request you made was somehow malformed. A malformed request could be failed validation on creation or updating. If you try to filter on something that isn’t filterable this is also what you’ll see. Whenever possible we will also try to include a developer hint to help you get around this issue.
401 Unauthorized The credentials you supplied us with weren’t correct, or perhaps you forgot them altogether. If an agreement has revoked the grant they gave your app, this is what you will see.
403 Forbidden You won’t necessarily have access to everything. So even though you were authorized we might still deny access to certain resources. This depends on the roles asked for when the grant was issued.
404 Not Found This is returned when you try to request something that doesn’t exist. This could be a resource that has been deleted or just a URL you tried to hack. If you see a lot of these, it could be an indication that you aren’t using the links provided by the API. You should never need to concatenate any URLs. The API should provide you with the links needed.
405 Method Not Allowed Not all endpoints support all HTTP methods. If you try issue a PUT request to a collection resource this is what you get.
415 Unsupported Media Type Our API is a JSON api. If you ask us to give you anything else, we give you this, and tell you why in the JSON body of the response.
500 Internal Server Error We don’t like to see these, and they are flagged in our logs. When you see this, something went wrong on our end. Either try again, or contact our support.

Required and Readonly Properties

Since OpenAPI allows client generation based on the specification, we decided to use the same model/schema in our for both read and write endpoints where possible.

This led us to chose not to have the Id/Number in the URL parameter for PUT requests, but to use the one from the body, so there is no confusion.

When a property is marked as required it means you need to provide a value on each POST and PUT requests.

When a property is marked as readonly it means you should provide the same value you get in the GET requests, or do not send the property in the JSON at all (skip it).

Custom resource encoding

For some resource ids (the direct URL path to a resource) the question of non-alphanumeric characters must be solved in REST APIs by either encoding or replacement to ensure URL compatibility.

In the e-conomic REST API a subset of non-alphanumeric characters are replaced using a custom scheme for resource URLs:

Character Replacement
“<” 0
“>” 1
“*” 2
“%” 3
“:” 4
“&” 5
“/” 6
“\” 7
“_” 8
“ ” (whitespace) 9
“?” 10
“.” 11
“#” 12
“+” 13

Example: Product “My Awesome Product_Discount5%” Resource URL (self): https://apis.e-conomic.com/products/My_9_Awesome_9_Product_8_Discount5_3_

All other non-alphanumeric characters in resource URLs are standard URL encoded. Please refer to standard URL encoding for characters not mentioned above.

Implementation specifics

Helpful details to know when implementing e-conomic REST.

Booleans

Booleans should only be expected to be represented in responses when true. A false boolean is omitted from response body. The same logic applies to write operations such as POST and PUT.

Null values

Null values are omitted from the response body.

Nulling

We do not generally accept null as a value and a validation exception should be expected. To null a property you must exclude it from your JSON on the write operation.

Object version

ObjectVersion is the mechanism that enforces updates only on latest state of an object. ObjectVersion property is mandatory in Put Requests. ObjectVersion property is retrieved on Get Request and needs to be included in Put Request. If object was modified between Get and Put requests, Put request will fail with error code 409 Conflict

{
  "message": "Update conflict. Version does not match.",
  "developerHint": "The resource has been updated by another user. Retrieve the resource/object and try the update again. This is needed in order to prevent you from rolling back another user's update.",
  "logId": "09580053-1141-4e7f-85e1-bed8600e0278",
  "logTimeUtc": "2021-11-04T09:07:56",
  "property": "version"
}

Idempotency tokens

Idempotency tokens are unique keys that help maintain the integrity of operations on the API’s. These tokens prevent accidental duplication of requests, ensuring that the same operation is not performed multiple times, even if the same request is sent repeatedly.

When making a request, you can set Idempotency-Key header with your own unique value for that specific request. In case of a network failure, if you don't get the response, you can retry the request with the same value for the header. Our system will prevent duplicate requests, instead you will get the original response from our cache.

Keep in mind that this is cached for only one hour window.

When we return a response from the cache, we set a response header X-ResultFromCache to true.

It’s important to note that you will be responsible for generating and keeping track of these keys.

The Idempotency Tokens feature is not available for GET requests.

Custom extensions in OpenAPI specification

In the specification file, there are some custom extensions that developers can make use of when consuming endpoints. Those extensions are always prefixed by x-.

  1. x-required-roles: The list of roles that are required for each group of endpoints.
  2. x-error-codes: The list of error codes that are potentially returned from each group of endpoints.

Activities

Activities provide the means to set custom prices for the time Employees spend working on a Project.

Examples of use cases:

  • Retrieve all activities.
  • Display the activities which allow time registration.

Related guide for users: e-copedia (Danish)

Click to see the list of possible error codes.
Error Code Description
ActivityNumberAlreadyExists Activity cannot be created since the given number already exists.
ActivityGroupNumberDoesNotExist Activity cannot be created or updated since the given group does not exist.
ActivityNameNullOrEmpty Activity cannot be created or updated since its name cannot be null or empty.

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve a page of Activities

Use this endpoint to load a page of Activities.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
groupNumber
required
integer <int32>

The number of the activity group that the activity belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

costPriceMarkupPercentage
number or null <double>

Property used to adjust the cost price of the time registered on the activity. The cost price of the time entry is calculated as follows: CostPrice = (employee costPrice + activity costPriceMarkupPercentage) x time entry numberOfHours.

Filterable: not filterable

Sortable: false

cutoffDate
string or null <date-time>

The date when the salesPriceBefore stops having effect and gets replaced with salesPriceAfter.

Filterable: not filterable

Sortable: false

hideInSearch
boolean

Flag indicating if an activity should be hidden from employees when they create a time entry in the e-conomic UI.

Filterable: not filterable

Sortable: false

inLieuCode
integer <int32>

If time in lieu is used, this defines which code the activity should utilize when registered upon.

Filterable: not filterable

Sortable: false

isAccessible
boolean

Flag indicating if time entries can be registered on the activity or not. It should be set to true if you want to be able to acess the activity.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesPriceAfter
number or null <double>

The price for a given activity to be applied after the CutOffDate. The activity sales price determines the sales price of a time entry - the time that an employee spends working on a project.

Filterable: not filterable

Sortable: false

salesPriceBefore
number or null <double>

The price for a given activity to be applied until the CutOffDate. The activity sales price determines the sales price of a time entry - the time that an employee spends working on a project.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Activities

Use this endpoint to retrieve all Activities in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (Activity)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Create a single Activity

Use this endpoint to create a single Activity.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
groupNumber
required
integer <int32>

The number of the activity group that the activity belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

costPriceMarkupPercentage
number or null <double>

Property used to adjust the cost price of the time registered on the activity. The cost price of the time entry is calculated as follows: CostPrice = (employee costPrice + activity costPriceMarkupPercentage) x time entry numberOfHours.

Filterable: not filterable

Sortable: false

cutoffDate
string or null <date-time>

The date when the salesPriceBefore stops having effect and gets replaced with salesPriceAfter.

Filterable: not filterable

Sortable: false

hideInSearch
boolean

Flag indicating if an activity should be hidden from employees when they create a time entry in the e-conomic UI.

Filterable: not filterable

Sortable: false

inLieuCode
integer <int32>

If time in lieu is used, this defines which code the activity should utilize when registered upon.

Filterable: not filterable

Sortable: false

isAccessible
boolean

Flag indicating if time entries can be registered on the activity or not. It should be set to true if you want to be able to acess the activity.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesPriceAfter
number or null <double>

The price for a given activity to be applied after the CutOffDate. The activity sales price determines the sales price of a time entry - the time that an employee spends working on a project.

Filterable: not filterable

Sortable: false

salesPriceBefore
number or null <double>

The price for a given activity to be applied until the CutOffDate. The activity sales price determines the sales price of a time entry - the time that an employee spends working on a project.

Filterable: not filterable

Sortable: false

Responses

Response Schema: application/json
number
integer <int32>

The identifier of the newly created entity

Read-only: true

Filterable: not filterable

Sortable: false

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome activity"
}

Response samples

Content type
application/json
{
  • "number": 0
}

Update a single Activity

Use this endpoint to update a single Activity.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
groupNumber
required
integer <int32>

The number of the activity group that the activity belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

costPriceMarkupPercentage
number or null <double>

Property used to adjust the cost price of the time registered on the activity. The cost price of the time entry is calculated as follows: CostPrice = (employee costPrice + activity costPriceMarkupPercentage) x time entry numberOfHours.

Filterable: not filterable

Sortable: false

cutoffDate
string or null <date-time>

The date when the salesPriceBefore stops having effect and gets replaced with salesPriceAfter.

Filterable: not filterable

Sortable: false

hideInSearch
boolean

Flag indicating if an activity should be hidden from employees when they create a time entry in the e-conomic UI.

Filterable: not filterable

Sortable: false

inLieuCode
integer <int32>

If time in lieu is used, this defines which code the activity should utilize when registered upon.

Filterable: not filterable

Sortable: false

isAccessible
boolean

Flag indicating if time entries can be registered on the activity or not. It should be set to true if you want to be able to acess the activity.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesPriceAfter
number or null <double>

The price for a given activity to be applied after the CutOffDate. The activity sales price determines the sales price of a time entry - the time that an employee spends working on a project.

Filterable: not filterable

Sortable: false

salesPriceBefore
number or null <double>

The price for a given activity to be applied until the CutOffDate. The activity sales price determines the sales price of a time entry - the time that an employee spends working on a project.

Filterable: not filterable

Sortable: false

Responses

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome activity"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve the number of Activities

Call this endpoint to get the number of Activities. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Retrieve single Activity

Use this endpoint to load a single Activity by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
groupNumber
required
integer <int32>

The number of the activity group that the activity belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

costPriceMarkupPercentage
number or null <double>

Property used to adjust the cost price of the time registered on the activity. The cost price of the time entry is calculated as follows: CostPrice = (employee costPrice + activity costPriceMarkupPercentage) x time entry numberOfHours.

Filterable: not filterable

Sortable: false

cutoffDate
string or null <date-time>

The date when the salesPriceBefore stops having effect and gets replaced with salesPriceAfter.

Filterable: not filterable

Sortable: false

hideInSearch
boolean

Flag indicating if an activity should be hidden from employees when they create a time entry in the e-conomic UI.

Filterable: not filterable

Sortable: false

inLieuCode
integer <int32>

If time in lieu is used, this defines which code the activity should utilize when registered upon.

Filterable: not filterable

Sortable: false

isAccessible
boolean

Flag indicating if time entries can be registered on the activity or not. It should be set to true if you want to be able to acess the activity.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesPriceAfter
number or null <double>

The price for a given activity to be applied after the CutOffDate. The activity sales price determines the sales price of a time entry - the time that an employee spends working on a project.

Filterable: not filterable

Sortable: false

salesPriceBefore
number or null <double>

The price for a given activity to be applied until the CutOffDate. The activity sales price determines the sales price of a time entry - the time that an employee spends working on a project.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome activity"
}

Retrieve allowed activities

Use this endpoint to get all the activities that the employee is allowed to register an entry on for a given project. Potential restrictions of registration are based on recording rules in the UI, which cannot be modified through the API. Add the employee number and project to your query parameter to obtain the allowed activities for registrations.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
employeeNumber
required
integer <int32> [ 1 .. 999999 ]

The employee number.

projectNumber
required
integer <int32> [ 1 .. 999999999 ]

The project number.

Responses

Response Schema:
Array
groupNumber
required
integer <int32>

The number of the activity group that the activity belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

costPriceMarkupPercentage
number or null <double>

Property used to adjust the cost price of the time registered on the activity. The cost price of the time entry is calculated as follows: CostPrice = (employee costPrice + activity costPriceMarkupPercentage) x time entry numberOfHours.

Filterable: not filterable

Sortable: false

cutoffDate
string or null <date-time>

The date when the salesPriceBefore stops having effect and gets replaced with salesPriceAfter.

Filterable: not filterable

Sortable: false

hideInSearch
boolean

Flag indicating if an activity should be hidden from employees when they create a time entry in the e-conomic UI.

Filterable: not filterable

Sortable: false

inLieuCode
integer <int32>

If time in lieu is used, this defines which code the activity should utilize when registered upon.

Filterable: not filterable

Sortable: false

isAccessible
boolean

Flag indicating if time entries can be registered on the activity or not. It should be set to true if you want to be able to acess the activity.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesPriceAfter
number or null <double>

The price for a given activity to be applied after the CutOffDate. The activity sales price determines the sales price of a time entry - the time that an employee spends working on a project.

Filterable: not filterable

Sortable: false

salesPriceBefore
number or null <double>

The price for a given activity to be applied until the CutOffDate. The activity sales price determines the sales price of a time entry - the time that an employee spends working on a project.

Filterable: not filterable

Sortable: false

Response samples

Content type
No sample

Activity Groups

Activity Groups allow for the classification of activities as:

  • productive, invoiceable,
  • productive, non-invoiceable or
  • unproductive.

Productive activities are activities with economic value.

The distinction between invoiceable and non-invoiceable is whether time entries registered on an activity are to be considered billable to the user's customer or not.

Additionally, activity groups determine if registrations on an activity should have an impact on the financial accounting or not.

Examples of use cases:

  • Retrieve all activity groups;
  • Display all activity groups when creating a new activity.

Related guide for users: e-copedia (Danish)

Click to see the list of possible error codes.
Error Code Description
ActivityGroupCannotBeCreatedUpdatedNumberAlreadyExists Activity group cannot be created since the given number already exists.
ActivityGroupCannotBeCreatedUpdatedCostDataInvalid Activity group cannot be created or updated. If includeCostPriceInFinance is true, then costAccountOngoingType, costAccountOngoing, costContraAccountOngoing and costAccountClosed are required, otherwise they should be ommited.
ActivityGroupCannotBeCreatedUpdatedSalesDataInvalid Activity group cannot be created or updated. If includeSalesPriceInFinance is true, then salesAccountOngoingType, salesAccountOngoing, salesContraAccountOngoing and salesAccountClosed are required, otherwise they should be ommited.
ActivityGroupCannotBeCreatedUpdatedAccountDoesNotExist Activity group cannot be created or updated. The account does not exist.
ActivityGroupCannotBeCreatedUpdatedAccountIsBarred Activity group cannot be created or updated. The account is barred.
ActivityGroupCannotBeCreatedUpdatedAccountIsOfWrongType Activity group cannot be created or updated. The type of the account needs to be either Balance or Profit & Loss.

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve single Activity Group

Use this endpoint to load a single Activity Group by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
name
required
string [ 0 .. 100 ] characters

The name of the activity group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: true

type
required
integer <int32>
Enum: 1 2 3

The activity group type determines whether a customer can be invoiced for the time entries registered on an activty or not.
Only activities that are part of a productive, invoiceable group support billable time entries.
Activity group types are:

  • 1: Productive, invoiceable
  • 2: Productive, non-invoiceable
  • 3: Unproductive - holidays, illness or administrative activities.

    Filterable: eq, ne

    Sortable: true

costAccountClosed
integer or null <int32>

The account number to register costs for closed activities.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoing
integer or null <int32>

The account number to register costs for ongoing activities.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.
Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for booking the revenue from ongoing activities:

  • 0: Debit
  • 1: Credit

If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

costContraAccountOngoing
integer or null <int32>

The contra account number to register costs for ongoing activities.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

includeCostPriceInFinance
boolean

Flag indicating if activity costs are to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

includeSalesPriceInFinance
boolean

Flag indicating if the activity revenue is to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The unique number of the activity group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesAccountClosed
integer or null <int32>

The account number to register revenue for closed activities.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoing
integer or null <int32>

The account number to register revenue for ongoing activities.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for revenue from ongoing activities:

  • 0: Debit
  • 1: Credit

If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

salesContraAccountOngoing
integer or null <int32>

The contra account number to register revenue for ongoing activities.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome activity group"
}

Retrieve a page of Activity Groups

Use this endpoint to load a page of Activity Groups.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
name
required
string [ 0 .. 100 ] characters

The name of the activity group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: true

type
required
integer <int32>
Enum: 1 2 3

The activity group type determines whether a customer can be invoiced for the time entries registered on an activty or not.
Only activities that are part of a productive, invoiceable group support billable time entries.
Activity group types are:

  • 1: Productive, invoiceable
  • 2: Productive, non-invoiceable
  • 3: Unproductive - holidays, illness or administrative activities.

    Filterable: eq, ne

    Sortable: true

costAccountClosed
integer or null <int32>

The account number to register costs for closed activities.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoing
integer or null <int32>

The account number to register costs for ongoing activities.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.
Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for booking the revenue from ongoing activities:

  • 0: Debit
  • 1: Credit

If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

costContraAccountOngoing
integer or null <int32>

The contra account number to register costs for ongoing activities.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

includeCostPriceInFinance
boolean

Flag indicating if activity costs are to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

includeSalesPriceInFinance
boolean

Flag indicating if the activity revenue is to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The unique number of the activity group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesAccountClosed
integer or null <int32>

The account number to register revenue for closed activities.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoing
integer or null <int32>

The account number to register revenue for ongoing activities.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for revenue from ongoing activities:

  • 0: Debit
  • 1: Credit

If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

salesContraAccountOngoing
integer or null <int32>

The contra account number to register revenue for ongoing activities.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Activity Groups

Use this endpoint to retrieve all Activity Groups in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (ActivityGroup)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Create a single Activity Group

Use this endpoint to create a single Activity Group.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
name
required
string [ 0 .. 100 ] characters

The name of the activity group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: true

type
required
integer <int32>
Enum: 1 2 3

The activity group type determines whether a customer can be invoiced for the time entries registered on an activty or not.
Only activities that are part of a productive, invoiceable group support billable time entries.
Activity group types are:

  • 1: Productive, invoiceable
  • 2: Productive, non-invoiceable
  • 3: Unproductive - holidays, illness or administrative activities.

    Filterable: eq, ne

    Sortable: true

costAccountClosed
integer or null <int32>

The account number to register costs for closed activities.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoing
integer or null <int32>

The account number to register costs for ongoing activities.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.
Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for booking the revenue from ongoing activities:

  • 0: Debit
  • 1: Credit

If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

costContraAccountOngoing
integer or null <int32>

The contra account number to register costs for ongoing activities.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

includeCostPriceInFinance
boolean

Flag indicating if activity costs are to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

includeSalesPriceInFinance
boolean

Flag indicating if the activity revenue is to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The unique number of the activity group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesAccountClosed
integer or null <int32>

The account number to register revenue for closed activities.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoing
integer or null <int32>

The account number to register revenue for ongoing activities.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for revenue from ongoing activities:

  • 0: Debit
  • 1: Credit

If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

salesContraAccountOngoing
integer or null <int32>

The contra account number to register revenue for ongoing activities.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Responses

Response Schema: application/json
number
integer <int32>

The identifier of the newly created entity

Read-only: true

Filterable: not filterable

Sortable: false

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome activity group"
}

Response samples

Content type
application/json
{
  • "number": 0
}

Retrieve the number of Activity Groups

Call this endpoint to get the number of Activity Groups. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Cost Type Groups

Cost type groups endpoints help distinguish between invoiceable and non-invoiceable cost types.

The difference between the two is that only expenses with invoiceable cost types can be transferred to an invoice.

Additionally, cost type groups determine the accounts where booked expenses go.

Example of use cases:

  • Retrieve information related to cost type groups.

Related guide for users: e-copedia (Danish)

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve single Cost Type Group

Use this endpoint to load a single Cost Type Group by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
accountClosed
required
integer <int32>

The account number to register costs for closed projects.

Filterable: not filterable

Sortable: true

accountOnGoing
required
integer <int32>

The account number to register ongoing costs.

Filterable: not filterable

Sortable: true

name
required
string [ 0 .. 100 ] characters

The name of the cost type group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: true

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the cost type group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

type
required
integer <int32>
Enum: 1 2

The cost group type determines whether customers can be invoiced for expenses or not.
Only expenses with cost prices associated with an invoiceable cost group are billable.
Cost group types:

  • 1: Invoiceable
  • 2: Non-invoiceable

    Filterable: not filterable

    Sortable: false

markup
number or null <double>

The difference in percentage between the sales price and the cost price.

Filterable: not filterable

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome cost type group"
}

Retrieve a page of Cost Type Groups

Use this endpoint to load a page of Cost Type Groups.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
accountClosed
required
integer <int32>

The account number to register costs for closed projects.

Filterable: not filterable

Sortable: true

accountOnGoing
required
integer <int32>

The account number to register ongoing costs.

Filterable: not filterable

Sortable: true

name
required
string [ 0 .. 100 ] characters

The name of the cost type group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: true

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the cost type group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

type
required
integer <int32>
Enum: 1 2

The cost group type determines whether customers can be invoiced for expenses or not.
Only expenses with cost prices associated with an invoiceable cost group are billable.
Cost group types:

  • 1: Invoiceable
  • 2: Non-invoiceable

    Filterable: not filterable

    Sortable: false

markup
number or null <double>

The difference in percentage between the sales price and the cost price.

Filterable: not filterable

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Cost Type Groups

Use this endpoint to retrieve all Cost Type Groups in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (CostTypeGroup)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Retrieve the number of Cost Type Groups

Call this endpoint to get the number of Cost Type Groups. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Cost Types

Cost types endpoints help create expenses.

They determine whether an expense is invoiceable - through the cost type group assigned to the cost type - and the VAT code that's going to be applied.

Example of use cases:

  • Retrieve all cost types;
  • Display all cost types when creating an expense.

Related guide for users: e-copedia (Danish)

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve single Cost Type

Use this endpoint to load a single Cost Type by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
costGroupNumber
required
integer <int32>

The number of the cost type group that the cost type belongs to.

Filterable: not filterable

Sortable: true

name
required
string [ 0 .. 100 ] characters

The name of the cost type.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: true

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the cost type.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

isBarred
boolean

Flag indicating if the cost type can be used to create expenses or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

lastUpdated
string <date-time>

The date when the cost type was last updated.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

vatCode
string or null

The code for the Vat that's going to be applied to expenses.

Filterable: not filterable

Sortable: true

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome cost type"
}

Retrieve a page of Cost Types

Use this endpoint to load a page of Cost Types.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
costGroupNumber
required
integer <int32>

The number of the cost type group that the cost type belongs to.

Filterable: not filterable

Sortable: true

name
required
string [ 0 .. 100 ] characters

The name of the cost type.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: true

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the cost type.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

isBarred
boolean

Flag indicating if the cost type can be used to create expenses or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

lastUpdated
string <date-time>

The date when the cost type was last updated.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

vatCode
string or null

The code for the Vat that's going to be applied to expenses.

Filterable: not filterable

Sortable: true

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Cost Types

Use this endpoint to retrieve all Cost Types in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (CostType)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Retrieve the number of Cost Types

Call this endpoint to get the number of Cost Types. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Mileage entries

Mileage entries are the registration of project-related mileages by Employees on Projects.
Until they are approved, mileages are only considered drafts and can be edited or deleted.

Examples of use cases:

  • Create mileage entries;
  • Retrieve all mileages registered on a project;
  • Approve the mileages that meet all requirements (e.g. mileage date is within a valid accounting year and there is no recording rule to prevent registration on the selected project)

Related guide for users: e-copedia (Danish)

Click to see the list of possible error codes.
Error Code Description
MileageIsNotFound Mileage entry was not found.
MileageIsAlreadyApproved Mileage entry is already approved.
MileageOnBarredProjectCannotBeApproved Mileage entry cannot be approved since the project has been barred.
MileageCannotBeUpdatedAlreadyApproved Mileage entry cannot be updated or deleted since it is approved.
MileageIsNotInAccountingPeriod Mileage entry is not in a valid accounting period.
MileageAccountingPeriodIsBarredOrClosed Mileage entry is in an invalid (closed or barred) accounting period.
MileageAccountingPeriodIsClosed Mileage entry is in a closed accounting period.
MileageNumberListCannotBeEmpty List of mileage entries cannot be empty.
MileageApprovalFailedBaseCurrencyIsNotSet Mileage entry cannot be approved since the company base currency has not been set.
MileageCannotBeCreatedUpdatedDateIsNotSet Mileage entry cannot be created or updated, date must be set and be greater than minimum date.
MileageCannotBeCreatedUpdatedDateIsNotInAccountingPeriod Mileage entry cannot be created or updated, its date is not in an existing accounting period.
MileageCannotBeCreatedUpdatedDateIsInClosedBarredAccountingPeriod Mileage entry cannot be created or updated, its date is in a closed or barred accounting period.
MileageSetupCannotBeCreatedUpdatedCostAccountNotExists Mileage setup cannot be created or updated, cost account ongoing does not exist.
MileageSetupCannotBeCreatedUpdatedContraAccountNotExists Mileage setup cannot be created or updated, contra account ongoing does not exist.
MileageSetupCannotBeCreatedUpdatedCostAccountClosedNotExists Mileage setup cannot be created or updated, cost account closed does not exist.
EmployeeHasNoAccessToProject Employee has no access to the provided project.
EmployeeHasNoAccessToActivity Employee has no access to the provided activity.
EntriesNotAllowedProjectNotFound Entries not allowed on an inexistent project.
EntriesNotAllowedProjectIsMain Entries not allowed on a main project.
EntriesNotAllowedProjectIsClosed Entries not allowed on a closed project.
EntriesNotAllowedProjectIsBarred Entries not allowed on a barred project.
EntriesNotAllowedEmployeeNotFound Entries not allowed because the given employee was not found.
EntriesNotAllowedEmployeeIsBarred Entries not allowed because the given employee is barred.
CannotBeApprovedEmployeeNotFound Entry cannot be approved since employee was not found.
CannotBeApprovedEmployeeIsBarred Entry cannot be approved since employee is barred.
CannotBeApprovedActivityNotFound Entry cannot be approved since activity was not found.
CannotBeApprovedActivityIsBarred Entry cannot be approved since activity is barred.
CannotBeApprovedForCompletedActivity Entry cannot be approved since the activity is completed or hasn't started yet.
CannotBeApprovedActivityNotPartOfProject Entry cannot be approved since the activity is not part of the project.

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve single Mileage entry

Use this endpoint to load a single Mileage entry by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
date
required
string <date-time>

The date of the travel for which the mileage entry is created.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

distance
required
number <double>

The distance of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

employeeNumber
required
integer <int32>

The number of the employee that the mileage entry is to be registered for.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the mileage entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

from
string or null

The starting place of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

includeApprove
boolean

By default it is true, so a user with rights will be able to approve. Once it is approved, the field becomes false and it will be impossible to approve ever again.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isApproved
boolean

Flag indicating if the mileage entry has been approved or not. If it has been approved, it cannot be updated anymore.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The unique number of the project mileage entry.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

to
string or null

The destination of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome mileage"
}

Delete single Mileage entry

Use this endpoint to delete a single Mileage entry by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve a page of Mileage entries

Use this endpoint to load a page of Mileage entries.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
date
required
string <date-time>

The date of the travel for which the mileage entry is created.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

distance
required
number <double>

The distance of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

employeeNumber
required
integer <int32>

The number of the employee that the mileage entry is to be registered for.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the mileage entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

from
string or null

The starting place of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

includeApprove
boolean

By default it is true, so a user with rights will be able to approve. Once it is approved, the field becomes false and it will be impossible to approve ever again.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isApproved
boolean

Flag indicating if the mileage entry has been approved or not. If it has been approved, it cannot be updated anymore.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The unique number of the project mileage entry.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

to
string or null

The destination of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Mileage entries

Use this endpoint to retrieve all Mileage entries in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (Mileage)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Create a single Mileage entry

Use this endpoint to create a single Mileage entry.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
date
required
string <date-time>

The date of the travel for which the mileage entry is created.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

distance
required
number <double>

The distance of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

employeeNumber
required
integer <int32>

The number of the employee that the mileage entry is to be registered for.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the mileage entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

from
string or null

The starting place of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

to
string or null

The destination of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

Responses

Response Schema: application/json
number
integer <int32>

The identifier of the newly created entity

Read-only: true

Filterable: not filterable

Sortable: false

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome mileage"
}

Response samples

Content type
application/json
{
  • "number": 0
}

Update a single Mileage entry

Use this endpoint to update a single Mileage entry.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
date
required
string <date-time>

The date of the travel for which the mileage entry is created.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

distance
required
number <double>

The distance of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

employeeNumber
required
integer <int32>

The number of the employee that the mileage entry is to be registered for.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the mileage entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

from
string or null

The starting place of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

to
string or null

The destination of the travel for which the mileage entry is created.

Filterable: not filterable

Sortable: false

Responses

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome mileage"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve the number of Mileage entries

Call this endpoint to get the number of Mileage entries. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Approve a list of Mileage entries

Use this endpoint to approve a list of Mileage entries.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
numbers
required
Array of integers <int32> [ items <int32 > ]

The numbers of the mileage entries that are to be approved.

Filterable: not filterable

Sortable: false

Responses

Request samples

Content type
{
  • "numbers": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Mileage entry prices

Mileage prices endpoints extend Mileages with prices.
A mileage entry cost or sales price is calculated by multiplying the mileage cost or sales rate respectively by the number of kilometers.
The mileage cost or sales rate is provided by the mileage setup.

Examples of use cases:

  • Retrieve cost and sales prices and rates.

Related guide for users: e-copedia (Danish)

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve single Mileage entry prices

Use this endpoint to load a single Mileage entry prices by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
costPrice
number or null <double>

The total cost of the travel, calculated as follows: CostPrice = CostRate x distance.

Read-only: true

Filterable: not filterable

Sortable: false

costRate
number or null <double>

The cost price per mile of travel, provided by the mileage setup.

Read-only: true

Filterable: not filterable

Sortable: false

number
integer <int32>

The mileage entry unique identifier.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

salesPrice
number or null <double>

The total sales price of the travel, calculated as follows: SalesPrice = SalesRate x distance.

Read-only: true

Filterable: not filterable

Sortable: false

salesRate
number or null <double>

The sales price per mile of travel, provided by the mileage setup.

Read-only: true

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome mileage price"
}

Retrieve a page of Mileage entry prices

Use this endpoint to load a page of Mileage entry prices.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
costPrice
number or null <double>

The total cost of the travel, calculated as follows: CostPrice = CostRate x distance.

Read-only: true

Filterable: not filterable

Sortable: false

costRate
number or null <double>

The cost price per mile of travel, provided by the mileage setup.

Read-only: true

Filterable: not filterable

Sortable: false

number
integer <int32>

The mileage entry unique identifier.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

salesPrice
number or null <double>

The total sales price of the travel, calculated as follows: SalesPrice = SalesRate x distance.

Read-only: true

Filterable: not filterable

Sortable: false

salesRate
number or null <double>

The sales price per mile of travel, provided by the mileage setup.

Read-only: true

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Mileage entry prices

Use this endpoint to retrieve all Mileage entry prices in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (MileagePrices)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Project Activities

Project-activities endpoints describe the relationship between projects and activities.

Their main purpose is to determine the period for which users can register time on a given Project and a given Activity.

By default, if there are no activities linked to a project, employees can register time on any activity.

Examples of use cases:

  • Retrieve all project activities;
  • Display all the activities related to a project in order to determine the activities which allow the creation of time entries.

Related guide for users: e-copedia (Danish)

Click to see the list of possible error codes.
Error Code Description
ProjectActivityCannotBeCreatedProjectNotFound Project activity entry cannot be created, the given project was not found.
ProjectActivityCannotBeCreatedActivityNotFound Project activity entry cannot be created, the given activity was not found.
ProjectActivityCannotBeCreatedActivityAlreadyExists Project activity entry cannot be created, the activity already exists on the given project.
ProjectActivityCannotBeCreatedActivityIsBarred Project activity entry cannot be created, the given activity is barred.
ProjectActivityCannotBeCreatedUpdatedInvalidDates Project activity entry cannot be created or updated, the start date must be before the end date.
ProjectActivityCannotBeCreatedProjectIsMain Project activity entry cannot be registered on a main project.
ProjectActivityCannotBeCreatedProjectIsClosed Project activity entry cannot be registered on a closed project.
ProjectActivityCannotBeCreatedProjectIsBarred Project activity entry cannot be registered on a barred project.
ProjectActivityCannotBeUpdatedReadonlyProperties Project activity entry cannot be updated, cannot modify readonly properties.
EntriesNotAllowedEmployeeNotFound Entries not allowed because the given employee was not found.
EntriesNotAllowedEmployeeIsBarred Entries not allowed because the given employee is barred.

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve a page of Project Activities

Use this endpoint to load a page of Project Activities.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
activityNumber
required
integer <int32>

The number of the activity that is linked to the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the activity is linked to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

completed
boolean

Flag indicating if a project activity is still ongoing or if it's completed. Time registration on completed activities is not possible.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

endDate
string or null <date-time>

The date when time registration on the project activity stops being allowed.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

lastUpdated
string or null <date-time>

The date and time when the project activity entry was last updated. Use it in the filter to retrieve only updated entries.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The system unique number of the project activity entry. This property is not visible in the UI.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

responsibleEmployeeNumber
integer or null <int32>

The number of the employee that is responsible for the project activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

startDate
string or null <date-time>

The date when time registration on the project activity starts being allowed.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Project Activities

Use this endpoint to retrieve all Project Activities in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (ProjectActivity)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Create a single Project Activity

Use this endpoint to create a single Project Activity.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
activityNumber
required
integer <int32>

The number of the activity that is linked to the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the activity is linked to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

completed
boolean

Flag indicating if a project activity is still ongoing or if it's completed. Time registration on completed activities is not possible.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

endDate
string or null <date-time>

The date when time registration on the project activity stops being allowed.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The system unique number of the project activity entry. This property is not visible in the UI.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

responsibleEmployeeNumber
integer or null <int32>

The number of the employee that is responsible for the project activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

startDate
string or null <date-time>

The date when time registration on the project activity starts being allowed.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

Responses

Response Schema: application/json
number
integer <int32>

The identifier of the newly created entity

Read-only: true

Filterable: not filterable

Sortable: false

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome project activity"
}

Response samples

Content type
application/json
{
  • "number": 0
}

Update a single Project Activity

Use this endpoint to update a single Project Activity.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
activityNumber
required
integer <int32>

The number of the activity that is linked to the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the activity is linked to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

completed
boolean

Flag indicating if a project activity is still ongoing or if it's completed. Time registration on completed activities is not possible.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

endDate
string or null <date-time>

The date when time registration on the project activity stops being allowed.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The system unique number of the project activity entry. This property is not visible in the UI.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

responsibleEmployeeNumber
integer or null <int32>

The number of the employee that is responsible for the project activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

startDate
string or null <date-time>

The date when time registration on the project activity starts being allowed.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

Responses

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome project activity"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve single Project Activity

Use this endpoint to load a single Project Activity by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
activityNumber
required
integer <int32>

The number of the activity that is linked to the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the activity is linked to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

completed
boolean

Flag indicating if a project activity is still ongoing or if it's completed. Time registration on completed activities is not possible.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

endDate
string or null <date-time>

The date when time registration on the project activity stops being allowed.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

lastUpdated
string or null <date-time>

The date and time when the project activity entry was last updated. Use it in the filter to retrieve only updated entries.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The system unique number of the project activity entry. This property is not visible in the UI.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

responsibleEmployeeNumber
integer or null <int32>

The number of the employee that is responsible for the project activity.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

startDate
string or null <date-time>

The date when time registration on the project activity starts being allowed.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome project activity"
}

Delete single Project Activity

Use this endpoint to delete a single Project Activity by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve the number of Project Activities

Call this endpoint to get the number of Project Activities. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Project Customers

Project-customers endpoints return a list of all the existing customers that can be used within Projects.

Examples of use cases:

  • Retrieve all available customers;
  • Display all customers when creating a new project.

Related guide for users: e-copedia (Danish)

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve single Project Customer

Use this endpoint to load a single Project Customer by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
name
required
string [ 0 .. 255 ] characters

The name of the customer.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: true

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the customer.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome customer"
}

Retrieve a page of Project Customers

Use this endpoint to load a page of Project Customers.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
name
required
string [ 0 .. 255 ] characters

The name of the customer.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: true

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the customer.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Project Customers

Use this endpoint to retrieve all Project Customers in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (ProjectCustomer)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Retrieve the number of Project Customers

Call this endpoint to get the number of Project Customers. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Project employee groups

Project-employee Groups help distinguish between various categories of employees.

Note that Employeegroups and Project-employeegroups return the same data, the only difference between the two is that one requires access to the Sales module and the other one to the Projects module.

Examples of use cases:

  • Retrieve all employee groups;
  • Display all employee groups when creating a new employee.

Related guide for users: e-copedia (Danish)

Click to see the list of possible error codes.
Error Code Description
EmployeeGroupNumberAlreadyExists Employee group cannot be created since the given number already exists.
ERROR_BOUNDCOWORKERACCOUNTCOWORKERINCHOSENGROUP The employee group contains one or more employees.

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve all Project employee groups

Use this endpoint to retrieve all Project employee groups in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (ProjectEmployeeGroup)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Create a single Project employee group

Use this endpoint to create a single Project employee group.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
name
required
string [ 0 .. 100 ] characters

The name of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Responses

Response Schema: application/json
number
integer <int32>

The identifier of the newly created entity

Read-only: true

Filterable: not filterable

Sortable: false

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome employee group"
}

Response samples

Content type
application/json
{
  • "number": 0
}

Update a single Project employee group

Use this endpoint to update a single Project employee group.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
name
required
string [ 0 .. 100 ] characters

The name of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Responses

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome employee group"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve single Project employee group

Use this endpoint to load a single Project employee group by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
name
required
string [ 0 .. 100 ] characters

The name of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome employee group"
}

Delete single Project employee group

Use this endpoint to delete a single Project employee group by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve a page of Project employee groups

Use this endpoint to load a page of Project employee groups.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
name
required
string [ 0 .. 100 ] characters

The name of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve the number of Project employee groups

Call this endpoint to get the number of Project employee groups. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Project employees

Project-employees endpoints provide project-related information about employees.

Employees can also be users in the system, but only if they are created via the UI Projects/ Employees section and the employee type is not 0.
Sometimes the employee type can be 0 even if IsUser is true, but only if an user is created via All Settings and then linked to an employee.

Examples of use cases:

  • Retrieve all employees who have a certain name;
  • Display all those employees when registering a time entry.

Related guide for users: e-copedia (Danish)

Click to see the list of possible error codes.
Error Code Description
EmployeeCannotBeCreatedUpdatedNumberAlreadyExists Employee cannot be created since the given number already exists.
EmployeeCannotBeCreatedUpdatedGroupNotFound Employee cannot be created or updated since the given employee group was not found.
EmployeeCannotBeCreatedUpdatedNameNullOrEmpty Employee cannot be created or updated since employee name cannot be null or empty.
ERROR_BOUNDCOWORKERTHEREISNUMBEROFPOSTSONDRAFTS Finance vouchers exist for the selected employee.
ERROR_BOUNDCOWORKERACCOUNTNUMBEROFTIMEREGISTERINGONCOWORKER There is/are time entry(ies) for the selected employee.
ERROR_BOUNDCOWORKERACCOUNTNUMBEROFEXPENSEREGISTERINGONCOWORKER There is/are expense entry(ies) for the selected employee.
ERROR_BOUNDCOWORKERACCOUNTNUMBEROFMILEAGEENTRIESONCOWORKER There is/are milage entry(ies) for the selected employee.
ERROR_BOUNDCOWORKERACCOUNTCOWORKERRESPONSIBLENUMBEROFCASES The employee is responsible for project(s).
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISBOUNDEDTOUSERSACCESSOFTIMEREGISTERING The employee is linked to a user's access to time recording.
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISSALESMANFORNUMBEROFDEBITORS The employee is a sales representative for customer(s).
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISOURREFFORNUMBEROFCREDITORS The employee is linked to supplier(s).
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISSALESMANFORNUMBEROFINVOICES The employee is a sales representative for invoice(s).
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISSALESMANFORNUMBEROFDRAFTS The employee is a sales representative for draft invoice(s).
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISREFMANFORNUMBEROFPURCHASEORDERS The employee is linked to purchase order(s).

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve all Project employees

Use this endpoint to retrieve all Project employees in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (ProjectEmployee)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Create a single Project employee

Use this endpoint to create a single Project employee.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
canApprove
required
boolean

Flag indicating if the employee can approve entries on a project.

Filterable: not filterable

Sortable: false

canInvoice
required
boolean

Flag indicating if the employee can take mileage or time entries to the invoice process.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

groupNumber
required
integer <int32>

The number of the employee group that the employee belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

isBarred
required
boolean

Flag indicating if the employee can be registered on or is barred.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999 ]

The unique number of the project employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

address
string or null [ 0 .. 100 ] characters

The address of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

city
string or null [ 0 .. 50 ] characters

The city of residence of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costPriceAfter
number or null <double>

The cost price that is to be applied after the CutOffDate.
The employee cost price determines the cost price of a time entry, which can be adjusted with the CostPriceMarkupPercentage set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

costPriceBefore
number or null <double>

The cost price that is to be applied until the CutOffDate.
The employee cost price determines the cost price of a time entry, which can be adjusted with the CostPriceMarkupPercentage set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

cutOffDate
string or null <date>

The date when the costPriceBefore and salesPriceBefore stop having effect and get replaced with costPriceAfter and salesPriceAfter. It can be null if only salesPriceBefore should apply.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesPriceAfter
number or null <double>

The sales price that is to be applied after the CutOffDate.
The employee sales price determines the sales price of a time entry, provided that there is no price set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

salesPriceBefore
number or null <double>

The sales price that is to be applied until the CutOffDate.
The employee sales price determines the sales price of a time entry, provided that there is no price set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

zipCode
string or null [ 0 .. 50 ] characters

The employee's zip code.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Responses

Response Schema: application/json
number
integer <int32>

The identifier of the newly created entity

Read-only: true

Filterable: not filterable

Sortable: false

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome project employee"
}

Response samples

Content type
application/json
{
  • "number": 0
}

Update a single Project employee

Use this endpoint to update a single Project employee.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
canApprove
required
boolean

Flag indicating if the employee can approve entries on a project.

Filterable: not filterable

Sortable: false

canInvoice
required
boolean

Flag indicating if the employee can take mileage or time entries to the invoice process.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

groupNumber
required
integer <int32>

The number of the employee group that the employee belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

isBarred
required
boolean

Flag indicating if the employee can be registered on or is barred.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999 ]

The unique number of the project employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

address
string or null [ 0 .. 100 ] characters

The address of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

city
string or null [ 0 .. 50 ] characters

The city of residence of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costPriceAfter
number or null <double>

The cost price that is to be applied after the CutOffDate.
The employee cost price determines the cost price of a time entry, which can be adjusted with the CostPriceMarkupPercentage set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

costPriceBefore
number or null <double>

The cost price that is to be applied until the CutOffDate.
The employee cost price determines the cost price of a time entry, which can be adjusted with the CostPriceMarkupPercentage set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

cutOffDate
string or null <date>

The date when the costPriceBefore and salesPriceBefore stop having effect and get replaced with costPriceAfter and salesPriceAfter. It can be null if only salesPriceBefore should apply.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesPriceAfter
number or null <double>

The sales price that is to be applied after the CutOffDate.
The employee sales price determines the sales price of a time entry, provided that there is no price set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

salesPriceBefore
number or null <double>

The sales price that is to be applied until the CutOffDate.
The employee sales price determines the sales price of a time entry, provided that there is no price set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

zipCode
string or null [ 0 .. 50 ] characters

The employee's zip code.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Responses

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome project employee"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve the number of Project employees

Call this endpoint to get the number of Project employees. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Retrieve a page of Project employees

Use this endpoint to load a page of Project employees.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
canApprove
required
boolean

Flag indicating if the employee can approve entries on a project.

Filterable: not filterable

Sortable: false

canInvoice
required
boolean

Flag indicating if the employee can take mileage or time entries to the invoice process.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

groupNumber
required
integer <int32>

The number of the employee group that the employee belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

isBarred
required
boolean

Flag indicating if the employee can be registered on or is barred.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999 ]

The unique number of the project employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

address
string or null [ 0 .. 100 ] characters

The address of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

city
string or null [ 0 .. 50 ] characters

The city of residence of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costPriceAfter
number or null <double>

The cost price that is to be applied after the CutOffDate.
The employee cost price determines the cost price of a time entry, which can be adjusted with the CostPriceMarkupPercentage set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

costPriceBefore
number or null <double>

The cost price that is to be applied until the CutOffDate.
The employee cost price determines the cost price of a time entry, which can be adjusted with the CostPriceMarkupPercentage set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

cutOffDate
string or null <date>

The date when the costPriceBefore and salesPriceBefore stop having effect and get replaced with costPriceAfter and salesPriceAfter. It can be null if only salesPriceBefore should apply.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: true

employeeType
integer <int32>
Enum: 0 1 2 3

Employee types:

  • 0: Not a user in e-conomic
  • 1: Time Logger
  • 2: Project Manager
  • 3: Mobile Time Logger

    Read-only: true

    Filterable: eq, ne

    Sortable: false

isUser
boolean

Flag indicating if the employee is also a user.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesPriceAfter
number or null <double>

The sales price that is to be applied after the CutOffDate.
The employee sales price determines the sales price of a time entry, provided that there is no price set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

salesPriceBefore
number or null <double>

The sales price that is to be applied until the CutOffDate.
The employee sales price determines the sales price of a time entry, provided that there is no price set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

userId
string or null

The id of the user that the employee is linked to. It is null if the employee is not linked to any user.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

zipCode
string or null [ 0 .. 50 ] characters

The employee's zip code.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve single Project employee

Use this endpoint to load a single Project employee by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
canApprove
required
boolean

Flag indicating if the employee can approve entries on a project.

Filterable: not filterable

Sortable: false

canInvoice
required
boolean

Flag indicating if the employee can take mileage or time entries to the invoice process.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

groupNumber
required
integer <int32>

The number of the employee group that the employee belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

isBarred
required
boolean

Flag indicating if the employee can be registered on or is barred.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999 ]

The unique number of the project employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

address
string or null [ 0 .. 100 ] characters

The address of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

city
string or null [ 0 .. 50 ] characters

The city of residence of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costPriceAfter
number or null <double>

The cost price that is to be applied after the CutOffDate.
The employee cost price determines the cost price of a time entry, which can be adjusted with the CostPriceMarkupPercentage set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

costPriceBefore
number or null <double>

The cost price that is to be applied until the CutOffDate.
The employee cost price determines the cost price of a time entry, which can be adjusted with the CostPriceMarkupPercentage set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

cutOffDate
string or null <date>

The date when the costPriceBefore and salesPriceBefore stop having effect and get replaced with costPriceAfter and salesPriceAfter. It can be null if only salesPriceBefore should apply.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: true

employeeType
integer <int32>
Enum: 0 1 2 3

Employee types:

  • 0: Not a user in e-conomic
  • 1: Time Logger
  • 2: Project Manager
  • 3: Mobile Time Logger

    Read-only: true

    Filterable: eq, ne

    Sortable: false

isUser
boolean

Flag indicating if the employee is also a user.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesPriceAfter
number or null <double>

The sales price that is to be applied after the CutOffDate.
The employee sales price determines the sales price of a time entry, provided that there is no price set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

salesPriceBefore
number or null <double>

The sales price that is to be applied until the CutOffDate.
The employee sales price determines the sales price of a time entry, provided that there is no price set on the activity specified on the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

userId
string or null

The id of the user that the employee is linked to. It is null if the employee is not linked to any user.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

zipCode
string or null [ 0 .. 50 ] characters

The employee's zip code.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome project employee"
}

Delete single Project employee

Use this endpoint to delete a single Project employee by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Project Groups

Project Groups allow projects to be classified as:

  • Internal
  • External, invoiceable or
  • External, non-invoiceable

Internal projects are only for internal use, whereas external projects are for other companies and therefore need to be assigned a customer.

The distinction between invoiceable and non-invoiceable is whether the costs registered on a project are to be considered billable to the user's customer or not.

Additionally, project groups determine whether registrations on a project should have an impact on the financial accounting or not.

Examples of use cases:

  • Retrieve all project groups;
  • Display the available project groups when creating a new project.

Related guide for users: e-copedia (Danish)

Click to see the list of possible error codes.
Error Code Description
ProjectGroupCannotBeCreatedUpdatedNumberAlreadyExists Project group cannot be created since the given number already exists.
ProjectGroupCannotBeCreatedUpdatedCostDataInvalid Project group cannot be created or updated. If includeCostPriceInFinance is true, then costAccountOngoingType, costAccountOngoing, costContraAccountOngoing and costAccountClosed are required, otherwise they should be ommited.
ProjectGroupCannotBeCreatedUpdatedSalesDataInvalid Project group cannot be created or updated. If includeSalesPriceInFinance is true, then salesAccountOngoingType, salesAccountOngoing, salesContraAccountOngoing and salesAccountClosed are required, otherwise they should be ommited.
ProjectGroupCannotBeCreatedUpdatedAccountDoesNotExist Project group cannot be created or updated. The account does not exist.
ProjectGroupCannotBeCreatedUpdatedAccountIsBarred Project group cannot be created or updated. The account is barred.
ProjectGroupCannotBeCreatedUpdatedAccountIsOfWrongType Project group cannot be created or updated. The type of the account needs to be either Balance or Profit & Loss.

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve a page of Project Groups

Use this endpoint to load a page of Project Groups.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
name
required
string [ 0 .. 100 ] characters

The name of the project group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

type
required
integer <int32>
Enum: 1 2 3

The project group type determines whether a customer can be invoiced for the costs (time entries, mileage entries, expenses) registered on a project or not.
Only projects that are part of an external, invoiceable group support billable costs.
Project group types are:

  • 1: Internal
  • 2: External, invoiceable
  • 3: External non-invoiceable

    Filterable: eq, ne

    Sortable: false

costAccountClosed
integer or null <int32>

The account number to register costs for closed projects.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoing
integer or null <int32>

The account number to register costs for ongoing projects.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for booking the revenue from ongoing projects:

  • 0: Debit
  • 1: Credit

If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

costContraAccountOngoing
integer or null <int32>

The contra account number to register costs for ongoing projects.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

includeCostPriceInFinance
boolean

Flag indicating if project costs are to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

includeSalesPriceInFinance
boolean

Flag indicating if the project revenue is to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The unique number of the project group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesAccountClosed
integer or null <int32>

The account number to register revenue for closed projects. If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoing
integer or null <int32>

The account number to register revenue for ongoing projects.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for revenue from ongoing projects:

  • 0: Debit
  • 1: Credit

If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

salesContraAccountOngoing
integer or null <int32>

The contra account number to register revenue for ongoing projects.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Project Groups

Use this endpoint to retrieve all Project Groups in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (ProjectGroup)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Create a single Project Group

Use this endpoint to create a single Project Group.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
name
required
string [ 0 .. 100 ] characters

The name of the project group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

type
required
integer <int32>
Enum: 1 2 3

The project group type determines whether a customer can be invoiced for the costs (time entries, mileage entries, expenses) registered on a project or not.
Only projects that are part of an external, invoiceable group support billable costs.
Project group types are:

  • 1: Internal
  • 2: External, invoiceable
  • 3: External non-invoiceable

    Filterable: eq, ne

    Sortable: false

costAccountClosed
integer or null <int32>

The account number to register costs for closed projects.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoing
integer or null <int32>

The account number to register costs for ongoing projects.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for booking the revenue from ongoing projects:

  • 0: Debit
  • 1: Credit

If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

costContraAccountOngoing
integer or null <int32>

The contra account number to register costs for ongoing projects.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

includeCostPriceInFinance
boolean

Flag indicating if project costs are to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

includeSalesPriceInFinance
boolean

Flag indicating if the project revenue is to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The unique number of the project group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesAccountClosed
integer or null <int32>

The account number to register revenue for closed projects. If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoing
integer or null <int32>

The account number to register revenue for ongoing projects.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for revenue from ongoing projects:

  • 0: Debit
  • 1: Credit

If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

salesContraAccountOngoing
integer or null <int32>

The contra account number to register revenue for ongoing projects.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Responses

Response Schema: application/json
number
integer <int32>

The identifier of the newly created entity

Read-only: true

Filterable: not filterable

Sortable: false

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome projectGroup"
}

Response samples

Content type
application/json
{
  • "number": 0
}

Retrieve the number of Project Groups

Call this endpoint to get the number of Project Groups. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Retrieve single Project Group

Use this endpoint to load a single Project Group by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
name
required
string [ 0 .. 100 ] characters

The name of the project group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

type
required
integer <int32>
Enum: 1 2 3

The project group type determines whether a customer can be invoiced for the costs (time entries, mileage entries, expenses) registered on a project or not.
Only projects that are part of an external, invoiceable group support billable costs.
Project group types are:

  • 1: Internal
  • 2: External, invoiceable
  • 3: External non-invoiceable

    Filterable: eq, ne

    Sortable: false

costAccountClosed
integer or null <int32>

The account number to register costs for closed projects.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoing
integer or null <int32>

The account number to register costs for ongoing projects.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for booking the revenue from ongoing projects:

  • 0: Debit
  • 1: Credit

If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

costContraAccountOngoing
integer or null <int32>

The contra account number to register costs for ongoing projects.
If includeCostPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

includeCostPriceInFinance
boolean

Flag indicating if project costs are to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

includeSalesPriceInFinance
boolean

Flag indicating if the project revenue is to be included in accounting or not.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The unique number of the project group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

salesAccountClosed
integer or null <int32>

The account number to register revenue for closed projects. If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoing
integer or null <int32>

The account number to register revenue for ongoing projects.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesAccountOngoingType
integer <int32>
Enum: 0 1

The type of account to be used for revenue from ongoing projects:

  • 0: Debit
  • 1: Credit

If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Filterable: not filterable

Sortable: false

salesContraAccountOngoing
integer or null <int32>

The contra account number to register revenue for ongoing projects.
If includeSalesPriceInFinance is set to true, this property is required. Otherwise, it cannot be provided.

Only accessible accounts (not barred) with accountType=="status" or "profitAndLoss" are allowed.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome projectGroup"
}

Project Statuses

Project Statuses help distinguish between two types of statuses:

  • Quote sent
  • Realised

However, having a status is not mandatory, so there may be projects without one.

Examples of use cases:

  • Retrieve all projects which have the status set to Realised.

Related guide for users: e-copedia (Danish)

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve a page of Project Statuses

Use this endpoint to load a page of Project Statuses.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
name
string or null

The name of the project status.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
integer <int32>

The unique number of the project status.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

priority
integer <int32>

A number that defines the priority of a project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

type
integer <int32>
Enum: 1 2

Project status types:

  • 1: Quote sent
  • 2: Realised

    Filterable: eq, ne

    Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Project Statuses

Use this endpoint to retrieve all Project Statuses in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (ProjectStatus)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Retrieve the number of Project Statuses

Call this endpoint to get the number of Project Statuses. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Retrieve single Project Status

Use this endpoint to load a single Project Status by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
name
string or null

The name of the project status.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
integer <int32>

The unique number of the project status.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

priority
integer <int32>

A number that defines the priority of a project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

type
integer <int32>
Enum: 1 2

Project status types:

  • 1: Quote sent
  • 2: Realised

    Filterable: eq, ne

    Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome projectStatus"
}

Projects

Projects are indispensable within the Projects module, as any registration needs to be linked to a project. Projects are either:

  • Sub-projects or
  • Main projects

Sub-projects can be linked to a main project or used independently.

Both kinds of projects can be invoiced, but expenses, time entries and mileages can only be registered on sub-projects.

Main projects are primarily used to group sub-projects.

External projects are assigned a customer number, which means that the registration on projects can have an effect on accounting.

Examples of use cases:

  • Create new projects;
  • Retrieve all projects which need to be delivered by a given date;

Related guide for users: e-copedia (Danish)

Click to see the list of possible error codes.
Error Code Description
ProjectCannotBeCreatedUpdatedNumberIsInvalid Project cannot be created or updated since the given number is invalid.
ProjectCannotBeCreatedUpdatedGroupNumberIsInvalid Project cannot be created or updated since the given group number is invalid.
ProjectCannotBeCreatedUpdatedNumberAlreadyExists Project cannot be created or updated since the given number already exists.
ProjectCannotBeCreatedAsClosed Project cannot be created as closed.
ProjectCannotBeCreatedUpdatedGroupDoesNotExist Project cannot be created or updated since the given project group does not exist.
ProjectCannotBeCreatedUpdatedCustomerNumberRequired Project cannot be created or updated since customer number is required.
ProjectCannotBeCreatedUpdatedMainProjectNumberCannotBeSet Project cannot be created or updated, main project number can only be set when creating subprojects.
ProjectCannotBeCreatedUpdatedMainProjectNumberDoesNotExistOrInvalid Project cannot be created or updated, provided main project number doesn't exist or is not a main project.
ProjectCannotBeCreatedUpdatedInvalidCustomerNumber Project cannot be created or updated, customer number is invalid.
ProjectCannotBeCreatedUpdatedCustomerNotFound Project cannot be created or updated, customer was not found.
ProjectCannotBeMadeMainHasTimeEntries Project cannot be made main project, it has time entries.
ProjectCannotBeMadeMainHasMileageEntries Project cannot be made main project, it has mileage entries.
ProjectCannotBeMadeSubprojectHasSubProjects Project cannot be made subproject, it already has subprojects.
ProjectCannotBeDeletedHasSubProjects Project cannot be deleted since it has subprojects.
ProjectCannotBeDeletedHasTimeEntries Project cannot be deleted since it has time entries.
ProjectCannotBeDeletedHasDraftEntries Project cannot be deleted since it has draft daybook entries.
ProjectCannotBeDeletedHasBookedEntries Project cannot be deleted since it has booked daybook entries.
ProjectCannotBeDeletedHasInvoices Project cannot be deleted since it has invoices.
ProjectCannotBeDeletedHasSalesDocuments Project cannot be deleted since it has sales documents.
ProjectCannotBeDeletedHasExpenses Project cannot be deleted since it has expenses.
ProjectCannotBeDeletedHasMileages Project cannot be deleted since it has mileage entries.

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve a page of Projects

Use this endpoint to load a page of Projects.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
name
required
string [ 0 .. 100 ] characters

The name of the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

projectGroupNumber
required
integer <int32>

The number of the project group that the project belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

closedDate
string or null <date-time>

The date when the project was closed and booked.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

contactPersonId
integer or null <int32>

The number of the customer contact that is to be used as a reference.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costPrice
number or null <double>

The total cost price of all registrations (time entires, mileage entries and expenses) on the project

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

customerNumber
integer or null <int32> [ 1 .. 999999999 ]

The number of the customer that the project is assigned to.
It is required if the project belongs to an external project group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

deliveryDate
string or null <date-time>

The date when the project is to be delivered.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

deliveryLocationNumber
integer or null <int32>

The number of the customer delivery location to be used for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

departmentNumber
integer or null <int32>

The number of the department that the project is assigned to.
It requires the Dimension module to be installed.
You can find out if you have the Dimension module by calling this endpoint: https://restdocs.e-conomic.com/#self

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

description
string or null [ 0 .. 2500 ] characters

Text describing the project.

Filterable: not filterable

Sortable: false

fixedPrice
number or null <double>

Fixed price agreed upon with a customer. It is not retrieved when invoicing, so it is only used for reporting.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

invoicedTotal
number or null <double>

The total amount that was invoiced for all registrations (time entires, mileage entries and expenses) on the project

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

isBarred
boolean

Flag indicating if the project has been barred or not. Barred projects don't accept new entries.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isClosed
boolean

Flag indicating if the project has been closed or not. Closed project don't accept new entries.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isMainProject
boolean

Flag indicating if a project is a main project or a sub-project. Main projects are grouping of projects and can't have entries (time entries, mileage entries, expenses), only sub-projects can.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isMileageInvoiced
boolean

Flag indicating if mileage should be included on sales invoices.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

lastUpdated
string or null <date-time>

The date and time when the project was last updated. Use it in the filter to retrieve only updated projects.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

mainProjectNumber
integer or null <int32>

The number of the main project that the sub-project is linked to.
It can be null - sub-projects can be standalone projects, they are not necessarily linked to a main project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

mileage
number <double>

The default amount of mileage for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

number
integer <int32> [ 0 .. 999999999 ]

The unique number of the project. If it's not provided in the POST requests, it is auto-generated.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

otherReference
string or null [ 0 .. 250 ] characters

A text field that can be used to save any custom reference on the project.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

otherResponsibleEmployeeNumber
integer or null <int32>

The number of the second employee that is responsible for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

responsibleEmployeeNumber
integer or null <int32>

The number of the employee that is responsible for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesPrice
number or null <double>

The total sales price of all registrations (time entires, mileage entries and expenses) on the project.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

status
integer or null <int32>

The status of a project. Project status is a separate manageable resource.
It has 2 types:

  • 1: Quote sent
  • 2: Realised

    Filterable: eq, ne, lt, lte, gt, gte, in, nin

    Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Projects

Use this endpoint to retrieve all Projects in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (Project)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Create a single Project

Use this endpoint to create a single Project.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
name
required
string [ 0 .. 100 ] characters

The name of the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

projectGroupNumber
required
integer <int32>

The number of the project group that the project belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

closedDate
string or null <date-time>

The date when the project was closed and booked.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

contactPersonId
integer or null <int32>

The number of the customer contact that is to be used as a reference.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

customerNumber
integer or null <int32> [ 1 .. 999999999 ]

The number of the customer that the project is assigned to.
It is required if the project belongs to an external project group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

deliveryDate
string or null <date-time>

The date when the project is to be delivered.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

deliveryLocationNumber
integer or null <int32>

The number of the customer delivery location to be used for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

departmentNumber
integer or null <int32>

The number of the department that the project is assigned to.
It requires the Dimension module to be installed.
You can find out if you have the Dimension module by calling this endpoint: https://restdocs.e-conomic.com/#self

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

description
string or null [ 0 .. 2500 ] characters

Text describing the project.

Filterable: not filterable

Sortable: false

fixedPrice
number or null <double>

Fixed price agreed upon with a customer. It is not retrieved when invoicing, so it is only used for reporting.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

isBarred
boolean

Flag indicating if the project has been barred or not. Barred projects don't accept new entries.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isMainProject
boolean

Flag indicating if a project is a main project or a sub-project. Main projects are grouping of projects and can't have entries (time entries, mileage entries, expenses), only sub-projects can.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isMileageInvoiced
boolean

Flag indicating if mileage should be included on sales invoices.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

mainProjectNumber
integer or null <int32>

The number of the main project that the sub-project is linked to.
It can be null - sub-projects can be standalone projects, they are not necessarily linked to a main project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

mileage
number <double>

The default amount of mileage for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

number
integer <int32> [ 0 .. 999999999 ]

The unique number of the project. If it's not provided in the POST requests, it is auto-generated.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

otherReference
string or null [ 0 .. 250 ] characters

A text field that can be used to save any custom reference on the project.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

otherResponsibleEmployeeNumber
integer or null <int32>

The number of the second employee that is responsible for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

responsibleEmployeeNumber
integer or null <int32>

The number of the employee that is responsible for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

status
integer or null <int32>

The status of a project. Project status is a separate manageable resource.
It has 2 types:

  • 1: Quote sent
  • 2: Realised

    Filterable: eq, ne, lt, lte, gt, gte, in, nin

    Sortable: false

Responses

Response Schema: application/json
number
integer <int32>

The identifier of the newly created entity

Read-only: true

Filterable: not filterable

Sortable: false

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome project"
}

Response samples

Content type
application/json
{
  • "number": 0
}

Update a single Project

Use this endpoint to update a single Project.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
name
required
string [ 0 .. 100 ] characters

The name of the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

projectGroupNumber
required
integer <int32>

The number of the project group that the project belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

closedDate
string or null <date-time>

The date when the project was closed and booked.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

contactPersonId
integer or null <int32>

The number of the customer contact that is to be used as a reference.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

customerNumber
integer or null <int32> [ 1 .. 999999999 ]

The number of the customer that the project is assigned to.
It is required if the project belongs to an external project group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

deliveryDate
string or null <date-time>

The date when the project is to be delivered.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

deliveryLocationNumber
integer or null <int32>

The number of the customer delivery location to be used for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

departmentNumber
integer or null <int32>

The number of the department that the project is assigned to.
It requires the Dimension module to be installed.
You can find out if you have the Dimension module by calling this endpoint: https://restdocs.e-conomic.com/#self

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

description
string or null [ 0 .. 2500 ] characters

Text describing the project.

Filterable: not filterable

Sortable: false

fixedPrice
number or null <double>

Fixed price agreed upon with a customer. It is not retrieved when invoicing, so it is only used for reporting.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

isBarred
boolean

Flag indicating if the project has been barred or not. Barred projects don't accept new entries.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isMainProject
boolean

Flag indicating if a project is a main project or a sub-project. Main projects are grouping of projects and can't have entries (time entries, mileage entries, expenses), only sub-projects can.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isMileageInvoiced
boolean

Flag indicating if mileage should be included on sales invoices.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

mainProjectNumber
integer or null <int32>

The number of the main project that the sub-project is linked to.
It can be null - sub-projects can be standalone projects, they are not necessarily linked to a main project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

mileage
number <double>

The default amount of mileage for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

number
integer <int32> [ 0 .. 999999999 ]

The unique number of the project. If it's not provided in the POST requests, it is auto-generated.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

otherReference
string or null [ 0 .. 250 ] characters

A text field that can be used to save any custom reference on the project.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

otherResponsibleEmployeeNumber
integer or null <int32>

The number of the second employee that is responsible for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

responsibleEmployeeNumber
integer or null <int32>

The number of the employee that is responsible for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

status
integer or null <int32>

The status of a project. Project status is a separate manageable resource.
It has 2 types:

  • 1: Quote sent
  • 2: Realised

    Filterable: eq, ne, lt, lte, gt, gte, in, nin

    Sortable: false

Responses

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome project"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve the number of Projects

Call this endpoint to get the number of Projects. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Retrieve single Project

Use this endpoint to load a single Project by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
name
required
string [ 0 .. 100 ] characters

The name of the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

projectGroupNumber
required
integer <int32>

The number of the project group that the project belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

closedDate
string or null <date-time>

The date when the project was closed and booked.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

contactPersonId
integer or null <int32>

The number of the customer contact that is to be used as a reference.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costPrice
number or null <double>

The total cost price of all registrations (time entires, mileage entries and expenses) on the project

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

customerNumber
integer or null <int32> [ 1 .. 999999999 ]

The number of the customer that the project is assigned to.
It is required if the project belongs to an external project group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

deliveryDate
string or null <date-time>

The date when the project is to be delivered.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

deliveryLocationNumber
integer or null <int32>

The number of the customer delivery location to be used for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

departmentNumber
integer or null <int32>

The number of the department that the project is assigned to.
It requires the Dimension module to be installed.
You can find out if you have the Dimension module by calling this endpoint: https://restdocs.e-conomic.com/#self

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

description
string or null [ 0 .. 2500 ] characters

Text describing the project.

Filterable: not filterable

Sortable: false

fixedPrice
number or null <double>

Fixed price agreed upon with a customer. It is not retrieved when invoicing, so it is only used for reporting.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

invoicedTotal
number or null <double>

The total amount that was invoiced for all registrations (time entires, mileage entries and expenses) on the project

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

isBarred
boolean

Flag indicating if the project has been barred or not. Barred projects don't accept new entries.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isClosed
boolean

Flag indicating if the project has been closed or not. Closed project don't accept new entries.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isMainProject
boolean

Flag indicating if a project is a main project or a sub-project. Main projects are grouping of projects and can't have entries (time entries, mileage entries, expenses), only sub-projects can.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isMileageInvoiced
boolean

Flag indicating if mileage should be included on sales invoices.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

lastUpdated
string or null <date-time>

The date and time when the project was last updated. Use it in the filter to retrieve only updated projects.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

mainProjectNumber
integer or null <int32>

The number of the main project that the sub-project is linked to.
It can be null - sub-projects can be standalone projects, they are not necessarily linked to a main project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

mileage
number <double>

The default amount of mileage for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

number
integer <int32> [ 0 .. 999999999 ]

The unique number of the project. If it's not provided in the POST requests, it is auto-generated.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

otherReference
string or null [ 0 .. 250 ] characters

A text field that can be used to save any custom reference on the project.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

otherResponsibleEmployeeNumber
integer or null <int32>

The number of the second employee that is responsible for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

responsibleEmployeeNumber
integer or null <int32>

The number of the employee that is responsible for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesPrice
number or null <double>

The total sales price of all registrations (time entires, mileage entries and expenses) on the project.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

status
integer or null <int32>

The status of a project. Project status is a separate manageable resource.
It has 2 types:

  • 1: Quote sent
  • 2: Realised

    Filterable: eq, ne, lt, lte, gt, gte, in, nin

    Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome project"
}

Delete single Project

Use this endpoint to delete a single Project by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve the allowed projects that employee can register an entry on.

Use this endpoint to get all the projects that the employee is allowed to register an entry on. Potential restrictions of registration are based on recording rules in the UI, which cannot be modified through the API. Add the employee number to your query parameter to obtain the allowed projects for registrations.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
employeeNumber
required
integer <int32> [ 1 .. 999999 ]

The employee number.

Responses

Response Schema: application/json
Array
name
required
string [ 0 .. 100 ] characters

The name of the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

projectGroupNumber
required
integer <int32>

The number of the project group that the project belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

closedDate
string or null <date-time>

The date when the project was closed and booked.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

contactPersonId
integer or null <int32>

The number of the customer contact that is to be used as a reference.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

costPrice
number or null <double>

The total cost price of all registrations (time entires, mileage entries and expenses) on the project

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

customerNumber
integer or null <int32> [ 1 .. 999999999 ]

The number of the customer that the project is assigned to.
It is required if the project belongs to an external project group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

deliveryDate
string or null <date-time>

The date when the project is to be delivered.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

deliveryLocationNumber
integer or null <int32>

The number of the customer delivery location to be used for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

departmentNumber
integer or null <int32>

The number of the department that the project is assigned to.
It requires the Dimension module to be installed.
You can find out if you have the Dimension module by calling this endpoint: https://restdocs.e-conomic.com/#self

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

description
string or null [ 0 .. 2500 ] characters

Text describing the project.

Filterable: not filterable

Sortable: false

fixedPrice
number or null <double>

Fixed price agreed upon with a customer. It is not retrieved when invoicing, so it is only used for reporting.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

invoicedTotal
number or null <double>

The total amount that was invoiced for all registrations (time entires, mileage entries and expenses) on the project

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

isBarred
boolean

Flag indicating if the project has been barred or not. Barred projects don't accept new entries.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isClosed
boolean

Flag indicating if the project has been closed or not. Closed project don't accept new entries.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isMainProject
boolean

Flag indicating if a project is a main project or a sub-project. Main projects are grouping of projects and can't have entries (time entries, mileage entries, expenses), only sub-projects can.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isMileageInvoiced
boolean

Flag indicating if mileage should be included on sales invoices.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

lastUpdated
string or null <date-time>

The date and time when the project was last updated. Use it in the filter to retrieve only updated projects.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

mainProjectNumber
integer or null <int32>

The number of the main project that the sub-project is linked to.
It can be null - sub-projects can be standalone projects, they are not necessarily linked to a main project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

mileage
number <double>

The default amount of mileage for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

number
integer <int32> [ 0 .. 999999999 ]

The unique number of the project. If it's not provided in the POST requests, it is auto-generated.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

otherReference
string or null [ 0 .. 250 ] characters

A text field that can be used to save any custom reference on the project.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

otherResponsibleEmployeeNumber
integer or null <int32>

The number of the second employee that is responsible for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

responsibleEmployeeNumber
integer or null <int32>

The number of the employee that is responsible for the project.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

salesPrice
number or null <double>

The total sales price of all registrations (time entires, mileage entries and expenses) on the project.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

status
integer or null <int32>

The status of a project. Project status is a separate manageable resource.
It has 2 types:

  • 1: Quote sent
  • 2: Realised

    Filterable: eq, ne, lt, lte, gt, gte, in, nin

    Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Time entries

Time entries endpoints allow for the registration of time spent working on a certain activity on a given project.
Until they are approved, time entries are only considered drafts and can be edited or deleted.

Examples of use cases:

  • Retrieve all time entries registered on a project;
  • Create new time entries;
  • Approve the time entries that meet all requirements (e.g. date is within a valid accounting year and there is no recording rule to prevent registration on the selected activity or project).

Related guide for users: e-copedia (Danish)

Click to see the list of possible error codes.
Error Code Description
TimeEntryIsApproved Time entry is already approved.
TimeEntryOnBarredProjectCannotBeApproved Time entry cannot be approved since the project has been barred.
CannotCreateUpdateActivityNotFound Time entry cannot be created or updated since the provided activity was not found.
CannotCreateUpdateActivityIsBarred Time entry cannot be created or updated since the provided activity is barred.
CannotCreateUpdateActivityNotPartOfProject Time entry cannot be created or updated since the provided activity is not part of the provided project.
TimeEntryIsNotInAccountingPeriod Time entry is not in a valid accounting period.
TimeEntryCannotBeCreatedUpdatedOrApprovedAccountingPeriodIsBarredOrClosed Time entry cannot be created, updated or approved, it is in an accounting period that is either barred or closed.
TimeEntryCannotBeCreatedUpdatedOrApprovedAccountingPeriodIsClosed Time entry cannot be created, updated or approved, it is in a closed accounting period.
TimeEntryCannotBeApprovedNotFound Time entry cannot be approved since it was not found.
TimeEntryCannotBeUpdatedAlreadyApproved Time entry cannot be updated or deleted since it is approved.
TimeEntryCannotBeCreatedUpdatedDateIsNotSet Time entry cannot be created or updated, date must be set and be greater than minimum date.
TimeEntryNumberListCannotBeEmpty List of time entries cannot be empty.
TimeEntryApprovalFailedBaseCurrencyIsNotSet Time entry cannot be approved since the company base currency has not been set.
TimeEntryCannotBeCreatedUpdatedForCompletedActivity Time entry cannot be created or updated since the activity is completed.
TimeEntryCannotBeCreatedUpdatedForActivityThatHasntStarted Time entry cannot be created or updated since the activity has not started yet.
EmployeeHasNoAccessToProject Employee has no access to the provided project.
EmployeeHasNoAccessToActivity Employee has no access to the provided activity.
EntriesNotAllowedProjectNotFound Entries not allowed on an inexistent project.
EntriesNotAllowedProjectIsMain Entries not allowed on a main project.
EntriesNotAllowedProjectIsClosed Entries not allowed on a closed project.
EntriesNotAllowedProjectIsBarred Entries not allowed on a barred project.
EntriesNotAllowedEmployeeNotFound Entries not allowed because the given employee was not found.
EntriesNotAllowedEmployeeIsBarred Entries not allowed because the given employee is barred.
CannotBeApprovedEmployeeNotFound Entry cannot be approved since employee was not found.
CannotBeApprovedEmployeeIsBarred Entry cannot be approved since employee is barred.
CannotBeApprovedActivityNotFound Entry cannot be approved since activity was not found.
CannotBeApprovedActivityIsBarred Entry cannot be approved since activity is barred.
CannotBeApprovedForCompletedActivity Entry cannot be approved since the activity is completed or hasn't started yet.
CannotBeApprovedActivityNotPartOfProject Entry cannot be approved since the activity is not part of the project.

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve single Time entry

Use this endpoint to load a single Time entry by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
activityNumber
required
integer <int32>

The number of the activity that the time entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

date
required
string <date-time>

The date for which the time entry is registered.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

employeeNumber
required
integer <int32>

The number of the employee that the time entry is to be registered for.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the time entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

isApproved
boolean

Flag indicating if the time entry has been approved or not. If it has been approved, it cannot be updated anymore.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isReconciled
boolean or null

Flag indicating if the time entry has been reconciled or not.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

lastUpdated
string <date-time>

The date when the time entry was last updated.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The time entry unique identifier.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

numberOfHours
number or null <double>

The number of hours reported in a time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

text
string or null

Text description that can be used to add extra information related to the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome time entry"
}

Delete single Time entry

Use this endpoint to delete a single Time entry by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve a page of Time entries

Use this endpoint to load a page of Time entries.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
activityNumber
required
integer <int32>

The number of the activity that the time entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

date
required
string <date-time>

The date for which the time entry is registered.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

employeeNumber
required
integer <int32>

The number of the employee that the time entry is to be registered for.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the time entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

isApproved
boolean

Flag indicating if the time entry has been approved or not. If it has been approved, it cannot be updated anymore.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

isReconciled
boolean or null

Flag indicating if the time entry has been reconciled or not.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

lastUpdated
string <date-time>

The date when the time entry was last updated.

Read-only: true

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

number
integer <int32>

The time entry unique identifier.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

numberOfHours
number or null <double>

The number of hours reported in a time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

text
string or null

Text description that can be used to add extra information related to the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Time entries

Use this endpoint to retrieve all Time entries in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (TimeEntry)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Create a single Time entry

Use this endpoint to create a single Time entry.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
activityNumber
required
integer <int32>

The number of the activity that the time entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

date
required
string <date-time>

The date for which the time entry is registered.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

employeeNumber
required
integer <int32>

The number of the employee that the time entry is to be registered for.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the time entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

number
integer <int32>

The time entry unique identifier.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

numberOfHours
number or null <double>

The number of hours reported in a time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

text
string or null

Text description that can be used to add extra information related to the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

Responses

Response Schema: application/json
number
integer <int32>

The identifier of the newly created entity

Read-only: true

Filterable: not filterable

Sortable: false

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome time entry"
}

Response samples

Content type
application/json
{
  • "number": 0
}

Update a single Time entry

Use this endpoint to update a single Time entry.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
activityNumber
required
integer <int32>

The number of the activity that the time entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

date
required
string <date-time>

The date for which the time entry is registered.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

employeeNumber
required
integer <int32>

The number of the employee that the time entry is to be registered for.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

projectNumber
required
integer <int32>

The number of the project that the time entry is to be registered on.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

number
integer <int32>

The time entry unique identifier.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

numberOfHours
number or null <double>

The number of hours reported in a time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

text
string or null

Text description that can be used to add extra information related to the time entry.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

Responses

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome time entry"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve the number of Time entries

Call this endpoint to get the number of Time entries. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Approve a list of Time entries

Use this endpoint to approve a list of Time entries.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
numbers
required
Array of integers <int32> [ items <int32 > ]

The numbers of the time entries to be approved.

Filterable: not filterable

Sortable: false

Responses

Request samples

Content type
{
  • "numbers": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Time entry prices

Time entry prices endpoints extend Time entries with prices.
A time entry cost or sales price is calculated by multiplying the activity cost or sales price respectively by the number of hours reported in the time entry.
If no activity price is provided, the time entry cost/sales price equals the employee cost/sales price * the number of hours reported in the time entry.

Examples of use cases:

  • Retrieve the cost and sales prices.

Related guide for users: e-copedia (Danish)

Required application roles: ProjectEmployee or SuperUser [More info]

Retrieve single Time entry prices

Use this endpoint to load a single Time entry prices by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
costPrice
number or null <double>

The cost price of the time entry, calculated as follows:
CostPrice = (employee costPrice + activity costPriceMarkupPercentage) x time entry numberOfHours.

Read-only: true

Filterable: not filterable

Sortable: false

number
integer <int32>

The time entry unique identifier.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

salesPrice
number or null <double>

The sales price of the time entry, calculated as follows:
SalesPrice = activity salesPrice x time entry numberOfHours.
If there is no sales price set on the activity, then SalesPrice = employee salesPrice x time entry numberOfHours.
If there is any special price set on the project, it supersedes the price set on the activity or on the employee.
Sales prices are only calculated for invoiceable projects and activities. Sales price for non-invoiceable projects or activities = 0

Read-only: true

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome time entry price"
}

Retrieve a page of Time entry prices

Use this endpoint to load a page of Time entry prices.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
costPrice
number or null <double>

The cost price of the time entry, calculated as follows:
CostPrice = (employee costPrice + activity costPriceMarkupPercentage) x time entry numberOfHours.

Read-only: true

Filterable: not filterable

Sortable: false

number
integer <int32>

The time entry unique identifier.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

salesPrice
number or null <double>

The sales price of the time entry, calculated as follows:
SalesPrice = activity salesPrice x time entry numberOfHours.
If there is no sales price set on the activity, then SalesPrice = employee salesPrice x time entry numberOfHours.
If there is any special price set on the project, it supersedes the price set on the activity or on the employee.
Sales prices are only calculated for invoiceable projects and activities. Sales price for non-invoiceable projects or activities = 0

Read-only: true

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve all Time entry prices

Use this endpoint to retrieve all Time entry prices in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (TimeEntryPrices)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Employee groups

Employee Groups help distinguish between various categories of employees.

Examples of use cases:

  • Retrieve all employee groups;
  • Display all employee groups when creating a new employee.

Related guide for users: e-copedia (Danish)

Click to see the list of possible error codes.
Error Code Description
EmployeeGroupNumberAlreadyExists Employee group cannot be created since the given number already exists.
ERROR_BOUNDCOWORKERACCOUNTCOWORKERINCHOSENGROUP The employee group contains one or more employees.

Required application roles: Sales or SuperUser [More info]

Retrieve all Employee groups

Use this endpoint to retrieve all Employee groups in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (EmployeeGroup)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Create a single Employee group

Use this endpoint to create a single Employee group.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
name
required
string [ 0 .. 100 ] characters

The name of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Responses

Response Schema: application/json
number
integer <int32>

The identifier of the newly created entity

Read-only: true

Filterable: not filterable

Sortable: false

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome employee group"
}

Response samples

Content type
application/json
{
  • "number": 0
}

Update a single Employee group

Use this endpoint to update a single Employee group.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
name
required
string [ 0 .. 100 ] characters

The name of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Responses

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome employee group"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve single Employee group

Use this endpoint to load a single Employee group by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
name
required
string [ 0 .. 100 ] characters

The name of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome employee group"
}

Delete single Employee group

Use this endpoint to delete a single Employee group by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve a page of Employee groups

Use this endpoint to load a page of Employee groups.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
name
required
string [ 0 .. 100 ] characters

The name of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer <int32> [ 1 .. 999999999 ]

The unique number of the employee group.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve the number of Employee groups

Call this endpoint to get the number of Employee groups. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0

Employees

Employees endpoints help retrieve the list of existing employees.

Examples of use cases:

  • Retrieve all employees who have a certain name;
  • Display all employees when selecting a contact person for a project, sales document or customer.

Related guide for users: e-copedia (Danish)

Click to see the list of possible error codes.
Error Code Description
EmployeeCannotBeCreatedUpdatedNumberAlreadyExists Employee cannot be created since the given number already exists.
EmployeeCannotBeCreatedUpdatedGroupNotFound Employee cannot be created or updated since the given employee group was not found.
EmployeeCannotBeCreatedUpdatedNameNullOrEmpty Employee cannot be created or updated since employee name cannot be null or empty.
ERROR_BOUNDCOWORKERTHEREISNUMBEROFPOSTSONDRAFTS Finance vouchers exist for the selected employee.
ERROR_BOUNDCOWORKERACCOUNTNUMBEROFTIMEREGISTERINGONCOWORKER There is/are time entry(ies) for the selected employee.
ERROR_BOUNDCOWORKERACCOUNTNUMBEROFEXPENSEREGISTERINGONCOWORKER There is/are expense entry(ies) for the selected employee.
ERROR_BOUNDCOWORKERACCOUNTNUMBEROFMILEAGEENTRIESONCOWORKER There is/are milage entry(ies) for the selected employee.
ERROR_BOUNDCOWORKERACCOUNTCOWORKERRESPONSIBLENUMBEROFCASES The employee is responsible for project(s).
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISBOUNDEDTOUSERSACCESSOFTIMEREGISTERING The employee is linked to a user's access to time recording.
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISSALESMANFORNUMBEROFDEBITORS The employee is a sales representative for customer(s).
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISOURREFFORNUMBEROFCREDITORS The employee is linked to supplier(s).
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISSALESMANFORNUMBEROFINVOICES The employee is a sales representative for invoice(s).
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISSALESMANFORNUMBEROFDRAFTS The employee is a sales representative for draft invoice(s).
ERROR_BOUNDCOWORKERACCOUNTCOWORKERISREFMANFORNUMBEROFPURCHASEORDERS The employee is linked to purchase order(s).

Required application roles: Sales or SuperUser [More info]

Retrieve all Employees

Use this endpoint to retrieve all Employees in bulk. Max number of items returned in a single call is 1000. Use the continuation cursor parameter to set the continuation cursor for retrieval of next set of data. pagination instructions

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Cursor
string [ 0 .. 50 ] characters

Use this parameter to set the continuation cursor for paging. pagination instructions

Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
cursor
string or null

Use this continuation cursor in a request back to continue the list. In case there are no more items to retrieve, the cursor is not returned at all.

Read-only: true

Filterable: not filterable

Sortable: false

Array of objects or null (Employee)

Max number of items returned is 1000.

Filterable: not filterable

Sortable: false

Response samples

Content type
application/json
{
  • "cursor": "234",
  • "items": [
    ]
}

Create a single Employee

Use this endpoint to create a single Employee.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
access
required
boolean

Flag indicating if the employee can be registered on or is barred.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

groupNumber
required
integer <int32>

The number of the employee group that the employee belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer or null <int32> [ 0 .. 999999 ]

The unique number of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

email
string or null [ 0 .. 50 ] characters

The email address of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

phone
string or null [ 0 .. 20 ] characters

The phone number of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Responses

Response Schema: application/json
number
integer <int32>

The identifier of the newly created entity

Read-only: true

Filterable: not filterable

Sortable: false

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome employee"
}

Response samples

Content type
application/json
{
  • "number": 0
}

Update a single Employee

Use this endpoint to update a single Employee.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
Request Body schema:
access
required
boolean

Flag indicating if the employee can be registered on or is barred.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

groupNumber
required
integer <int32>

The number of the employee group that the employee belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer or null <int32> [ 0 .. 999999 ]

The unique number of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

email
string or null [ 0 .. 50 ] characters

The email address of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

phone
string or null [ 0 .. 20 ] characters

The phone number of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Responses

Request samples

Content type
{
  • "Id": 1,
  • "Description": "An awesome employee"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve a page of Employees

Use this endpoint to load a page of Employees.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

PageSize
integer <int32> [ 1 .. 100 ]
Default: 20

Use this parameter to set the page size. pagination instructions

SkipPages
integer <int32> [ 0 .. 100 ]
Default: 0

Use this parameter to set number of pages to skip. pagination instructions

Sort
string

Use this parameter to set the sort fields and direction. sort instructions

Responses

Response Schema: application/json
Array
access
required
boolean

Flag indicating if the employee can be registered on or is barred.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

groupNumber
required
integer <int32>

The number of the employee group that the employee belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer or null <int32> [ 0 .. 999999 ]

The unique number of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

email
string or null [ 0 .. 50 ] characters

The email address of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

phone
string or null [ 0 .. 20 ] characters

The phone number of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve single Employee

Use this endpoint to load a single Employee by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response Schema: application/json
access
required
boolean

Flag indicating if the employee can be registered on or is barred.

Filterable: eq, ne, lt, lte, gt, gte

Sortable: false

groupNumber
required
integer <int32>

The number of the employee group that the employee belongs to.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

name
required
string [ 0 .. 100 ] characters

The name of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin, like

Sortable: false

number
required
integer or null <int32> [ 0 .. 999999 ]

The unique number of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: true

email
string or null [ 0 .. 50 ] characters

The email address of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

objectVersion
string or null

The object version, required for PUT requests to help ensure that updates made by others don’t get overwritten by your update request.

Filterable: not filterable

Sortable: false

phone
string or null [ 0 .. 20 ] characters

The phone number of the employee.

Filterable: eq, ne, lt, lte, gt, gte, in, nin

Sortable: false

Response samples

Content type
application/json
{
  • "Id": 1,
  • "Description": "An awesome employee"
}

Delete single Employee

Use this endpoint to delete a single Employee by id/number.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
path Parameters
number
required
integer <int32>

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "developerHint": "string",
  • "logId": "string",
  • "logTimeUtc": "string",
  • "property": "string",
  • "errorCode": "string"
}

Retrieve the number of Employees

Call this endpoint to get the number of Employees. You can use a filtering as well.

Authorizations:
(X-AppSecretTokenX-AgreementGrantToken)
query Parameters
Filter
string

Use this parameter to set the filtering for fields. filtering instructions

Responses

Response Schema: application/json
integer <int32>

Response samples

Content type
application/json
0
0