Workadu API v.2
API Endpoint
https://app.workadu.comThe Workadu’s API is a RESTful API. This means that the API is designed to allow you to get, create, update, & delete objects with the HTTP verbs GET, POST, PUT, PATCH, & DELETE.
Response Type (JSON)
The Workadu’s API responses are exclusively in JSON format. This means that you should always set the Content-Type header to application/json to ensure that your requests are properly accepted and processed by the API.
Authentication
Workadu’s REST API is protected by the same restrictions which are provided via Workadu standard web interface. This means that if you do not log in, you will not have any access to workadu Information. Furthermore, if you log in and do not have permission to view something in workadu, you will not be able to view it using the workadu REST API either. Because we are using workadu backend authentication credentials or API Key we should define them at the API call. Credentials should be encoded with Base64. The header is formatted like so.
Get your API KEY
Sign in to https://app.workadu.com with admin credentials. Go at settings and then at Users & Permissions. Create or Edit user with api role and copy paste the API KEY provided there.
Authentication with API KEY
Include this Authorization to header in each api call
curl https://app.workadu.com/api/services -u $2y$10$Ag6LxUSJsdfsdfrhFNQlQuDxiMAIaHr3BDuY8gLC32f5C681NCOge:
Authentication with username & password (Deprecated)
Alternatively you can use Basic Authorization with user name and password.
curl https://app.workadu.com/api/services -u $USERNAME:$PASSWORD
All API requests must be made over https. API requests without authentication will fail.
Versioning
The workadu API is constantly being worked on to add features, make improvements, and fix bugs. This means that you should expect changes to be introduced and documented. Whenever we make a significant change to an endpoint, we will increase the version number used in the path of the resource being requested. However, there are some changes or additions that are considered backwards-compatible and your applications should be flexible enough to handle them.
These include: Adding new endpoints to the API Adding new attributes to the response of an existing endpoint.Changing the order of attributes of responses (JSON by definition is an object of unordered key/value pairs) Because we aren’t versioning the API in the URI we need to define an Accept header to request a specific version.
For the current version (v2) header is formatted like so.
Accept: application/vnd.rengine.v2+json
For the first version (v1) the header is formatted like so.
Accept: application/vnd.rengine.v1+json
Getting Started ¶
How to start
In order to start using workadu API you just need to:
-
Sign in using your workadu Ultimate administrator account. If you don’ t have workadu Ultimate account please sign up or watch our introduction video learn more,
-
Create a new api user account,
-
Ready to go!
Make your first API call
Once you have created your app, you will be given a a username and a password. These will be used to authenticate your application when calling the API.
Try executing the following command to see the workadu services available in your account, just replace $APIKey with your application’s api user key.
curl https://app.workadu.com/api/services -u $APIkey:
Filtering
All GET Request endpoints can be filtered by multiple keys as query parameters as listed below.
/api/services/?filter[$RESPONSE_KEY]=$VALUE
Multiple filters are implemented using “&”. In many cases instead of ‘=’ you can replace it with specific operators that will be inticated a each end point. A sample call will look like so.
/api/services/?filter[$RESPONSE_KEY][$OPERATOR]$VALUE
Sorting
All GET Request endpoints can be sorted by a key adding a sorting query parameter as listed below (ASCEDING SORTING).
/api/services/?sort=$RESPONSE_KEY
It sorts only with one key and if it has a minus prefix it sorts descending as listed below (DECEDING SORTING).
/api/services/?sort=-$RESPONSE_KEY
Services ¶
The services resource The Services endpoint returns information about the workadu Services (vehicles, equipments, yachts) offered from the companies associated to authenticated user. The response includes the display name and other details and groups of info about each service, and lists the services in the proper display order as they are stored initial at the database. You can re-sort the results by add sorting filter at your request as show here.
This endpoint does not reflect real-time availability of the services without “Availability filters”. You can use the the same endpoint to determine real-time availability by using “Availability filters” as show below.
In some cases, the list of service returned may contain double or more services with duplicate names. This is due to multi-company results. You can get unique results if your filter them by company.

Resource End Points
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/services | Create new service [beta] |
| PUT | /api/services | Update a service [beta] |
| DELETE | /api/services | Delete a service -> price list -> price schemes |
| GET | /api/services/ | List all services |
| GET | /api/services/{service_id}{service_id},… | Retriece a specific service(s) |
| POST | /api/services/pricelist | Add a price list to a service [beta] |
| POST | /api/services/rates | Add rates/availability to price scheme(s) [beta] |
| DELETE | /api/services/rates | Delete a price scheme(s) [beta] |
Create a new Service ¶
Body
{
"name": "Toyota corolla",
"category_id": 1234
}
Body
{
"data": {
"id": 32161,
"alias": "MATIZ",
"title": "MATIZ",
"text_flag": "",
"description": "some description",
"includes": "",
"excludes": "",
"pax": 1,
"min_pax": 1,
"type": "daily",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1435697883-matiz.jpg"
],
"company": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "``",
"country": "FRA",
"address": "P.O. Box 566",
"city": "Paris",
"reservation_email": "example@biz.com",
"currency": "$",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1471249140-xitelogo.jpg"
]
},
"group": {
"id": 1339,
"name": "7 passenger",
"description": "Explorer/Pathfinder"
},
"total_availability": false,
"available_spots": false,
"maxmin": "null",
"total_days": "null",
"total_price": "false",
"price_lists": {
"service_id": 33663,
"name": "Base price list",
"type": "daily",
"type_value": 30,
"unit": "per day",
"price_schemes": {
"id": 12344,
"plan": "Weekly",
"period": "2018-10-01, 2018-11-10"
}
},
"offers_applied": false,
"availabilities_and_rates": [],
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
],
"attributes": [
{
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
],
"providers": []
}
}
Body
{
"name": "Toyota corolla",
"category_id": 1234,
"alias": "TOYC",
"description": "a service description",
"includes": "Text with includes",
"excludes": "Text with excludes",
"text_flag": "New",
"min_pax": 1,
"pax": 4,
"media": "https://app.workadu.com/assets/image1.png",
"extras": [
{
"id": 2593
}
],
"attributes": [
{
"id": 2522
}
]
}
Body
{
"data": {
"id": 32161,
"alias": "MATIZ",
"title": "MATIZ",
"text_flag": "",
"description": "some description",
"includes": "",
"excludes": "",
"pax": 1,
"min_pax": 1,
"type": "daily",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1435697883-matiz.jpg"
],
"company": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "``",
"country": "FRA",
"address": "P.O. Box 566",
"city": "Paris",
"reservation_email": "example@biz.com",
"currency": "$",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1471249140-xitelogo.jpg"
]
},
"group": {
"id": 1339,
"name": "7 passenger",
"description": "Explorer/Pathfinder"
},
"total_availability": false,
"available_spots": false,
"maxmin": "null",
"total_days": "null",
"total_price": "false",
"price_lists": {
"service_id": 33663,
"name": "Base price list",
"type": "daily",
"type_value": 30,
"unit": "per day",
"price_schemes": {
"id": 12344,
"plan": "Weekly",
"period": "2018-10-01, 2018-11-10"
}
},
"offers_applied": false,
"availabilities_and_rates": [],
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
],
"attributes": [
{
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
],
"providers": []
}
}
Create a new Service
POST/api/services/
BETA - This object contains information about a service for sale or book. At the service you can attach optionaly (expect the basic information: what includes, what excludes), attributes, extra charges, rates and avalability schemes.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
A service name,an category are mandatory data for a new service |
Service name and category are required. |
400 |
The email you supplied is malformed! |
Please check the customer’s email format. |
Update a Service ¶
Body
{
"id": 12344
}
Body
{
"data": {
"id": 32161,
"alias": "MATIZ",
"title": "MATIZ",
"text_flag": "",
"description": "some description",
"includes": "",
"excludes": "",
"pax": 1,
"min_pax": 1,
"type": "daily",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1435697883-matiz.jpg"
],
"company": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "``",
"country": "FRA",
"address": "P.O. Box 566",
"city": "Paris",
"reservation_email": "example@biz.com",
"currency": "$",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1471249140-xitelogo.jpg"
]
},
"group": {
"id": 1339,
"name": "7 passenger",
"description": "Explorer/Pathfinder"
},
"total_availability": false,
"available_spots": false,
"maxmin": "null",
"total_days": "null",
"total_price": "false",
"price_lists": {
"service_id": 33663,
"name": "Base price list",
"type": "daily",
"type_value": 30,
"unit": "per day",
"price_schemes": {
"id": 12344,
"plan": "Weekly",
"period": "2018-10-01, 2018-11-10"
}
},
"offers_applied": false,
"availabilities_and_rates": [],
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
],
"attributes": [
{
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
],
"providers": []
}
}
Body
{
"id": 12344,
"name": "Toyota corolla",
"category_id": 1234,
"alias": "TOYC",
"description": "a service description",
"includes": "Text with includes",
"excludes": "Text with excludes",
"text_flag": "New",
"min_pax": 1,
"pax": 4,
"media": "https://app.workadu.com/assets/image1.png",
"extras": [
{
"id": 2593
}
],
"attributes": [
{
"id": 2522
}
]
}
Body
{
"data": {
"id": 32161,
"alias": "MATIZ",
"title": "MATIZ",
"text_flag": "",
"description": "some description",
"includes": "",
"excludes": "",
"pax": 1,
"min_pax": 1,
"type": "daily",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1435697883-matiz.jpg"
],
"company": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "``",
"country": "FRA",
"address": "P.O. Box 566",
"city": "Paris",
"reservation_email": "example@biz.com",
"currency": "$",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1471249140-xitelogo.jpg"
]
},
"group": {
"id": 1339,
"name": "7 passenger",
"description": "Explorer/Pathfinder"
},
"total_availability": false,
"available_spots": false,
"maxmin": "null",
"total_days": "null",
"total_price": "false",
"price_lists": {
"service_id": 33663,
"name": "Base price list",
"type": "daily",
"type_value": 30,
"unit": "per day",
"price_schemes": {
"id": 12344,
"plan": "Weekly",
"period": "2018-10-01, 2018-11-10"
}
},
"offers_applied": false,
"availabilities_and_rates": [],
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
],
"attributes": [
{
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
],
"providers": []
}
}
Update a Service
PUT/api/services/
BETA - Update service object information.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
An id is mandatory data to update the service |
Service id is required. |
Delete a Service ¶
Body
{
"id": 12344
}
Body
{
"data": {
"id": 12344,
"deleted": true,
"message": "The resource deleted"
}
}
Delete a Service
DELETE/api/services/
BETA - Delete service object information and its related price catalogs and price schemes.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
An id is mandatory data to delete the service |
Service id is required. |
400 |
Service id was not found in company services |
Wrong service id or service already deleted. |
List Services ¶
Body
{
"data": [
{
"id": 32161,
"alias": "MATIZ",
"title": "MATIZ",
"text_flag": "",
"description": "some description",
"includes": "",
"excludes": "",
"pax": 1,
"min_pax": 1,
"type": "daily",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1435697883-matiz.jpg"
],
"company": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "``",
"country": "FRA",
"address": "P.O. Box 566",
"city": "Paris",
"reservation_email": "example@biz.com",
"currency": "$",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1471249140-xitelogo.jpg"
]
},
"group": {
"id": 1339,
"name": "7 passenger",
"description": "Explorer/Pathfinder"
},
"total_availability": false,
"available_spots": false,
"maxmin": "null",
"total_days": "null",
"total_price": "false",
"price_lists": {
"service_id": 33663,
"name": "Base price list",
"type": "daily",
"type_value": 30,
"unit": "per day",
"price_schemes": {
"id": 12344,
"plan": "Weekly",
"period": "2018-10-01, 2018-11-10"
}
},
"offers_applied": false,
"availabilities_and_rates": [],
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
],
"attributes": [
{
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
],
"providers": []
}
]
}
List Services
GET/api/services
- filter[extra_filters][companyid]
integer(optional) Example: 14The companyid of the company you want services from
- filter[extra_filters][brand]
integer(optional) Example: 10The brand of the brand you want services from.
- filter[extra_filters][alias]
String(optional) Example: vw-poloThe alias of a specific service.
- filter[extra_filters][title]
String(optional) Example: Volkswagen PoloThe title of a specific service.
- filter[extra_filters][category_id]
integer(optional) Example: 10The category_id of a specific group of services.
- filter[extra_filters][radius]
String(optional) Example: R-100value = -1 (default) unstricted results sorted by closest.
value = 1 restrinct results to search zone.
value = R-100 restrict resuts to 100kms from start_coordinates point.
Get Service Availability ¶
Body
{
"data": [
{
"id": 32161,
"alias": "MATIZ",
"title": "MATIZ",
"text_flag": "",
"description": "some description",
"includes": "",
"excludes": "",
"pax": 1,
"min_pax": 1,
"type": "daily",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1435697883-matiz.jpg"
],
"company": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "``",
"country": "FRA",
"address": "P.O. Box 566",
"city": "Paris",
"reservation_email": "example@biz.com",
"currency": "$",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1471249140-xitelogo.jpg"
]
},
"group": {
"id": 1339,
"name": "7 passenger",
"description": "Explorer/Pathfinder"
},
"total_availability": true,
"available_spots": true,
"maxmin": {
"max": 157,
"min": 157
},
"total_days": 2,
"total_price": {
"4587": 314
},
"units": {
"4587": "per day"
},
"offers_applied": false,
"availabilities_and_rates": {
"2018-07-16": {
"rates": {
"4587": {
"date": "2018-07-16",
"weekdayname": "MON",
"day": 16,
"weekday": 0,
"resources": 18,
"availability": 18,
"rate": "155",
"spots": {
"value": "155",
"multiple_values": {
"extra_adult_value": "",
"child_value": "",
"infant_value": "",
"extra_child_value": "",
"extra_infant_value": ""
},
"offers": false,
"slots": false,
"availability": 18
},
"day_available_spots": 18,
"day_recources": 18
}
}
}
},
"next_available_slot": "2018-08-06 13:00",
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
],
"attributes": [
{
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
],
"providers": []
}
]
}
Get Service Availability
GET/api/services
- filter[availability][start_coordinates]
String(required) Example: (31.65464,27.99954)The starting coordinates use the form (lat,lon).
- filter[availability][end_coordinates]
String(required) Example: (31.65464,27.99954)The ending coordinates use the form (lat,lon).
- filter[availability][start_date]
String(required) Example: 2018-08-30The starting date uses the form Y-m-d.
- filter[availability][end_date]
String(required) Example: 2018-08-30The ending date uses the form Y-m-d.
- filter[availability][start_time]
String(required) Example: 08:00The starting date uses the form H:i
- filter[availability][end_time]
String(required) Example: 08:00The ending date uses the form H:i
- filter[availability][coupon]
String(optional) Example: XMASPARTYA coupon code that should be enabled as a dynamic policy at the backend
- filter[extra_filters][companyid]
integer(optional) Example: 14The companyid of the company you want services from
- filter[extra_filters][brand]
integer(optional) Example: 10The brand of the brand you want services from.
- filter[extra_filters][alias]
String(optional) Example: vw-poloThe alias of a specific service.
- filter[extra_filters][title]
String(optional) Example: Volkswagen PoloThe title of a specific service.
- filter[extra_filters][category_id]
integer(optional) Example: 10The category_id of a specific group of services.
- filter[extra_filters][radius]
String(optional) Example: R-100value = -1 (default) unstricted results sorted by closest.
value = 1 restrinct results to search zone.
value = R-100 restrict resuts to 100kms from start_coordinates point.
Get Specific Service ¶
Body
{
"data": [
{
"id": 32161,
"alias": "MATIZ",
"title": "MATIZ",
"text_flag": "",
"description": "some description",
"includes": "",
"excludes": "",
"pax": 1,
"min_pax": 1,
"type": "daily",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1435697883-matiz.jpg"
],
"company": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "``",
"country": "FRA",
"address": "P.O. Box 566",
"city": "Paris",
"reservation_email": "example@biz.com",
"currency": "$",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1471249140-xitelogo.jpg"
]
},
"group": {
"id": 1339,
"name": "7 passenger",
"description": "Explorer/Pathfinder"
},
"total_availability": false,
"available_spots": false,
"maxmin": "null",
"total_days": "null",
"total_price": "false",
"price_lists": {
"service_id": 33663,
"name": "Base price list",
"type": "daily",
"type_value": 30,
"unit": "per day",
"price_schemes": {
"id": 12344,
"plan": "Weekly",
"period": "2018-10-01, 2018-11-10"
}
},
"offers_applied": false,
"availabilities_and_rates": [],
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
],
"attributes": [
{
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
],
"providers": []
}
]
}
Get Specific Service
GET/api/services/{service_id}
- service_id
integer(optional) Example: 32161The companyid of the company you want services from
Create a new Price List ¶
Body
{
"service_id": 33663,
"name": "Base price list",
"type": "daily",
"type_value": 30,
"unit": "per day",
"price_schemes": {
"id": 12344,
"plan": "Weekly",
"period": "2018-10-01, 2018-11-10"
}
}
Body
{
"data": {
"id": 32161,
"alias": "MATIZ",
"title": "MATIZ",
"text_flag": "",
"description": "some description",
"includes": "",
"excludes": "",
"pax": 1,
"min_pax": 1,
"type": "daily",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1435697883-matiz.jpg"
],
"company": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "``",
"country": "FRA",
"address": "P.O. Box 566",
"city": "Paris",
"reservation_email": "example@biz.com",
"currency": "$",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1471249140-xitelogo.jpg"
]
},
"group": {
"id": 1339,
"name": "7 passenger",
"description": "Explorer/Pathfinder"
},
"total_availability": false,
"available_spots": false,
"maxmin": "null",
"total_days": "null",
"total_price": "false",
"price_lists": {
"service_id": 33663,
"name": "Base price list",
"type": "daily",
"type_value": 30,
"unit": "per day",
"price_schemes": {
"id": 12344,
"plan": "Weekly",
"period": "2018-10-01, 2018-11-10"
}
},
"offers_applied": false,
"availabilities_and_rates": [],
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
],
"attributes": [
{
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
],
"providers": []
}
}
Create a new Price List
POST/api/services/pricelist
BETA - This object creates a price list and attach it to a service. A service can have many price lists. Every price list may have multiple price periods with rates and availability.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
Service id, name, type and unit are mandatory data to create a new price
list |
Scheme Service id, name, type and unit are required. |
400 |
There is no service with service id: 33445 |
Service id doesn’t much company services |
Create a Price Scheme ¶
Body
{
"service_ids": "33663, 33433, 45444",
"rate": 29.99
}
Body
{
"data": {
"id": 32161,
"alias": "MATIZ",
"title": "MATIZ",
"text_flag": "",
"description": "some description",
"includes": "",
"excludes": "",
"pax": 1,
"min_pax": 1,
"type": "daily",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1435697883-matiz.jpg"
],
"company": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "``",
"country": "FRA",
"address": "P.O. Box 566",
"city": "Paris",
"reservation_email": "example@biz.com",
"currency": "$",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1471249140-xitelogo.jpg"
]
},
"group": {
"id": 1339,
"name": "7 passenger",
"description": "Explorer/Pathfinder"
},
"total_availability": false,
"available_spots": false,
"maxmin": "null",
"total_days": "null",
"total_price": "false",
"price_lists": {
"service_id": 33663,
"name": "Base price list",
"type": "daily",
"type_value": 30,
"unit": "per day",
"price_schemes": {
"id": 12344,
"plan": "Weekly",
"period": "2018-10-01, 2018-11-10"
}
},
"offers_applied": false,
"availabilities_and_rates": [],
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
],
"attributes": [
{
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
],
"providers": []
}
}
Body
{
"service_ids": "33663, 33433, 45444",
"price_lists_ids": "21233,12333",
"period": "Weekly or 2018-12-01,2019-04-15",
"days": "MON, TUE, FRI",
"slots": "12:00, 13:00, 14:00",
"rate": 29.99,
"multiple_rates": "29.99, 23.99, 22.53, 0, 0, 0",
"availability": 2
}
Body
{
"data": {
"id": 32161,
"alias": "MATIZ",
"title": "MATIZ",
"text_flag": "",
"description": "some description",
"includes": "",
"excludes": "",
"pax": 1,
"min_pax": 1,
"type": "daily",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1435697883-matiz.jpg"
],
"company": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "``",
"country": "FRA",
"address": "P.O. Box 566",
"city": "Paris",
"reservation_email": "example@biz.com",
"currency": "$",
"media": [
"https://secure.reservationengine.net/rest/assets/bizz/1471249140-xitelogo.jpg"
]
},
"group": {
"id": 1339,
"name": "7 passenger",
"description": "Explorer/Pathfinder"
},
"total_availability": false,
"available_spots": false,
"maxmin": "null",
"total_days": "null",
"total_price": "false",
"price_lists": {
"service_id": 33663,
"name": "Base price list",
"type": "daily",
"type_value": 30,
"unit": "per day",
"price_schemes": {
"id": 12344,
"plan": "Weekly",
"period": "2018-10-01, 2018-11-10"
}
},
"offers_applied": false,
"availabilities_and_rates": [],
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
],
"attributes": [
{
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
],
"providers": []
}
}
Create a Price Scheme
POST/api/services/rates
BETA - This end point add rates & availability to one or multiple price schemes. If there is no price_list_id added, then system gets service first-default price list
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
Service ids, rate |
Service ids, and a rate are required. |
400 |
There is no service with provided service ids |
Service ids doesn’t much company services |
Delete a Price Scheme ¶
Body
{
"price_shceme_id": 336
}
Body
{
"data": {
"id": 12344,
"deleted": true,
"message": "The resource deleted"
}
}
Body
{
"service_id": 33663
}
Body
{
"data": {
"id": 12344,
"deleted": true,
"message": "The resource deleted"
}
}
Delete a Price Scheme
DELETE/api/services/rates
BETA - This end point deletes rates & availability scheme. The deletion will recreate all the pricing policy of the service, by re-calculation the rates and availability from the remaining pricing schemes
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
A price_sheme_id or a service_id is mandatory to retrieve service data |
A price_sheme_id or a service_id is mandatory to retrieve service data. |
400 |
There is no service with provided service id |
Service id doesn’t much to a company service |
Discounts & Sales policies ¶
The Sales policies resource are here to help you build dynamic pricing and offering automations to your platform. You can build discounts offers for specific service or create availability restrictions policies in specific geographical zones and many more.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/sales/ | Create a new sales policy |
| DELETE | /api/sales/ | Delete a sales policy |
Action field short codes appendix
| Field | CODE | Description |
|---|---|---|
| action | 120 | Set price to a fixed amount per spot |
| action | 1609 | Set total price to a fixed amount |
| action | 154 | Modify price per spot |
| action | 160 | Modify total price |
| action | 170 | Modify Allotment per spot |
| action | 1843 | Modify Availability per spot |
| action | 180 | Round total price |
| action | 130 | Change Start Time |
| action | 140 | Change Start Location |
| action | 150 | Add a comment |
Condition field short codes apendix
| Field | CODE | Description |
|---|---|---|
| condition | 100 | Searching Date |
| condition | 102 | Start Date |
| condition | 103 | Start Time |
| condition | 104 | Start Location |
| condition | 105 | End Date |
| condition | 106 | End Time |
| condition | 107 | End Location |
| condition | 108 | Weekday of Searching |
| condition | 109 | Weekday of Start |
| condition | 110 | Weekday of End |
| condition | 111 | Contains Date |
| condition | 112 | Contains Weekday |
| condition | 113 | Days ahead of start date |
| condition | 148 | Booking Days |
| condition | 114 | Total Cost |
| condition | 115 | Times Applied |
| condition | 116 | Affiliate |
| condition | 117 | Booking Source |
| condition | 147 | Reservation Between |
| condition | 119 | Coupon code |
| condition | 120 | Start Location in Zone |
| condition | 121 | End Location in Zone |
| condition | 122 | Minutes ahead of start timeb |
| condition | 123 | Booking slots in minutes |
| condition | 124 | Distance in meters |
Request OPERATOR shortcodes anpedix
| Field | CODE | Description |
|---|---|---|
| operator | >= | Greater or equal |
| operator | >* | Greater |
| operator | <= | Lower or equal |
| operator | <* | Lower |
| operator | == | Equal |
| operator | != | Not equal |
| operator | <> | Between |
| operator | !<> | Not between |
Create new Sales Policy ¶
Body
{
"title": "30% discount",
"action": 120,
"action_value": "-15%"
}
Body
{
"data": {
"id": 1831,
"title": "30% discount",
"valid_from": "2018-01-01",
"valid_to": "2030-01-01",
"action": "Set price to a fixed amount per spot",
"action_value": "-15%",
"hide": false,
"ordering": 10,
"rules": [
{
"name": 120,
"operator": "==",
"value": 145
}
],
"price_list_ids": "3455, 3756"
}
}
Body
{
"title": "30% discount",
"action": 120,
"action_value": "-15%",
"hide": "true",
"conditions": "140==145;141==146",
"price_lists_ids": "All or 33221,2223,33433",
"valid_from": "2018-01-01",
"valid_to": "2040-01-01"
}
Body
{
"data": {
"id": 1831,
"title": "30% discount",
"valid_from": "2018-01-01",
"valid_to": "2030-01-01",
"action": "Set price to a fixed amount per spot",
"action_value": "-15%",
"hide": false,
"ordering": 10,
"rules": [
{
"name": 120,
"operator": "==",
"value": 145
}
],
"price_list_ids": "3455, 3756"
}
}
Create new Sales Policy
POST/api/sales
[BETA] When you create a sales policy you must specify at least one service (or price list) as scope to be applied.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
A title, action, action_value are required to create an Sales policy |
A title, action, action_value are required to create an Sales policy |
400 |
No action with this short code exists. Please check Action Shortcodes and try
again! |
No action with this short code exists. Please check Action Shortcodes and try again! |
Delete a Sales Policy ¶
Body
{
"id": 12344
}
Body
{
"data": {
"id": 12344,
"deleted": true,
"message": "The resource deleted"
}
}
Delete a Sales Policy
DELETE/api/sales
[BETA] Delete a sales policy
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
An id is requird to delete this resource |
An id is requird to delete this resource |
Orders ¶
The Orders endpoints returns information about the workadu Orders (Bookings) that have been made by the authenticated user. The response includes the display name and other details and groups of info about each order, and lists the orders in the proper display order as they are stored initial at the database. You can re-sort the results by add sorting filter at your request as show here.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/orders/ | Check for availability and create a new order |
| GET | /api/orders/ | Get logged in user related order(s) |
| GET | /api/orders/{booking_id}{booking_id},… | Get details about specific order(s) |
| PATCH | /api/orders/{booking_id} | Cancel the specific order and copy to a new one with the updated post info. This endpoint can be used for updating order info |
| DELETE | /api/orders/{booking_id} | Check and cancel an existing order. |
Create new Order ¶
Body
{
"start_coordinates": "(36.8915064, 27.2877228)",
"start_location_name": "Kos town",
"start_date": "2018-07-18",
"start_time": "11:00",
"end_coordinates": "(36.8915064, 27.2877228)",
"end_location_name": "Kos town",
"end_date": "2018-07-18",
"end_time": "11:59",
"service_id": 33357,
"customer_id": 2111,
"selected_slots": "11:00",
"slot_start_time": "11:00",
"slot_end_time": "11:59"
}
Body
{
"data": {
"id": 1831,
"reference": "4GELNA",
"company_id": 475,
"status": "PRE_ASSIGNED",
"customer": {
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
},
"total_cost": 55,
"orders": {
"order": {
"id": 6274,
"reference": 627401,
"service_id": "33273",
"start": {
"coordinates": "(39.074208, 21.824312)",
"location_name": "Main Desk",
"date": "2018-07-11",
"time": "08:09"
},
"end": {
"coordinates": "(39.074208, 21.824312)",
"location_name": "Main Desk",
"date": "2018-07-11",
"time": "08:09"
},
"comment": "``",
"status": "PRE_ASSIGNED",
"total_cost": 55,
"recource": {
"number": "Peg-1",
"type": "``",
"color": "``"
},
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
]
}
},
"currency": "$",
"payments": [
{
"id": 1810,
"issue_date": "2018-07-05",
"amount": 55,
"comments": "Payment for Booking #4GELNA"
}
]
}
}
Create new Order
POST/api/orders
Error codes
| HTTP status | Code | Description |
|---|---|---|
500 |
Undefined index: distance |
Distance between starting coordinates and the desks’(user role) locations cannot be resolved. |
400 |
No customer fullname was supplied! No mobile or email was supplied! |
There is no customer_id or customer fullname, email and mobile provided |
400 |
No customer found! |
There is no customer with the customer_id that was provided. |
400 |
There is no availability or rate set for this service for your selected
criteria |
There is on availability at the specific dates and time that was provided. Please try other dates or services. |
Get all Orders ¶
Body
{
"data": [
{
"id": 1831,
"reference": "4GELNA",
"company_id": 475,
"status": "PRE_ASSIGNED",
"customer": {
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
},
"total_cost": 55,
"orders": {
"order": {
"id": 6274,
"reference": 627401,
"service_id": "33273",
"start": {
"coordinates": "(39.074208, 21.824312)",
"location_name": "Main Desk",
"date": "2018-07-11",
"time": "08:09"
},
"end": {
"coordinates": "(39.074208, 21.824312)",
"location_name": "Main Desk",
"date": "2018-07-11",
"time": "08:09"
},
"comment": "``",
"status": "PRE_ASSIGNED",
"total_cost": 55,
"recource": {
"number": "Peg-1",
"type": "``",
"color": "``"
},
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
]
}
},
"currency": "$",
"payments": [
{
"id": 1810,
"issue_date": "2018-07-05",
"amount": 55,
"comments": "Payment for Booking #4GELNA"
}
]
}
]
}
Get all Orders
GET/api/orders/
- filter[booking_reference]
string(optional) Example: VBV7DHFilter orders by booking reference.
- filter[booking_status]
string(optional) Example: PAIDFilter orders by booking status.
Choices:
ON_PROGRESSPAIDNOT_PAID- filter[company_id]
integer(optional) Example: 14The companyid of the specific company you want orders from.
- filter[customer_id]
integer(optional) Example: 119Filter orders by the id of a specific customer.
- filter[service_id]
integer(optional) Example: 32161Filter orders by the id of a specific service.
- filter[start_coordinates]
string(optional) Example: (39.074208, 21.824312)Filter orders by the coordinates of a specific starting point.
- filter[start_location_name]
string(optional) Example: LondonFilter orders by the name of a specific starting point.
- filter[end_coordinates]
string(optional) Example: (39.074208, 21.824312)Filter orders by the coordinates of a specific ending point.
- filter[end_location_name]
string(optional) Example: LondonFilter orders by the name of a specific ending point.
- filter[status]
string(optional) Example: CANCELLEDFilter orders by the status of the order.
Choices:
PRE_ASSIGNEDASSIGNED_NOT_CONFIRMEDASSIGNED_AND_AGREEDCHECKED_OUTCHECKED_INCHECKED_IN_EARLIERCANCELLED- filter[total_cost]
float(optional) Example: 20.00Filter orders by checking the total cost of each order. Operators may be applied here.
- filter[start_date]
string(optional) Example: 2018-08-30Filter orders by checking the starting date of each order. Operators may be applied here.
- filter[start_time]
string(optional) Example: 13:00Filter orders by checking the starting time of each order. Operators may be applied here.
- filter[end_date]
string(optional) Example: 2018-08-31Filter orders by checking the ending date of each order. Operators may be applied here.
- filter[end_time]
string(optional) Example: 18:00Filter orders by checking the ending time of each order. Operators may be applied here.
Get Specific Order ¶
Body
{
"data": [
{
"id": 1831,
"reference": "4GELNA",
"company_id": 475,
"status": "PRE_ASSIGNED",
"customer": {
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
},
"total_cost": 55,
"orders": {
"order": {
"id": 6274,
"reference": 627401,
"service_id": "33273",
"start": {
"coordinates": "(39.074208, 21.824312)",
"location_name": "Main Desk",
"date": "2018-07-11",
"time": "08:09"
},
"end": {
"coordinates": "(39.074208, 21.824312)",
"location_name": "Main Desk",
"date": "2018-07-11",
"time": "08:09"
},
"comment": "``",
"status": "PRE_ASSIGNED",
"total_cost": 55,
"recource": {
"number": "Peg-1",
"type": "``",
"color": "``"
},
"extras": [
{
"id": 2593,
"name": "baby seat",
"description": "Baby seat description",
"media": "``",
"params": {
"rangeMax": 2,
"rangeMin": 1,
"price": 5,
"fixedPrice": 3,
"parent": "null (null,nullable)"
}
}
]
}
},
"currency": "$",
"payments": [
{
"id": 1810,
"issue_date": "2018-07-05",
"amount": 55,
"comments": "Payment for Booking #4GELNA"
}
]
}
]
}
Get Specific Order
GET/api/orders/{booking_id}
- booking_id
integer(optional) Example: 1831you can specify more booking_id separated by comma
,
Update an Order ¶
Body
{
"id": 992
}
Body
{
"data": {
"op": "replace",
"path": "/id",
"value": "992"
}
}
Update an Order
PATCH/api/orders/{booking_id}
Cancels the specific order and creates a new one based on POST parameters. If any manatory paramenter are not provided they will be copied from the canceled order
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
This order can not be modified in its current state. |
If order status is “CANCELLED” cannot be tested. |
400 |
This order can not be tested using the data you provided. |
You might have not provide order id, or your request parameters are not valid. |
- booking_id
integer(optional) Example: 1831the id of the specific order
Delete an Order ¶
Body
{
"data": {
"op": "replace",
"path": "/status",
"value": "CANCELLED"
}
}
Delete an Order
DELETE/api/orders/{booking_id}
Check and cancel an existing order. The status of the specific order should be ‘PRE_ASSIGNED’, ‘NOT_PAID’ or ‘ASSIGNED_NOT_CONFIRMED’. In any other case response with a 400 Error.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
You must provide the order ID(s) |
If order status is CANCELLED cannot be tested. |
400 |
No orders found to be canceled. |
The order ids you specified cannot be found, or cannot be canceled. Cancelation can be
done only in order that their status is PRE_ASSIGNED, NOT_PAID
or ASSIGNED_NOT_CONFIRMED and belong to the authenticated user.
|
- booking_id
integer(optional) Example: 32161the id of the specific order.
Customers ¶
The Customers endpoints returns information about the workadu Customers that have been made by the authenticated user. In case user is has a “companyadmin” role, then the results contain all the customers that belong at user company. The response includes the display name and other details and groups of info about each customer, and lists the customers in the proper display order as they are stored initial at the database. You can re-sort the results by add sorting filter at your request as show here.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/customers/ | Get logged in user related customers. In case user is has a “companyadmin” role, then the results contain all the customers that belong at user company |
| GET | /api/customers/{customer_id}{customer_id},… | Get specific customers details |
| POST | /api/customers/ | Add a new customer |
| PATCH | /api/customers/{customer_id} | Update customer’s details. |
Create a new Customer ¶
Body
{
"fullname": "John Doe",
"email": "johnydoe@doe.com",
"city": "Athens",
"address": "Patisiwn 11",
"postal_code": 13211,
"country": "GRC",
"mobile": 1112223334,
"vat_number": "112233",
"birthdate": "1985-02-11",
"gender": "M",
"social": "social=[{“social”:”facebook.com”, “alias”:”johndoe”}]",
"title": "Example company name",
"tax_office": "ATHENS TAX OFFICE",
"business_type": "Lawyer",
"companyid": 475
}
Body
{
"data": {
"id": 3332,
"fullname": "John Doe",
"email": "johnydoe@doe.com",
"mobile": 1112223334,
"country": "GRC",
"city": "Athens",
"address": "Patisiwn 11",
"postal_code": 13211,
"vat_number": "112233",
"birthdate": "1985-02-11",
"gender": "M",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"title": "Example company name",
"tax_office": "ATHENS TAX OFFICE",
"business_type": "Lawyer",
"companyid": 475,
"media": [
"http://stage.reservationengine.net/assets/images/aueb-475/1531817042-pic2.png"
]
}
}
Create a new Customer
POST/api/customers/
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
A fullname and an email are mandatory data for a new customer |
Fullname and email are mandatory post parameters. |
400 |
The email you supplied is malformed! |
Please check the customer’s email format. |
List all Customers ¶
Body
{
"data": {
"id": 3332,
"fullname": "John Doe",
"email": "johnydoe@doe.com",
"mobile": 1112223334,
"country": "GRC",
"city": "Athens",
"address": "Patisiwn 11",
"postal_code": 13211,
"vat_number": "112233",
"birthdate": "1985-02-11",
"gender": "M",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"title": "Example company name",
"tax_office": "ATHENS TAX OFFICE",
"business_type": "Lawyer",
"companyid": 475,
"media": [
"http://stage.reservationengine.net/assets/images/aueb-475/1531817042-pic2.png"
]
}
}
List all Customers
GET/api/customers/
- filter[fullname]
string(optional) Example: John DoeThe fullname of customer(s) you want details from.
- filter[email]
string(optional) Example: jdoe@gmail.comThe email of customer(s) you want details from.
- filter[mobile]
string(optional) Example: +4469960022The mobile of customer(s) you want details from.
- filter[Country]
string(optional) Example: UKThe country of customer(s) you want details from. ISO Country codes should be used.
- filter[city]
string(optional) Example: LondonThe city of customer(s) you want details from.
- filter[postal_code]
string(optional) Example: N1 7GUThe city of customer(s) you want details from.
- filter[company_id]
integer(optional) Example: 14The company id of customer(s) you want details from.
Get a specific Customer ¶
Body
{
"data": {
"id": 3332,
"fullname": "John Doe",
"email": "johnydoe@doe.com",
"mobile": 1112223334,
"country": "GRC",
"city": "Athens",
"address": "Patisiwn 11",
"postal_code": 13211,
"vat_number": "112233",
"birthdate": "1985-02-11",
"gender": "M",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"title": "Example company name",
"tax_office": "ATHENS TAX OFFICE",
"business_type": "Lawyer",
"companyid": 475,
"media": [
"http://stage.reservationengine.net/assets/images/aueb-475/1531817042-pic2.png"
]
}
}
Get a specific Customer
GET/api/customers/{customer_id}
- customer_id
integer(optional) Example: 3332The id for the specific customer.
Update a Customer ¶
Body
{
"fullname": "John Doe",
"email": "johnydoe@doe.com",
"city": "Athens",
"address": "Patisiwn 11",
"postal_code": 13211,
"country": "Greece",
"mobile": 1112223334,
"vat_number": "112233",
"birthdate": "1985-02-11",
"gender": "M",
"social": "social=[{“social”:”facebook.com”, “alias”:”johndoe”}]",
"title": "Example company name",
"tax_office": "ATHENS TAX OFFICE",
"business_type": "Lawyer",
"companyid": 475
}
Body
{
"data": {
"op": "replace",
"path": "/fullname",
"value": "Jordan Johnson"
}
}
Update a Customer
PATCH/api/customers/{customer_id}
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
No customers could be found. |
The customer_id you provided is not in authenticated user customer list. |
400 |
Please provide a customer_id! |
The endpoint doesn’t have a valid customer_id. |
- customer_id
integer(optional) Example: 32161The id for the specific customer.
Invoices ¶
The Invoices/documents resource return information about workadu invoices or any other document type. Invoices can be automatically or manualy generated by user or API.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/invoices/{invoice_id}{invoice_id},… | Get invoices |
| POST | /api/invoices/ | Add a new Invoice |
| PUT | /api/invoices/{invoice_id} | Update an Invoice |
| POST | /api/invoiceline/ | Add a new invoice line |
| GET | /api/series/{series_id}{series_id},… | Get company series |
| POST | /api/invoices/publish | Publish a Draft invoice and optionaly send it to email |
List Invoices ¶
Body
curl https://app.workadu.com/api/invoices \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22"
}
}
- Integrated with aade
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22",
"aade": [
{
"id": 5,
"mark": 400023432432,
"uid": "F123LKAD81ABJALBADAF",
"should_send": true
}
]
}
}
Body
curl https://app.workadu.com/api/invoices/1234 \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
-d customer_id = 1234 \
-d series_id = 2100 \
-d issue_date_from = 2019-01-01 \
-d issue_date_to = 2019-03-01
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22"
}
}
- Integrated with aade
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22",
"aade": [
{
"id": 5,
"mark": 400023432432,
"uid": "F123LKAD81ABJALBADAF",
"should_send": true
}
]
}
}
List Invoices
GET/api/invoices/
- customer_id
number(optional) Example: 12443The id of the customer.
- series_id
number(optional) Example: 1233The document series_id you want to get .
- status
string(optional) Example: validThe invoice status (valid, draft, cancelled).
- issue_date_from
string(optional) Example: 2018-01-13The issue date you want to get invoice from.
- issue_date_to
string(optional) Example: 2018-01-22The issue date you want to get invoice to.
- aade_should_send
number(optional) Example: 1Fetch invoices that should send to mydata.
Create a new Invoice ¶
Body
curl https://app.workadu.com/api/invoices \
-u wk_abcd123123abcd1234: \
-d customer_id = 1234 \
-d series_id = 2100
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22"
}
}
Body
curl https://app.workadu.com/api/invoices \
-u wk_abcd123123abcd1234: \
-d customer_id = 1234 \
-d series_id = 2100 \
-d discount_percent = 10 \
-d vat_percent = 19 \
-d currency = "EUR" \
-d payment_type = 1222 \
-d tag = "#2AMSJ72"
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22"
}
}
Create a new Invoice
POST/api/invoices/
This endpoint create an invoice (draft if status is not defined), for a given customer.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 You didn’t specify a correct customer ID. |
Please provide a valid customer_id as a POST parameter | |
400 |
You didn’t specify a correct series ID. |
Please provide a valid series_id as a POST parameter |
- customer_id
number(required) Example: 1231The customer id of the specific invoice. if not status parameter is set the invoice will be set up as a draft invoice.
- series_id
number(required) Example: 1231The series id of the document.
- invoice_num
number(optional) Example: 1Invoice number
- discount_percent
number(optional) Example: 10A discount percent for the all invoice lines
- vat_percent
number(optional) Example: 19A vat percent of this specific invoice. In case of not set company vat percent will be used.
- currency
string(optional) Example: EURThe currency of this specific invoice. In case of not set company currency will be used.
- payment_type
number(optional) Example: 1222The series of the payment type of the invoice. This is required when the invoice is for digital tax.
- tag
string(optional) Example: 'Expense'The tag of this specific invoice.
- recipient_id
string(optional) Example: 1231The customer id acting as the recipient of the specific invoice. If not set, the customer will be automatically selected. Used in delivery notes.
- sender_id
string(optional) Example: 1231The customer id acting as the sender of the specific invoice. If not set, the company will be automatically selected. Used in delivery notes.
- transporter_id
string(optional) Example: 1231The customer id acting as the transporter of the specific invoice. If not set, the suggested transported if the selected series will be selected. Required in delivery notes.
- recipient_third_id
string(optional) Example: 1231The customer id acting as the recipient third party of the specific invoice. Used in cases of third party invoilved in the invoice. Used in delivery notes.
- sender_third_id
string(optional) Example: 1231The customer id acting as the sender third party of the specific invoice. Used in cases of third party invoilved in the invoice. Used in delivery notes.
- move_purpose
number(optional) Example: 1The move purpose of the invoice (see table 1). If not set, “1: sale” will be automatically selected. Used in delivery notes.
- other_move_purpose
string(optional) Example: 1231Other move purpose of the invoice. Required if move_purpose = 19 (Other Reason of Movement).
- state_budget
number(optional) Example: 1State budget available options: 1, 2, 3. Required in B2G cases.
- contract_reference
string(optional) Example: 1231Contract reference. Required in B2G cases.
- contract_reference_code
string(optional) Example: 1231Contract reference code. Required in B2G cases.
- assigning_authority_code
string(optional) Example: 0000.E00000.0000Assigning authority code. Required in B2G cases.
Update an Invoice ¶
Body
curl https://app.workadu.com/api/invoice/12321\
-u wk_abcd123123abcd1234: \
-d payment_type = 2100
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22"
}
}
Body
curl https://app.workadu.com/api/invoice/123123 \
-u wk_abcd123123abcd1234: \
-d customer_id = 1234 \
-d payment_type = 1222 \
-d tag = "#2AMSJ72" \
-d notes = "Some notes"
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22"
}
}
Update an Invoice
PUT/api/invoices/
This endpoint update an invoice, for its basic info.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
Validation erros |
Please provide a valid invoice_id as a PUT parameter |
- customer_id
number(required) Example: 1231The customer id of the specific invoice.
- invoice_num
number(optional) Example: 1Invoice number
- payment_type
number(optional) Example: 1222The series of the payment type of the invoice. This is required when the invoice is for digital tax.
- tag
string(optional) Example: 'Expense'The tag of this specific invoice.
- notes
string(optional) Example: 'footer notes'Add footer notes as text to the invoice.
Create a new Invoice line ¶
Body
{
"invoice_id": 1231,
"description": "2 days charge",
"amount": "12.00"
}
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22"
}
}
Body
{
"invoice_id": 1231,
"description": "2 days charge",
"amount": 12,
"quantity": 1,
"line_discount": 10
}
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22"
}
}
Create a new Invoice line
POST/api/invoiceline/
This endpoint create an invoice item line to be added to a draft invoice.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
The invoice is not in Draft mode |
Please check the invoice status then |
400 |
The invoice is not valid or exist |
The invoice_id does not exist |
- invoice_id
number(required) Example: 1231The invoice id of the draft invoice.
- description
string(optional) Example: lorem ipsumThe description of this specific invoice line.
- amount
float(required) Example: 20.00Price of the item of this specific invoice line. (net or gross determined by includes_vat field of the invoice).
- quantity
float(required) Example: 10Quantity of this specific invoice line.
- line_discount
float(optional) Example: 20.00A discount percentage of this specific invoice line.
- vat_percent
string(required) Example: 24.00- aade_measurement_code
number(optional) Example: 1The aade measurement code of this specific invoice line (see table 2). Required in delivery notes.
- measurement_code
number(optional) Example: 1The european measurement code of this specific invoice line (see table 2). Required in B2G cases.
- cpv_code
number(optional) Example: 1The cpv code of this specific invoice line (see table 2). Required in B2G cases.
List company Series ¶
Body
{
"data": {
"id": 911,
"title": "Invoice",
"last_number": 123,
"type": "fiscal"
}
}
List company Series
GET/api/series/series_id
Seies are the documents type. For example series can be Invoice, Expense, Quote or payment types like cash, credit card, deposit
Publish a draft Invoice ¶
Body
{
"invoice_id": 1231,
"send": true
}
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22"
}
}
Body
curl https://app.workadu.com/api/services \
-u wk_abcd123123abcd1234: \
-d invoice_id = 1234 \
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22"
}
}
Body
curl https://app.workadu.com/api/services \
-u wk_abcd123123abcd1234: \
-d invoice_id = 1234 \
-d send = true
Body
{
"data": {
"id": 123212,
"invoice_number": "A-1233",
"series": "INVOICE",
"user": [
{
"id": 123212,
"email": "hello@workadu.com"
}
],
"customer": [
{
"id": 911,
"fullname": "David Oregon",
"email": "info@davidoregon.com"
}
],
"issue_date": "2018-01-13",
"due_date": "2018-02-13",
"discount_amount": 4,
"vat_amount": 2,
"total_amount": 14,
"currency": "EUR",
"currency_rate": 1,
"lines": [
{
"id": 911,
"description": "For sale",
"quantity": 1,
"solo_amount": 10,
"total_amount": 20,
"discount_percent": 10,
"vat_percent": 0,
"final_amount": 18
}
],
"status": "VALID",
"tag": "#ASS4J22"
}
}
Publish a draft Invoice
POST/api/invoices/publish/
This endpoint publish an already created invoice, and optionally send it to customer as PDF through email using the relative email template.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
You didn't specify a correct invoice ID. |
Please provide a valid invoice_id as a POST parameter |
400 |
The invoice is already published with the same number! |
Please provide a unique invoice number |
- invoice_id
number(required) Example: 1231The invoice id of the specific resource.
- send
boolean(optional) Example: trueIf this is set to
truethen the invoice will be published and send to customer. If not the end point will only publish the invoice.- aade_send
boolean(optional) Example: trueSend invoice to mydata. If set to
trueinvoice will always be send. If set tofalsethe invoice will never send. If the parameter is not set at all the invoice will be send depending on theauto_sendsetting in the invoice’s series.
List withholdings ¶
Body
{
"data": [
{
"id": 1,
"invoice_id": 5,
"label": "Example withholding label",
"type": "flat",
"percentage_value": 30,
"flat_value": 45,
"underlying_value": 150,
"aade_tax_type_id": 5,
"created_at": "2022-01-25 21:21:53",
"updated_at": "2022-01-25 21:21:53"
}
]
}
Body
{
"message": "No query results for model [Invoice] 1",
"status_code": 404
}
List withholdings
GET/api/invoices/{invoiceId}/withholdings
This endpoint lists all withholdings for the given invoice
- invoiceId
integer(required)Invoice’s id
Get a specific withholding ¶
Body
{
"data": {
"id": 1,
"invoice_id": 5,
"label": "Example withholding label",
"type": "flat",
"percentage_value": 30,
"flat_value": 45,
"underlying_value": 150,
"aade_tax_type_id": 5,
"created_at": "2022-01-25 21:21:53",
"updated_at": "2022-01-25 21:21:53"
}
}
Body
{
"message": "No query results for model [Invoice] 1",
"status_code": 404
}
Body
{
"message": "No query results for model [Withholding] 1",
"status_code": 404
}
Get a specific withholding
GET/api/invoices/{invoiceId}/withholdings/{withholdingId}
This endpoint lists all withholdings for the given invoice
- invoiceId
integer(required)Invoice’s id
- withholdingId
integer(required)Withholdings’s id
Create a withholding ¶
Body
{
"label": "Example withholding",
"type": "percent",
"percentage_value": "30",
"flat_value": "45",
"underlying_value": "150",
"aade_tax_type_id": "5",
"aade_tax_category_id": "1"
}
Body
{
"data": {
"id": 1,
"invoice_id": 5,
"label": "Example withholding label",
"type": "flat",
"percentage_value": 30,
"flat_value": 45,
"underlying_value": 150,
"aade_tax_type_id": 5,
"created_at": "2022-01-25 21:21:53",
"updated_at": "2022-01-25 21:21:53"
}
}
Body
{
"message": "No query results for model [Invoice] 1",
"status_code": 404
}
Body
{
"message": "The given data was invalid.",
"errors": {
"label": [
"The label field is required."
],
"type": [
"The type field is required."
],
"underlying_value": [
"The underlying value field is required."
],
"aade_tax_type_id": [
"The aade tax type id field is required."
]
},
"status_code": 422
}
Create a withholding
POST/api/invoices/{invoiceId}/withholdings
This creates a withholding for the given invoice
- invoiceId
string(required)Invoice to add the withholding to
- label
string(required) Example: Example withholdingShort description for the withholding.
- type
string(required) Example: percentWithholding type. Accepts percent (1 to 100) or flat
- percentage_value
numeric(optional) Example: 30Percentage value of the withholding, required when type is set to “percent”
- flat_value
numeric(optional) Example: 10Flat value of the withholding, required when type is set to “flat”
- underlying_value
numeric(optional) Example: 100Underlying value of the withholding. If not set the amount of the invoice will be used by default.
- aade_tax_type_id
integer(required) Example: 5Aade tax type. For the available tax types see Get aade tax types endproint
- aade_tax_category_id
integer(required) Example: '1'Aade tax category id, required when aade_tax_type_id is different than 5. For available aade tax categories see Get aade tax categories endproint
Update a withholding ¶
Body
{
"label": "new label"
}
Body
{
"data": {
"id": 1,
"invoice_id": 5,
"label": "new label",
"type": "flat",
"percentage_value": 30,
"flat_value": 45,
"underlying_value": 150,
"aade_tax_type_id": 5,
"created_at": "2022-01-25 21:21:53",
"updated_at": "2022-01-25 21:21:53"
}
}
Update a withholding
PUT/api/invoices/{invoiceId}/withholdings/{withholdingId}
This endpoint is used to update a withholding for the given invoice You need to send only the parameters that need to be updated
- invoiceId
string(required)Invoice to add the withholding to
- withholdingId
integer(required)Withholdings’s id
- label
string(optional) Example: Example withholdingShort description for the withholding.
- type
string(optional) Example: percent|flatWithholding type. Accepts percent (1 to 100) or flat
- percentage_value
numeric(optional) Example: 30Percentage value of the withholding, required when type is set to “percent”
- flat_value
numeric(optional) Example: 10Flat value of the withholding, required when type is set to “flat”
- underlying_value
numeric(optional) Example: 100Underlying value of the withholding
- aade_tax_type_id
integer(required) Example: 5Aade tax type. For the available tax types see Get aade tax types endproint
- aade_tax_category_id
integer(required) Example: '1'Aade tax category id, required when aade_tax_type_id is different than 5. For available aade tax categories see Get aade tax categories endproint
Delete a withholding ¶
Body
{
"data": {
"id": 1,
"invoice_id": 5,
"label": "Example withholding label",
"type": "flat",
"percentage_value": 30,
"flat_value": 45,
"underlying_value": 150,
"aade_tax_type_id": 5,
"created_at": "2022-01-25 21:21:53",
"updated_at": "2022-01-25 21:21:53"
}
}
Body
{
"message": "No query results for model [Invoice] 1",
"status_code": 404
}
Body
{
"message": "No query results for model [Withholding] 1",
"status_code": 404
}
Delete a withholding
DELETE/api/invoices/{invoiceId}/withholdings/{withholdingId}
This endpoint deletes a withholding for the given invoice
- invoiceId
integer(required)Invoice’s id
- withholdingId
integer(required)Withholdings’s id
Get aade tax types ¶
Body
{
"data": [
{
"id": "1",
"name": "Παρακρατούμενος Φόρος"
},
{
"id": "2",
"name": "Τέλη"
},
{
"id": "3",
"name": "Λοιποί Φόροι"
},
{
"id": "4",
"name": "Χαρτόσημο "
},
{
"id": "5",
"name": "Κρατήσεις"
}
]
}
Get aade tax types
GET/api/withholdings/aade-tax-types
List all aade withholding types
Get aade tax categories ¶
Body
{
"data": [
{
"id": 1,
"name": "Περιπτ. β’- Τόκοι - 15%"
},
{
"id": 2,
"name": "Περιπτ. γ’ - Δικαιώματα - 20%"
},
{
"id": 3,
"name": "Περιπτ. δ’ - Αμοιβές Συμβουλών Διοίκησης - 20%"
},
{
"id": 4,
"name": "Περιπτ. δ’ - Τεχνικά Έργα - 3%"
},
{
"id": 5,
"name": "Υγρά καύσιμα και προϊόντα καπνοβιομηχανίας 1%"
},
{
"id": 6,
"name": "Λοιπά Αγαθά 4%"
},
{
"id": 7,
"name": "Παροχή Υπηρεσιών 8%"
},
{
"id": 8,
"name": "Προκαταβλητέος Φόρος Αρχιτεκτόνων και Μηχανικών επί Συμβατικών Αμοιβών, για Εκπόνηση Μελετών και Σχεδίων 4%"
},
{
"id": 9,
"name": "Προκαταβλητέος Φόρος Αρχιτεκτόνων και Μηχανικών επί Συμβατικών Αμοιβών, που αφορούν οποιασδήποτε άλλης φύσης έργα 10%"
},
{
"id": 10,
"name": "Προκαταβλητέος Φόρος στις Αμοιβές Δικηγόρων 15%"
},
{
"id": 11,
"name": "Παρακράτηση Φόρου Μισθωτών Υπηρεσιών παρ. 1 αρ. 15 ν. 4172/2013"
},
{
"id": 12,
"name": "Παρακράτηση Φόρου Μισθωτών Υπηρεσιών παρ. 2 αρ. 15 ν. 4172/2013 - Αξιωματικών Εμπορικού Ναυτικού"
},
{
"id": 13,
"name": "Παρακράτηση Φόρου Μισθωτών Υπηρεσιών παρ. 2 αρ. 15 ν. 4172/2013 - Κατώτερο Πλήρωμα Εμπορικού Ναυτικού"
},
{
"id": 14,
"name": "Παρακράτηση Ειδικής Εισφοράς Αλληλεγγύης"
},
{
"id": 15,
"name": "Παρακράτηση Φόρου Αποζημίωσης λόγω Διακοπής Σχέσης Εργασίας παρ. 3 αρ. 15 ν. 4172/2013"
},
{
"id": 16,
"name": "α1) ασφάλιστρα κλάδου πυρός 20%"
},
{
"id": 17,
"name": "α2) ασφάλιστρα κλάδου πυρός 20%"
},
{
"id": 18,
"name": "β) ασφάλιστρα κλάδου ζωής 4%"
},
{
"id": 19,
"name": "γ) ασφάλιστρα λοιπών κλάδων 15%"
},
{
"id": 20,
"name": "δ) απαλλασσόμενα φόρου ασφαλίστρων 0%."
},
{
"id": 21,
"name": "Ξενοδοχεία 1-2 αστέρων 0,50 €"
},
{
"id": 22,
"name": "Ξενοδοχεία 3 αστέρων 1,50 €"
},
{
"id": 23,
"name": "Ξενοδοχεία 4 αστέρων 3,00 €"
},
{
"id": 24,
"name": "Ξενοδοχεία 4 αστέρων 4,00 €"
},
{
"id": 25,
"name": "Ενοικιαζόμενα - επιπλωμένα δωμάτια - διαμερίσματα 0,50 €"
},
{
"id": 26,
"name": "Ειδικός Φόρος στις διαφημίσεις που προβάλλονται από την τηλεόραση (ΕΦΤΔ) 5%"
},
{
"id": 27,
"name": "3.1 Φόρος πολυτελείας 10% επί της φορολογητέας αξίας για τα ενδοκοινοτικώς αποκτούμενα και εισαγόμενα από τρίτες χώρες 10%"
},
{
"id": 28,
"name": "3.2 Φόρος πολυτελείας 10% επί της τιμής πώλησης προ Φ.Π.Α. για τα εγχωρίως παραγόμενα είδη 10%"
},
{
"id": 29,
"name": "Δικαίωμα του Δημοσίου στα εισιτήρια των καζίνο (80% επί του εισιτηρίου)"
},
{
"id": 30,
"name": "Συντελεστής 1,2 %"
},
{
"id": 31,
"name": "Συντελεστής 2,4 %"
},
{
"id": 32,
"name": "Συντελεστής 3,6 %"
},
{
"id": 33,
"name": "Για μηνιαίο λογαριασμό μέχρι και 50 ευρώ 12%"
},
{
"id": 34,
"name": "Για μηνιαίο λογαριασμό από 50,01 μέχρι και 100 ευρώ 15%"
},
{
"id": 35,
"name": "Για μηνιαίο λογαριασμό από 100,01 μέχρι και 150 ευρώ 18%"
},
{
"id": 36,
"name": "Για μηνιαίο λογαριασμό από 150,01 ευρώ και άνω 20%"
},
{
"id": 37,
"name": "Τέλος καρτοκινητής επί της αξίας του χρόνου ομιλίας (12%)"
},
{
"id": 38,
"name": "Τέλος στη συνδρομητική τηλεόραση 10%"
},
{
"id": 39,
"name": "Τέλος συνδρομητών σταθερής τηλεφωνίας 5%"
},
{
"id": 40,
"name": "Περιβαλλοντικό Τέλος & πλαστικής σακούλας ν. 2339/2001 αρ. 6α 0,07 ευρώ ανά τεμάχιο"
},
{
"id": 41,
"name": "Εισφορά δακοκτονίας 2%"
}
]
}
Get aade tax categories
GET/api/withholdings/aade-tax-categories
List all aade withholding categories
- tax_type_id
number(optional) Example: 1Get categories for a specific tax_type_id.
Payments ¶
The payments has only one POST endpoint. You can always add new payments. If you like to discard a payment you have to add a new one with minus amount. You cannot delete or modify or get details for a payment. as shown here.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/payments/payment_id1,payment_id1,… | Get Payments |
| POST | /api/payments/ | Add a new payment for invoices |
| POST | /api/payments/ | Add a new payment for an Order or Booking |
| POST | /api/payments/ | Add a new general payment for a customer |
List Payments ¶
Body
curl https://app.workadu.com/api/payments \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
Body
{
"data": {
"issue_date": "2016-09-14",
"customer_id": 359,
"series": "Cash",
"transaction_num,": 15,
"amount": 80,
"currency": "$",
"comments": "Payment for the Order #1015",
"order_id": 1015
}
}
Body
curl https://app.workadu.com/api/payments/1234 \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
-d customer_id = 1234 \
-d series_id = 2100 \
-d issue_date_from = 2019-01-01 \
-d issue_date_to = 2019-03-01
Body
{
"data": {
"issue_date": "2016-09-14",
"customer_id": 359,
"series": "Cash",
"transaction_num,": 15,
"amount": 80,
"currency": "$",
"comments": "Payment for the Order #1015",
"order_id": 1015
}
}
List Payments
GET/api/payments/
Get all company payments or filter them optionaly with parameters.
- customer_id
number(optional) Example: 12443The id of the customer.
- series_id
number(optional) Example: 1233The document series_id you want to get .
- status
string(optional) Example: validThe invoice status (valid, draft, cancelled).
- issue_date_from
string(optional) Example: 2018-01-13The issue date you want to get invoice from.
- issue_date_to
string(optional) Example: 2018-01-22The issue date you want to get invoice to.
Add a new Payment for Invoices ¶
Body
curl https://app.workadu.com/api/services \
-u wk_abcd123123abcd1234: \
-d invoice_ids = 1234, 1234 \
-d deposit = 100%
Body
{
"data": {
"issue_date": "2016-09-14",
"customer_id": 359,
"series": "Cash",
"transaction_num,": 15,
"amount": 80,
"currency": "$",
"comments": "Payment for the Order #1015",
"order_id": 1015
}
}
Add a new Payment for Invoices
POST/api/payments/
Pay an invoice or invoices should concern the same customer. This payment end point will add a payment and relate the payment with the invoices. The amount of the payment will be granted to customer’s balance.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
You didn’t specify a correct order_id or booking ID or customer_id. |
Payments are assigned to orders. You cannot pass a payment without defining a specific order. Please provide a valid booking_id as a POST parameter |
400 |
This order does not have the CANCELLED status! |
The only accepted status for adding a payment through this end point are:
NOT_PAID and CANCELLED |
- invoice_ids
string(required) Example: 1231, 1334, 14455The invoice_ids this payment will be related with. It works optionaly with deposit parameter & series parameter is optional.
- deposit
string(optional) Example: 157.22 or 30%If this is set to % (works in order_id, booking_id, invoice_ids) then it calulates at deposit amount the % of the total order or booking or invoices amount. If it set to amount mode then this specific amount will be added as payment
- series
number(optional) Example: 122The series of payment (e.g cash or credit card) for this payment. If none it will take the first payment type, usually CASH.
- comment
string(optional) Example: Payment for anythingThe comment that we want to add at the payment.
Add a new Payment for an Order or Booking ¶
Body
curl https://app.workadu.com/api/services \
-u wk_abcd123123abcd1234: \
-d order_id = 1234 \
-d deposit = 30%
Body
{
"data": {
"issue_date": "2016-09-14",
"customer_id": 359,
"series": "Cash",
"transaction_num,": 15,
"amount": 80,
"currency": "$",
"comments": "Payment for the Order #1015",
"order_id": 1015
}
}
Add a new Payment for an Order or Booking
POST/api/payments/
Pay an order or booking should concern the order or booking customer. This payment end point will add a payment and relate the payment with the order. The amount of the payment will be granted to customer’s balance.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
You didn’t specify a correct order_id or booking ID or customer_id. |
Payments are assigned to orders. You cannot pass a payment without defining a specific order. Please provide a valid booking_id as a POST parameter |
400 |
This order does not have the CANCELLED status! |
The only accepted status for adding a payment through this end point are:
NOT_PAID and CANCELLED |
- order_id
number(required) Example: 1231The order or booking Id your want to pay for. It works optionaly with deposit & series parameter
- deposit
string(optional) Example: 157.22 or 30%If this is set to % (works in order_id, booking_id, invoice_ids) then it calulates at deposit amount the % of the total order or booking or invoices amount. If it set to amount mode then this specific amount will be added as payment
- series
number(optional) Example: 122The series of payment (e.g cash or credit card) for this payment. If none it will take the first payment type, usually CASH.
- comment
string(optional) Example: Payment for anythingThe comment that we want to add at the payment.
Add a general Payment for a Customer ¶
Body
curl https://app.workadu.com/api/services \
-u wk_abcd123123abcd1234: \
-d customer_id = 1234 \
-d deposit = 100
-d comment = hello
-d series = 122
Body
{
"data": {
"issue_date": "2016-09-14",
"customer_id": 359,
"series": "Cash",
"transaction_num,": 15,
"amount": 80,
"currency": "$",
"comments": "Payment for the Order #1015",
"order_id": 1015
}
}
Add a general Payment for a Customer
POST/api/payments/
This payment end point will add a payment and and will not relate it with an order or invoice. The amount of the payment will be granted to customer’s balance.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
You didn’t specify a correct order_id or booking ID or customer_id. |
Payments are assigned to orders. You cannot pass a payment without defining a specific order. Please provide a valid booking_id as a POST parameter |
400 |
This order does not have the CANCELLED status! |
The only accepted status for adding a payment through this end point are:
NOT_PAID and CANCELLED |
- customer_id
number(required) Example: 1231The customer_Id your want to pay for. It works always with required deposit parameter. Series parameter is optional.
- deposit
string(required) Example: 157.22 or 30%If this is set to % (works in order_id, booking_id, invoice_ids) then it calulates at deposit amount the % of the total order or booking or invoices amount. If it set to amount mode then this specific amount will be added as payment
- series
number(optional) Example: 122The series of payment (e.g cash or credit card) for this payment. If none it will take the first payment type, usually CASH.
- comment
string(optional) Example: Payment for anythingThe comment that we want to add at the payment.
Companies ¶
The Companies endpoints returns information about the workadu Companies that have been assigned with the authenticated user. The response includes the display name and other details and groups of info about each company, and lists the companies in the proper display order as they are stored initial at the database. You can re-sort the results by add sorting filter at your request as show here.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/companies | Get logged in user related companies |
| GET | /api/companies/{company_id},{company_id},… | Get specific companies details |
List all Companies ¶
Body
{
"data": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "EL 078839923",
"swift_code": "BCINSDD23",
"currency": "$",
"logo": "",
"settings": {
"working_hours": [
{
"day": 0,
"start": "09:00",
"end": "17:30"
},
{
"day": 1,
"start": "09:00",
"end": "17:30"
},
{
"day": 2,
"start": "09:00",
"end": "17:30"
},
{
"day": 3,
"start": "09:00",
"end": "17:30"
},
{
"day": 4,
"start": "10:00",
"end": "17:30"
}
],
"work_load": 160,
"time_window": 1
}
}
}
List all Companies
GET/api/companies/
- filter[companyid]
number(optional) Example: 14The companyid of the specific company you want.
- filter[name]
string(optional) Example: bizz ltdFilter companies by the name of a specific company.
- filter[url]
string(optional) Example: bizz.comFilter companies by the url of a specific company.
- filter[email]
string(optional) Example: info@bizz.comFilter companies by the email of a specific company.
- filter[alias]
string(optional) Example: bizzFilter companies by the alias of a specific company.
Get specific Company ¶
Body
{
"data": {
"id": 14,
"name": "bizz",
"url": "Bizz.com",
"alias": "bizz",
"email": "info@reservationengine.net",
"phone": "1234567890",
"social": [
{
"social": "facebook.com",
"alias": "johndoe"
}
],
"vat_reg_num": "EL 078839923",
"swift_code": "BCINSDD23",
"currency": "$",
"logo": "",
"settings": {
"working_hours": [
{
"day": 0,
"start": "09:00",
"end": "17:30"
},
{
"day": 1,
"start": "09:00",
"end": "17:30"
},
{
"day": 2,
"start": "09:00",
"end": "17:30"
},
{
"day": 3,
"start": "09:00",
"end": "17:30"
},
{
"day": 4,
"start": "10:00",
"end": "17:30"
}
],
"work_load": 160,
"time_window": 1
}
}
}
Get specific Company
GET/api/companies/{company_id}
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
No companies could be found. |
There is no valid company id provided. |
- company_id
integer(optional) Example: 14The id for the specific company.
Assets ¶
The Assets endpoints return information about the vehicles (assets) that belong to the authenticated user’s company. You can list, search and sort assets, fetch specific ones, create new assets, update existing assets and delete assets that do not have related movements.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/assets | List all Assets |
| GET | /api/assets/{asset_id},{asset_id},… | Get specific Asset(s) by ID |
| POST | /api/assets | Create a new Asset |
| PATCH | /api/assets/{id} | Update an existing Asset |
| DELETE | /api/assets/{id} | Delete an Asset |
List all Assets ¶
Body
curl https://app.workadu.com/api/assets \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
Body
{
"data": [
{
"id": 123,
"vehicle_registration_number": "IKX1234",
"foreign_vehicle_registration_number": "",
"vehicle_category": "C",
"vehicle_factory": "TOYOTA",
"status": "Out of use",
"created_at": "2025-10-14T10:41:46+03:00"
},
{
"id": 124,
"vehicle_registration_number": "",
"foreign_vehicle_registration_number": "DE-AB1234",
"vehicle_category": "N1",
"vehicle_factory": "MERCEDES",
"status": "In use",
"created_at": "2025-10-14T10:41:46+03:00"
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 20,
"current_page": 1,
"total_pages": 1
}
}
}
Body
curl "https://app.workadu.com/api/assets?search=IKX&sort=-created_at&page=1" \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
Body
{
"data": [
{
"id": 123,
"vehicle_registration_number": "IKX1234",
"foreign_vehicle_registration_number": "",
"vehicle_category": "C",
"vehicle_factory": "TOYOTA",
"status": "In use",
"created_at": "2025-10-14T10:41:46+03:00"
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 20,
"current_page": 1,
"total_pages": 1
}
}
}
List all Assets
GET/api/assets
- search
string(optional) Example: IKXSearch term used to filter assets (e.g. registration number).
- sort
string(optional) Example: -created_atSort field (optionally prefixed with
-for descending). Allowed values:id,vehicle_registration_number,foreign_vehicle_registration_number,vehicle_category,vehicle_factory,created_at.- page
number(optional) Example: 1The page number of paginated results (20 assets per page).
Get specific Asset(s) ¶
Body
curl https://app.workadu.com/api/assets/123,124 \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
Body
{
"data": [
{
"id": 123,
"vehicle_registration_number": "IKX1234",
"foreign_vehicle_registration_number": "",
"vehicle_category": "C",
"vehicle_factory": "TOYOTA",
"status": "In use",
"created_at": "2025-10-14T10:41:46+03:00"
},
{
"id": 124,
"vehicle_registration_number": "",
"foreign_vehicle_registration_number": "DE-AB1234",
"vehicle_category": "N1",
"vehicle_factory": "MERCEDES",
"status": "In use",
"created_at": "2025-10-14T10:41:46+03:00"
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 20,
"current_page": 1,
"total_pages": 1
}
}
}
Get specific Asset(s)
GET/api/assets/{asset_id},{asset_id},…
- asset_id
string(required) Example: 123,124One or more asset IDs, separated by commas. Only assets that belong to the current company are returned.
Create Asset ¶
Body
curl https://app.workadu.com/api/assets \
-u wk_abcd123123abcd1234: \
-d vehicle_registration_number=IKX1234
Body
{
"data": {
"id": 130,
"vehicle_registration_number": "IKX1234",
"foreign_vehicle_registration_number": "",
"vehicle_category": "",
"vehicle_factory": "",
"status": "Out of use",
"created_at": "2025-10-14T10:41:46+03:00"
}
}
Body
curl https://app.workadu.com/api/assets \
-u wk_abcd123123abcd1234: \
-d foreign_vehicle_registration_number=DE-AB1234 \
-d vehicle_category=N1 \
-d vehicle_factory=MERCEDES
Body
{
"data": {
"id": 131,
"vehicle_registration_number": "",
"foreign_vehicle_registration_number": "DE-AB1234",
"vehicle_category": "N1",
"vehicle_factory": "MERCEDES",
"status": "Out of use",
"created_at": "2025-10-14T10:41:46+03:00"
}
}
``
Create Asset
POST/api/assets
This endpoint creates a new Asset for the current company. Exactly one of
vehicle_registration_number or foreign_vehicle_registration_number must be
provided.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
Only one registration number is allowed. |
Both vehicle_registration_number and foreign_vehicle_registration_number
were provided. |
400 |
One of registration numbers is required. |
Neither vehicle_registration_number nor foreign_vehicle_registration_number
was provided. |
400 |
Vehicle category / factory required for foreign vehicle. |
When using a foreign registration number and the company requires it, category and/or factory must be provided. |
409 |
Asset with the same registration already exists. |
An asset with the same registration number already exists for this company. |
- vehicle_registration_number
string(optional) Example: IKX1234Domestic vehicle registration number. Must not be combined with
foreign_vehicle_registration_number.- foreign_vehicle_registration_number
string(optional) Example: DE-AB1234Foreign vehicle registration number. Must not be combined with
vehicle_registration_number. May require category and factory depending on company settings.- vehicle_category
string(optional) Example: N1Vehicle category (required for some foreign registrations).
- vehicle_factory
string(optional) Example: MERCEDESVehicle manufacturer / factory (may be required for foreign registrations).
Update Asset ¶
Body
curl https://app.workadu.com/api/assets/130 \
-X PATCH \
-u wk_abcd123123abcd1234: \
-d vehicle_registration_number=IKX5678
Body
{
"data": {
"id": 130,
"vehicle_registration_number": "IKX5678",
"foreign_vehicle_registration_number": "",
"vehicle_category": "",
"vehicle_factory": "",
"status": "Out of use",
"created_at": "2025-10-14T10:41:46+03:00"
}
}
Update Asset
PATCH/api/assets/{id}
This endpoint updates an existing Asset. Any field not provided keeps its current value. The same validation rules as in “Create Asset” apply.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
Only one registration number is allowed. |
Both registration numbers were provided. |
400 |
One of registration numbers is required. |
Update removed both registration numbers. |
400 |
Vehicle category / factory required for foreign vehicle. |
Foreign registration is used without required category/factory. |
404 |
Asset not found. |
No asset with the given id exists for this company. |
409 |
Asset with the same registration already exists. |
Another asset already uses the same registration number. |
- id
-
number(required) Example: 130The id of the asset to update.
- vehicle_registration_number
-
string(optional) Example: ABC1234New domestic vehicle registration number.
- foreign_vehicle_registration_number
-
string(optional) Example: DE-AB1234New foreign vehicle registration number.
- vehicle_category
-
string(optional) Example: M1Vehicle category.
- vehicle_factory
-
string(optional) Example: ToyotaVehicle manufacturer / factory.
Delete Asset ¶
Body
curl https://app.workadu.com/api/assets/130 \
-X DELETE \
-u wk_abcd123123abcd1234:
Body
{
"message": "Asset deleted successfully."
}
Delete Asset
DELETE/api/assets/{id}
This endpoint deletes an Asset that belongs to the current company. Assets that have existing movements cannot be deleted.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
Asset has movements. |
The asset has related movements and cannot be deleted. |
404 |
Asset not found. |
No asset with the given id exists for this company. |
- id
number(required) Example: 130The id of the asset to delete.
Asset Movements ¶
The Asset Movements endpoints allow you to manage the movements associated with assets. You can list, filter, and retrieve movements, create new ones, resend them to external systems, close movements, correlate movements with third-party references, cancel movements, and delete movements that meet certain conditions.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/asset-movements | List all Asset Movements |
| GET | /api/asset-movements/{movement_id},{movement_id},… | Get specific Movement(s) by ID |
| POST | /api/asset-movements | Create a new Asset Movement |
| POST | /api/asset-movements/{id}/resend | Resend an existing Movement |
| POST | /api/asset-movements/{id}/close | Close an Asset Movement |
| POST | /api/asset-movements/{id}/correlate | Correlate a Movement with external reference numbers |
| POST | /api/asset-movements/{id}/cancel | Cancel an Asset Movement |
| DELETE | /api/asset-movements/{id} | Delete an Asset Movement |
List all Asset Movements ¶
Body
curl https://app.workadu.com/api/asset-movements \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
Body
{
"data": [
{
"id": 501,
"asset_id": 130,
"customer_id": 22,
"branch_id": null,
"branch": null,
"comments": "Customer requested expedited handling.",
"agreed_price": "85.00",
"movement_type": "garage",
"provided_service_category_id": 1,
"provided_service_category": "work_with_parts",
"provided_service_category_other": null,
"fim_number": "A12345",
"fim_AA": "884411",
"fim_issue_date": "2025-10-14",
"fim_issue_time": "10:32:00",
"created_at": "2025-10-14T10:41:46+03:00",
"submit_date": "2025-10-14",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 112,
"updated_dcl_id": null,
"correlate_id": 550,
"cancel_id": null,
"asset": {
"id": 130,
"vehicle_registration_number": "ABC1234",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 22,
"fullname": "John Doe",
"email": "john@example.com"
}
},
{
"id": 502,
"asset_id": 140,
"customer_id": null,
"branch_id": 3,
"branch": "BR-003",
"comments": null,
"agreed_price": "12.00",
"movement_type": "rental",
"provided_service_category_id": 1,
"provided_service_category": "rental",
"provided_service_category_other": null,
"place_from": null,
"place_to": null,
"invoice_id": 231,
"created_at": "2025-10-14T09:20:11+03:00",
"submit_date": "2025-10-14",
"completion_date": "2025-10-14",
"status": 2,
"status_label": "completed",
"dcl_id": 550,
"updated_dcl_id": 552,
"correlate_id": 551,
"cancel_id": null,
"asset": {
"id": 140,
"vehicle_registration_number": "",
"foreign_vehicle_registration_number": "ZZ-8891"
}
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 20,
"current_page": 1,
"total_pages": 1
}
}
}
Body
curl "https://app.workadu.com/api/asset-movements?search=ABC&status=sent&usage_status=in&page=1" \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
Body
{
"data": [
{
"id": 501,
"asset_id": 130,
"customer_id": null,
"branch_id": null,
"branch": null,
"comments": "Customer requested expedited handling.",
"agreed_price": "85.00",
"movement_type": "garage",
"provided_service_category_id": 1,
"provided_service_category": "work_with_parts",
"provided_service_category_other": null,
"fim_number": "A12345",
"fim_AA": "884411",
"fim_issue_date": "2025-10-14",
"fim_issue_time": "10:32:00",
"created_at": "2025-10-14T10:41:46+03:00",
"submit_date": "2025-10-14",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 112,
"updated_dcl_id": null,
"correlate_id": 550,
"cancel_id": null,
"asset": {
"id": 130,
"vehicle_registration_number": "ABC1234",
"foreign_vehicle_registration_number": ""
}
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 20,
"current_page": 1,
"total_pages": 1
}
}
}
List all Asset Movements
GET
/api/asset-movements
- asset_id
number(optional)Filter movements belonging to a specific asset.
- movement_kind
-
string(optional) Allowed: rental, garage, parking - usage_status
-
string(optional) Allowed: in, outin = movement is active (no completion date, not cancelled).
out = completed or cancelled. - status
string(optional) Allowed: not_sent, sent, sent_complete, cancelled- correlated
boolean(optional) Example: truetrue = only movements with
correlate_id
false = only withoutcorrelate_id- start_date
string (Y-m-d)(optional)Filter movements with
submit_date >= start_date.- end_date
string (Y-m-d)(optional)Filter movements with
submit_date <= end_date.- branch_id
string(optional)Filter movements with
of the specific company branch. Examples: 0 for company branch , 412 for branch with ID 412.- search
string(optional)Search against plate numbers, DCL/Cancel/Updated DCL/Correlate IDs.
- sort
string(optional) Allowed: id, asset_id, dcl_id, correlate_id, cancel_id, updated_dcl_id, submit_date, completion_date, status, agreed_price- page
number(optional)Page number (20 results per page).
Get Specific Asset Movement ¶
Body
curl https://app.workadu.com/api/asset-movements/501 \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
Body
{
"data": {
"id": 501,
"asset_id": 130,
"customer_id": 22,
"branch_id": null,
"branch": null,
"comments": "Customer requested expedited handling.",
"agreed_price": "85.00",
"movement_type": "garage",
"provided_service_category_id": 1,
"provided_service_category": "work_with_parts",
"provided_service_category_other": null,
"invoice_id": 330,
"aade_invoice_id": 91,
"created_at": "2025-10-14T10:41:46+03:00",
"submit_date": "2025-10-14",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 112,
"updated_dcl_id": 113,
"correlate_id": null,
"cancel_id": null,
"asset": {
"id": 130,
"vehicle_registration_number": "ABC1234",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 22,
"fullname": "John Doe",
"email": "john@example.com"
}
},
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 20,
"current_page": 1,
"total_pages": 1
}
}
}
Body
curl https://app.workadu.com/api/asset-movements/501,502 \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
Body
{
"data": [
{
"id": 501,
"asset_id": 130,
"customer_id": 22,
"branch_id": null,
"branch": null,
"comments": "Customer requested expedited handling.",
"agreed_price": "85.00",
"movement_type": "garage",
"provided_service_category_id": 1,
"provided_service_category": "work_with_parts",
"provided_service_category_other": null,
"created_at": "2025-10-14T10:41:46+03:00",
"submit_date": "2025-10-14",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 112,
"updated_dcl_id": null,
"correlate_id": null,
"cancel_id": null,
"asset": {
"id": 130,
"vehicle_registration_number": "ABC1234",
"foreign_vehicle_registration_number": ""
}
},
{
"id": 502,
"asset_id": 140,
"customer_id": null,
"branch_id": 3,
"branch": "BR-003",
"comments": null,
"agreed_price": "12.00",
"movement_type": "rental",
"provided_service_category_id": 1,
"provided_service_category": "rental",
"provided_service_category_other": null,
"place_from": null,
"place_to": null,
"invoice_id": 231,
"created_at": "2025-10-14T09:20:11+03:00",
"submit_date": "2025-10-14",
"completion_date": "2025-10-14",
"status": 2,
"status_label": "completed",
"dcl_id": 550,
"updated_dcl_id": 552,
"correlate_id": 551,
"cancel_id": null,
"asset": {
"id": 140,
"vehicle_registration_number": "",
"foreign_vehicle_registration_number": "ZZ-8891"
}
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 20,
"current_page": 1,
"total_pages": 1
}
}
}
Get Specific Asset Movement
GET
/api/asset-movements/{id}
This endpoint returns a single Asset Movement by ID, or multiple movements by comma-separated IDs.(can be combined with filters)
- id
string(required)Single movement ID (
501) or multiple (501,502).
Create Asset Movement ¶
Body
curl https://app.workadu.com/api/asset-movements \
-u wk_abcd123123abcd1234: \
-H "Accept: application/vnd.rengine.v2+json" \
-d asset_id=130 \
-d customer_id=22 \
-d movement_type=rental \
-d provided_service_category=1 \
-d agreed_price=85.00 \
-d comments="Customer requested expedited handling." \
-d place_from="Athens HQ" \
-d place_to="Customer address"
Body
{
"data": {
"id": 701,
"asset_id": 130,
"customer_id": 22,
"branch_id": null,
"branch": null,
"comments": "Customer requested expedited handling.",
"agreed_price": "85.00",
"movement_type": "rental",
"provided_service_category_id": 1,
"provided_service_category": "rental",
"provided_service_category_other": null,
"place_from": "Athens HQ",
"place_to": "Customer address",
"created_at": "2025-10-14T10:41:46+03:00",
"submit_date": "2025-10-14 10:41:46",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 3001,
"updated_dcl_id": null,
"correlate_id": null,
"cancel_id": null,
"asset": {
"id": 130,
"vehicle_registration_number": "ABC1234",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 22,
"fullname": "John Doe",
"email": "john@example.com"
}
}
}
Body
curl https://app.workadu.com/api/asset-movements \
-u wk_abcd123123abcd1234: \
-H "Accept: application/vnd.rengine.v2+json" \
-d movement_type=rental \
-d provided_service_category=1 \
-d vehicle_registration_number=IKX1234 \
-d agreed_price=45.00 \
-d comments="Short-term rental." \
-d place_from="Athens HQ" \
-d place_to="Airport" \
-d fullname="Jane Smith" \
-d email="jane.smith@example.com" \
-d mobile="+3069XXXXXXXX" \
-d country="Greece" \
-d city="Athens" \
-d address="Some Street 10" \
-d postal_code="11145"
Body
{
"data": {
"id": 702,
"asset_id": 145,
"customer_id": 35,
"branch_id": null,
"branch": null,
"comments": "Short-term rental.",
"agreed_price": "45.00",
"movement_type": "rental",
"provided_service_category_id": 1,
"provided_service_category": "rental",
"provided_service_category_other": null,
"place_from": "Athens HQ",
"place_to": "Airport",
"created_at": "2025-10-14T11:05:10+03:00",
"submit_date": "2025-10-14 11:05:10",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 3002,
"updated_dcl_id": null,
"correlate_id": null,
"cancel_id": null,
"asset": {
"id": 145,
"vehicle_registration_number": "IKX1234",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 35,
"fullname": "Jane Smith",
"email": "jane.smith@example.com"
}
}
}
Create Asset Movement
POST
/api/asset-movements
This endpoint creates a new Asset Movement for the current company. The Asset can be either an
existing one (by asset_id) or automatically created from the provided
vehicle registration data. You may link an existing customer, or create one on-the-fly by
providing customer details.
The movement is immediately sent to the Digital Client List (DCL). If the external service returns an error, the movement is not considered successfully created.
Movement types
rentalgarageparking
Provided service categories
- For
rental: 1 = rental, 2 = self_use, 3 = free_service - For
garage: 1 = work_with_parts, 2 = work_with_customer_parts, 3 = work_without_parts, 4 = free_service, 5 = other, 6 = warranty_compensation, 9 = self_use - For
parking: 4 = free_service, 5 = other, 7 = pricelist_service, 8 = service_upon_agreement, 9 = self_use
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
Validation error. |
One or more required fields are missing or invalid (movement_type, provided_service_category, asset/customer conflicts, etc.). |
400 |
Asset validation failed. |
Automatic Asset creation failed (e.g. invalid or duplicate registration number, missing category/factory for foreign vehicles, etc.). |
400 |
Movement send unsuccessful. |
The movement could not be sent to the Digital Client List service (DCL). |
- movement_type
string(required) Allowed: rental, garage, parkingThe type of the movement (rental, garage, parking). Affects the valid
provided_service_categoryvalues.- provided_service_category
number(required) Example: 1Service category of the movement. Must be one of the allowed IDs for the selected
movement_type(see lists above).- provided_service_category_other
string(optional)Required only when
provided_service_category = 5(other). Prohibited for any other category value.- asset_id
string(optional)The ID of an existing Asset. If provided, you must not include any of
vehicle_registration_number,foreign_vehicle_registration_number,vehicle_categoryorvehicle_factory.- vehicle_registration_number
string(optional) Example: ABC1234Domestic plate number used to auto-create an Asset when
asset_idis not given. Must not be combined withasset_idorforeign_vehicle_registration_number.- foreign_vehicle_registration_number
string(optional) Example: DE-AB1234Foreign plate number used to auto-create an Asset when
asset_idis not given. Requiresvehicle_categoryand may requirevehicle_factorydepending on company configuration.- vehicle_category
string(optional) Example: N1Vehicle category. Required when
foreign_vehicle_registration_numberis provided.- vehicle_factory
string(optional) Example: MERCEDESVehicle manufacturer/factory. May be required by company rules for foreign vehicles.
- branch_id
number(optional)The branch where the movement is created. Must belong to the current company.
- comments
string(optional)Free-text comments for the movement.
- agreed_price
number(optional) Example: 85.00Agreed price for the movement. Must be a non-negative number.
- place_from
string(optional, rental only)Starting place of the rental movement.
- place_to
string(optional, rental only)Ending place of the rental movement.
- customer_id
number(optional)ID of an existing customer of the company. When provided, you must not send inline customer details (fullname, email, vat_number, etc.).
- Inline Customer Details
- fullname
string(optional)Customer fullname. Used to create a new customer if
customer_idis not given.string(optional)Customer email. Used for creating a new customer or as contact info.
- vat_number
string(optional)Customer VAT number. Used only when creating a new customer.
- ssn
string(optional)Customer SSN. Used only when creating a new customer.
- mobile
string(optional)Customer mobile phone.
- country
string(optional)Customer country.
- city
string(optional)Customer city.
- address
string(optional)Customer street address.
- postal_code
string(optional)Customer postal/ZIP code.
- tax_office
string(optional)Customer tax office description/code.
- business_type
string(optional)Customer business type/occupation.
Resend Asset Movement ¶
Body
curl -X POST "https://app.workadu.com/api/asset-movements/501/resend" \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
Body
{
"message": "The movement has already been sent.",
"vehicle_movement": {
"id": 501,
"asset_id": 130,
"customer_id": 22,
"branch_id": null,
"branch": null,
"comments": "Customer requested expedited handling.",
"agreed_price": "85.00",
"movement_type": "garage",
"provided_service_category_id": 1,
"provided_service_category": "work_with_parts",
"provided_service_category_other": null,
"created_at": "2025-10-14T10:41:46+03:00",
"submit_date": "2025-10-14",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 112,
"updated_dcl_id": null,
"correlate_id": null,
"cancel_id": null,
"asset": {
"id": 130,
"vehicle_registration_number": "ABC1234",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 22,
"fullname": "John Doe",
"email": "john@example.com"
}
}
}
Body
{
"data": {
"id": 502,
"asset_id": 140,
"customer_id": null,
"branch_id": 3,
"branch": "BR-003",
"comments": "Retry request after network failure.",
"agreed_price": "12.00",
"movement_type": "parking",
"provided_service_category_id": 7,
"provided_service_category": "pricelist_service",
"provided_service_category_other": null,
"created_at": "2025-11-01T09:12:00+03:00",
"submit_date": "2025-11-01",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 4499,
"updated_dcl_id": null,
"correlate_id": null,
"cancel_id": null,
"asset": {
"id": 140,
"vehicle_registration_number": null,
"foreign_vehicle_registration_number": "ZZ-7781"
}
}
}
Body
{
"error": "Movement could not be resent: DCL communication failure"
}
Body
{
"error": "Asset movement not found."
}
Resend Asset Movement
POST
/api/asset-movements/{id}/resend
This endpoint attempts to resend an asset movement to DCL. A resend is only performed if the movement has **no existing `dcl_id`**. If a `dcl_id` already exists, the API returns a message indicating that the movement was already sent.
No body parameters are required.
- id
number(required)ID of the movement to resend.
Close Asset Movement ¶
Body
curl https://app.workadu.com/api/asset-movements/503/close \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
Body
{
"data": {
"id": 503,
"asset_id": 150,
"customer_id": 45,
"branch_id": null,
"branch": null,
"comments": "Daily rental closed with invoice.",
"agreed_price": "55.00",
"movement_type": "rental",
"provided_service_category_id": 1,
"provided_service_category": "rental",
"provided_service_category_other": null,
"place_from": "ATH Airport",
"place_to": "Athens Center",
"invoice_id": 231,
"aade_invoice_id": 532,
"created_at": "2025-10-14T08:10:00+03:00",
"submit_date": "2025-10-14 08:10:00",
"completion_date": "2025-10-14 18:20:00",
"status": 2,
"status_label": "completed",
"dcl_id": 445500,
"updated_dcl_id": 445501,
"correlate_id": 778899,
"cancel_id": null,
"asset": {
"id": 150,
"vehicle_registration_number": "IKX1234",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 45,
"fullname": "Jane Smith",
"email": "jane@example.com"
}
}
}
Body
curl https://app.workadu.com/api/asset-movements/502/close \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
-d reason_non_issue=1
Body
{
"data": {
"id": 502,
"asset_id": 140,
"customer_id": null,
"branch_id": 3,
"branch": "BR-003",
"comments": "Short parking stay, free of charge.",
"agreed_price": "0.00",
"movement_type": "parking",
"provided_service_category_id": 4,
"provided_service_category": "free_service",
"provided_service_category_other": null,
"reason_non_issue": 1,
"reason": "free_service",
"created_at": "2025-10-14T09:20:11+03:00",
"submit_date": "2025-10-14 09:20:11",
"completion_date": "2025-10-14 09:45:00",
"status": 2,
"status_label": "completed",
"dcl_id": 223300,
"updated_dcl_id": 223301,
"correlate_id": null,
"cancel_id": null,
"asset": {
"id": 140,
"vehicle_registration_number": "",
"foreign_vehicle_registration_number": "ZZ-8891"
}
}
}
Body
curl https://app.workadu.com/api/asset-movements/503/close \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
-d invoice_id=231
Body
{
"data": {
"id": 503,
"asset_id": 150,
"customer_id": 45,
"branch_id": null,
"branch": null,
"comments": "Daily rental closed with invoice.",
"agreed_price": "55.00",
"movement_type": "rental",
"provided_service_category_id": 1,
"provided_service_category": "rental",
"provided_service_category_other": null,
"place_from": "ATH Airport",
"place_to": "Athens Center",
"invoice_id": 231,
"aade_invoice_id": 532,
"created_at": "2025-10-14T08:10:00+03:00",
"submit_date": "2025-10-14 08:10:00",
"completion_date": "2025-10-14 18:20:00",
"status": 2,
"status_label": "completed",
"dcl_id": 445500,
"updated_dcl_id": 445501,
"correlate_id": 778899,
"cancel_id": null,
"asset": {
"id": 150,
"vehicle_registration_number": "IKX1234",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 45,
"fullname": "Jane Smith",
"email": "jane@example.com"
}
}
}
Body
curl https://app.workadu.com/api/asset-movements/504/close \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
-d aade_invoice_id=9876
Body
{
"data": {
"id": 504,
"asset_id": 160,
"customer_id": 60,
"branch_id": 2,
"branch": "BR-002",
"comments": "Garage repair completed, AADE invoice used.",
"agreed_price": "210.00",
"movement_type": "garage",
"provided_service_category_id": 2,
"provided_service_category": "work_with_customer_parts",
"provided_service_category_other": null,
"aade_invoice_id": 9876,
"created_at": "2025-10-14T07:00:00+03:00",
"submit_date": "2025-10-14 07:00:00",
"completion_date": "2025-10-14 15:30:00",
"status": 2,
"status_label": "completed",
"dcl_id": 556600,
"updated_dcl_id": 556601,
"correlate_id": 99002,
"cancel_id": null,
"asset": {
"id": 160,
"vehicle_registration_number": "KYZ4321",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 60,
"fullname": "ACME LTD",
"email": "info@acme.test"
}
}
}
Body
curl https://app.workadu.com/api/asset-movements/505/close \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
-d fim_number=AA123456 \
-d fim_AA=998877 \
-d fim_issue_date=2025-10-14 \
-d fim_issue_time=10:45:00
Body
{
"data": {
"id": 505,
"asset_id": 170,
"customer_id": 70,
"branch_id": null,
"branch": null,
"comments": "Parking ticket issued via FIM.",
"agreed_price": "12.00",
"movement_type": "parking",
"provided_service_category_id": 7,
"provided_service_category": "pricelist_service",
"provided_service_category_other": null,
"fim_number": "AA123456",
"fim_AA": "998877",
"fim_issue_date": "2025-10-14",
"fim_issue_time": "10:45:00",
"created_at": "2025-10-14T10:10:00+03:00",
"submit_date": "2025-10-14 10:10:00",
"completion_date": "2025-10-14 10:50:00",
"status": 2,
"status_label": "completed",
"dcl_id": 667700,
"updated_dcl_id": 667701,
"correlate_id": 99003,
"cancel_id": null,
"asset": {
"id": 170,
"vehicle_registration_number": "",
"foreign_vehicle_registration_number": "DE-AB1234"
},
"customer": {
"id": 70,
"fullname": "Parking Customer",
"email": "customer@example.com"
}
}
}
Body
curl https://app.workadu.com/api/asset-movements/506/close \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
-d create_invoice=1 \
-d series_id=12 \
-d payment_type=1 \
-d fullname="New Customer" \
-d email="new.customer@example.com"
Body
{
"data": {
"id": 506,
"asset_id": 180,
"customer_id": 88,
"branch_id": 4,
"branch": "BR-004",
"comments": "Garage work, invoice created by API.",
"agreed_price": "95.00",
"movement_type": "garage",
"provided_service_category_id": 1,
"provided_service_category": "work_with_parts",
"provided_service_category_other": null,
"invoice_id": 345,
"aade_invoice_id": 12345,
"created_at": "2025-10-14T11:00:00+03:00",
"submit_date": "2025-10-14 11:00:00",
"completion_date": "2025-10-14 13:30:00",
"status": 2,
"status_label": "completed",
"dcl_id": 778800,
"updated_dcl_id": 778801,
"correlate_id": 99004,
"cancel_id": null,
"asset": {
"id": 180,
"vehicle_registration_number": "XYZ9999",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 88,
"fullname": "New Customer",
"email": "new.customer@example.com"
}
}
}
Close Asset Movement
POST
/api/asset-movements/{id}/close
This endpoint closes an existing Asset Movement that has already been sent to the Digital Client List (DCL).
It may optionally correlate the movement with an invoice (existing or newly created) or with FIM details,
or it may be closed using only a reason_non_issue.
Exactly one of these options must be provided:
reason_non_issue, create_invoice, invoice_id,
aade_invoice_id or FIM fields.
When a movement is already correlated, the API does not require any correlation parameters. You can close the movement using a simple request: curl https://app.workadu.com/api/asset-movements/503/close
If the movement is already closed (has updated_dcl_id), the call returns a 200 status with a
message and the current movement payload without re-sending anything to DCL.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
DCL id is required in order to close movement. |
The movement does not have a dcl_id, so it cannot be closed. |
400 |
Invalid movement correlate option. |
None or more than one of reason/invoice/AADE invoice/FIM/create-invoice options was selected. |
400 |
Invoice not AADE marked. |
The provided invoice or AADE invoice has no AADE mark. |
400 |
Customer data are required. |
When create_invoice=1, no valid customer data or customer_id were provided. |
400 |
Movement invoice create no price. |
When creating an invoice, the movement has no valid agreed_price. |
400 |
Movement correlated unsuccessfully ... |
DCL correlation failed; the message contains the DCL error text. |
400 |
Movement closed unsuccessfully ... |
DCL close call failed; the message contains the DCL error text. |
404 |
Not Found. |
No movement with the given id exists for the current company. |
- id
number(required) Example: 501The id of the Asset Movement to close. Must belong to the current company and have a
dcl_id.
- reason_non_issue
integer(optional, mutually exclusive) Examples: 1 (free_service), 2 (self_use), 3 (refund_within_guarantee, only forgarage)When provided, the movement is closed using this non-issuance reason. No invoice correlation is performed. Allowed values depend on the movement type.
- create_invoice
boolean(optional, mutually exclusive)If
1(true), the API will create an invoice for this movement and use it to correlate and close the movement.- invoice_id
integer(optional, mutually exclusive) Example: 231Existing invoice id to correlate with this movement. Must belong to the same company and be AADE-marked.
- aade_invoice_id
integer(optional, mutually exclusive) Example: 9876Existing AADE invoice id to correlate with this movement. Must belong to the same company and be AADE-marked.
- fim_number
string(optional, FIM path)Required when closing with FIM. Used together with
fim_AA,fim_issue_date,fim_issue_time.- fim_AA
string(optional, FIM path)FIM AA, required when closing with FIM.
- fim_issue_date
string (Y-m-d)(optional, FIM path) Example: 2025-10-14FIM issue date, required when closing with FIM.
- fim_issue_time
string (H:i:s)(optional, FIM path) Example: 10:45:00FIM issue time, required when closing with FIM.
- series_id
integer(required whencreate_invoice=1)Series id for the invoice that will be created from this movement.
- payment_type
integer(required whencreate_invoice=1)Payment type for the created invoice.
- customer_id
integer(optional, create-invoice path)Existing customer id. If not provided, customer is created from the details below.
- fullname, email, vat_number, ssn, mobile, country,
- city, address, postal_code, tax_office, business_type
string(optional, create-invoice path)Customer details used when creating a new customer for the invoice. Either
customer_idor sufficient customer details must be provided.- branch_id
integer(optional, create-invoice path)Branch for the created invoice. If omitted, the movement branch is used when available.
- includes_vat
boolean(optional, create-invoice path)Whether invoice amounts include VAT. Defaults to
trueif omitted.
Correlate Asset Movement ¶
Body
curl https://app.workadu.com/api/asset-movements/702/correlate \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
-d invoice_id=231
Body
{
"data": {
"id": 702,
"asset_id": 150,
"customer_id": 45,
"branch_id": null,
"branch": null,
"comments": "Daily rental correlated with invoice.",
"agreed_price": "55.00",
"movement_type": "rental",
"provided_service_category_id": 1,
"provided_service_category": "rental",
"provided_service_category_other": null,
"place_from": "ATH Airport",
"place_to": "Athens Center",
"invoice_id": 231,
"aade_invoice_id": 532,
"created_at": "2025-10-14T08:10:00+03:00",
"submit_date": "2025-10-14 08:10:00",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 445500,
"updated_dcl_id": null,
"correlate_id": 778899,
"cancel_id": null,
"asset": {
"id": 150,
"vehicle_registration_number": "IKX1234",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 45,
"fullname": "Jane Smith",
"email": "jane@example.com"
}
}
}
Body
curl https://app.workadu.com/api/asset-movements/703/correlate \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
-d aade_invoice_id=9876
Body
{
"data": {
"id": 703,
"asset_id": 160,
"customer_id": 60,
"branch_id": 2,
"branch": "BR-002",
"comments": "Garage repair correlated using AADE invoice.",
"agreed_price": "210.00",
"movement_type": "garage",
"provided_service_category_id": 2,
"provided_service_category": "work_with_customer_parts",
"provided_service_category_other": null,
"aade_invoice_id": 9876,
"created_at": "2025-10-14T07:00:00+03:00",
"submit_date": "2025-10-14 07:00:00",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 556600,
"updated_dcl_id": null,
"correlate_id": 99002,
"cancel_id": null,
"asset": {
"id": 160,
"vehicle_registration_number": "KYZ4321",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 60,
"fullname": "ACME LTD",
"email": "info@acme.test"
}
}
}
Body
curl https://app.workadu.com/api/asset-movements/704/correlate \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
-d fim_number=AA123456 \
-d fim_AA=998877 \
-d fim_issue_date=2025-10-14 \
-d fim_issue_time=10:45:00
Body
{
"data": {
"id": 704,
"asset_id": 170,
"customer_id": 70,
"branch_id": null,
"branch": null,
"comments": "Parking ticket correlated via FIM.",
"agreed_price": "12.00",
"movement_type": "parking",
"provided_service_category_id": 7,
"provided_service_category": "pricelist_service",
"provided_service_category_other": null,
"fim_number": "AA123456",
"fim_AA": "998877",
"fim_issue_date": "2025-10-14",
"fim_issue_time": "10:45:00",
"created_at": "2025-10-14T10:10:00+03:00",
"submit_date": "2025-10-14 10:10:00",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 667700,
"updated_dcl_id": null,
"correlate_id": 99003,
"cancel_id": null,
"asset": {
"id": 170,
"vehicle_registration_number": "",
"foreign_vehicle_registration_number": "DE-AB1234"
},
"customer": {
"id": 70,
"fullname": "Parking Customer",
"email": "customer@example.com"
}
}
}
Body
curl https://app.workadu.com/api/asset-movements/705/correlate \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234: \
-d create_invoice=1 \
-d series_id=12 \
-d payment_type=1 \
-d fullname="New Customer" \
-d email="new.customer@example.com"
Body
{
"data": {
"id": 705,
"asset_id": 180,
"customer_id": 88,
"branch_id": 4,
"branch": "BR-004",
"comments": "Garage work, invoice created by API and used for correlation.",
"agreed_price": "95.00",
"movement_type": "garage",
"provided_service_category_id": 1,
"provided_service_category": "work_with_parts",
"provided_service_category_other": null,
"invoice_id": 345,
"aade_invoice_id": 12345,
"created_at": "2025-10-14T11:00:00+03:00",
"submit_date": "2025-10-14 11:00:00",
"completion_date": null,
"status": 1,
"status_label": "sent",
"dcl_id": 778800,
"updated_dcl_id": null,
"correlate_id": 99004,
"cancel_id": null,
"asset": {
"id": 180,
"vehicle_registration_number": "XYZ9999",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 88,
"fullname": "New Customer",
"email": "new.customer@example.com"
}
}
}
Correlate Asset Movement
POST
/api/asset-movements/{id}/correlate
This endpoint correlates an existing Asset Movement that has already been sent to the Digital Client List (DCL)
with an invoice (existing or newly created) or with FIM details.
Exactly one of these options must be provided:
create_invoice, invoice_id, aade_invoice_id or FIM fields.
If the movement is already correlated (has correlate_id), the call returns a 200 status with a
message and the current movement payload without calling DCL again.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
DCL id is required in order to correlate movement. |
The movement does not have a dcl_id, so it cannot be correlated. |
400 |
Invalid movement correlate option. |
None or more than one of invoice/AADE invoice/FIM/create-invoice options was selected. |
400 |
Invoice not AADE marked. |
The provided invoice has no AADE mark (not AADE-marked). |
400 |
Customer data are required. |
When create_invoice=1, no valid customer data or customer_id were provided. |
400 |
Movement invoice create no price. |
When creating an invoice, the movement has no valid agreed_price. |
400 |
Movement correlated unsuccessfully ... |
DCL correlation failed; the message contains the DCL error text. |
404 |
Not Found. |
No movement with the given id exists for the current company. |
- id
number(required) Example: 702The id of the Asset Movement to correlate. Must belong to the current company and have a
dcl_id.
- create_invoice
boolean(optional, mutually exclusive)If
1(true), the API will create an invoice for this movement and use it to correlate the movement.- invoice_id
integer(optional, mutually exclusive) Example: 231Existing invoice id to correlate with this movement. Must be AADE-marked.
- aade_invoice_id
integer(optional, mutually exclusive) Example: 9876Existing AADE invoice id to correlate with this movement.
- fim_number
string(optional, FIM path)Required when correlating with FIM. Used together with
fim_AA,fim_issue_date,fim_issue_time.- fim_AA
string(optional, FIM path)FIM AA, required when correlating with FIM.
- fim_issue_date
string (Y-m-d)(optional, FIM path) Example: 2025-10-14FIM issue date, required when correlating with FIM.
- fim_issue_time
string (H:i:s)(optional, FIM path) Example: 10:45:00FIM issue time, required when correlating with FIM.
- series_id
integer(required whencreate_invoice=1)Series id for the invoice that will be created from this movement.
- payment_type
integer(optional whencreate_invoice=1)Payment type for the created invoice.
- customer_id
integer(optional, create-invoice path)Existing customer id. If not provided, customer is created from the details below.
- fullname, email, vat_number, ssn, mobile, country,
- city, address, postal_code, tax_office, business_type
string(optional, create-invoice path)Customer details used when creating a new customer for the invoice. Either
customer_idor sufficient customer details must be provided.- branch_id
integer(optional, create-invoice path)Branch for the created invoice.
- includes_vat
boolean(optional, create-invoice path)Whether invoice amounts include VAT. Defaults to
trueif omitted.
Cancel Asset Movement ¶
Body
curl https://app.workadu.com/api/asset-movements/801/cancel \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
Body
{
"message": "Movement cancelled successfully.",
"vehicle_movement": {
"id": 801,
"asset_id": 130,
"customer_id": 22,
"branch_id": null,
"branch": null,
"comments": "",
"agreed_price": "85.00",
"movement_type": "garage",
"provided_service_category_id": 1,
"provided_service_category": "work_with_parts",
"provided_service_category_other": null,
"created_at": "2025-10-14T10:41:46+03:00",
"submit_date": "2025-10-14 10:41:46",
"completion_date": null,
"status": 3,
"status_label": "cancelled",
"dcl_id": 123456,
"updated_dcl_id": null,
"correlate_id": null,
"cancel_id": 99901,
"asset": {
"id": 130,
"vehicle_registration_number": "ABC1234",
"foreign_vehicle_registration_number": ""
},
"customer": {
"id": 22,
"fullname": "John Doe",
"email": "john@example.com"
}
}
}
Body
curl https://app.workadu.com/api/asset-movements/802/cancel \
-X POST \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
Body
{
"message": "Movement already cancelled.",
"vehicle_movement": {
"id": 802,
"asset_id": 140,
"customer_id": 33,
"branch_id": 3,
"branch": "BR-003",
"comments": "",
"agreed_price": "12.00",
"movement_type": "parking",
"provided_service_category_id": 7,
"provided_service_category": "pricelist_service",
"provided_service_category_other": null,
"created_at": "2025-10-14T09:20:11+03:00",
"submit_date": "2025-10-14 09:20:11",
"completion_date": null,
"status": 3,
"status_label": "cancelled",
"dcl_id": 223300,
"updated_dcl_id": null,
"correlate_id": null,
"cancel_id": 99902,
"asset": {
"id": 140,
"vehicle_registration_number": "",
"foreign_vehicle_registration_number": "ZZ-8891"
},
"customer": {
"id": 33,
"fullname": "Parking Customer",
"email": "customer@example.com"
}
}
}
Cancel Asset Movement
POST
/api/asset-movements/{id}/cancel
This endpoint cancels an existing Asset Movement in the Digital Client List (DCL).
The movement must already have a dcl_id.
If the movement is already cancelled (has cancel_id), the call returns a 200 status with a message
and the current movement payload without calling DCL again.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
Movement has no DCL id. |
The movement does not have a dcl_id, so it cannot be cancelled. |
400 |
Movement cancelled unsuccessfully ... |
DCL cancel call failed; the message contains the DCL error text. |
404 |
Not Found. |
No movement with the given id exists for the current company. |
- id
number(required) Example: 801The id of the Asset Movement to cancel. Must belong to the current company and have a
dcl_id.
Delete Asset Movement ¶
Body
curl https://app.workadu.com/api/asset-movements/901 \
-X DELETE \
-H "Accept: application/vnd.rengine.v2+json" \
-u wk_abcd123123abcd1234:
{
"message": "Asset movement deleted."
}
Delete Asset Movement
DELETE
/api/asset-movements/{id}
This endpoint deletes an Asset Movement that has not been sent to the Digital Client List (DCL).
If the movement already has a dcl_id, it cannot be deleted.
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
Asset movement that has been sent cannot be deleted. |
The movement has a dcl_id (already sent), so deletion is not allowed. |
404 |
Not Found. |
No movement with the given id exists for the current company. |
- id
number(required) Example: 901The id of the Asset Movement to delete. Must belong to the current company and must not have a
dcl_id.
Attributes ¶
The attributes endpoints returns information about the workadu attributes that have been assigned with the authenticated user services. The response includes the display name and other details and groups of info about each attribute, and lists the attributes in the proper display order as they are stored initial at the database. You can re-sort the results by add sorting filter at your request as show here.
| GET | /api/attributes | Get logged in user related attributes |
| GET | /api/attributes/{attribute_id},{attribute_id},… | Get specific attribute details |
List all Attributes ¶
Body
{
"data": {
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
}
List all Attributes
GET/api/attributes/
- filter[name]
string(optional) Example: PassengersFilter brands by the name of a specific recourse.
Get a specific Attribute ¶
Body
{
"data": {
"id": 2522,
"name": "Passengers",
"description": "some description",
"value": 22
}
}
Get a specific Attribute
GET/api/attributes/{attribute_id}
Error codes
| HTTP status | Code | Description |
|---|---|---|
400 |
No attributes could be found. |
There is no valid attribute id provided. |
- attribute_id
integer(optional) Example: 32161The id for the specific attribute.
Tables ¶
Tabes referenced throuh the endpoints
Table 1: Move purpose
| Code | Description |
|---|---|
| 1 | Sale |
| 2 | Sale on Behalf of Third Parties |
| 3 | Sampling |
| 4 | Exhibition |
| 5 | Return |
| 6 | Custody |
| 7 | Processing/Assembly |
| 8 | Transfer Between Entity Facilities |
| 9 | Purchase |
| 10 | Supply to Ships and Aircrafts |
| 11 | Free Disposal |
| 12 | Warranty |
| 13 | Loan for Use |
| 14 | Storage by Third Parties |
| 15 | Return from Custody |
| 16 | Recycling |
| 17 | Destruction of Useless Material |
| 18 | Asset Transfer (Internal Movement) |
| 19 | Other Reason of Movement |
Table 2: Aade measurement codes
| Code | Description |
|---|---|
| 1 | Pieces |
| 2 | Kilograms |
| 3 | Liters |
| 4 | Meters |
| 5 | Square Meters |
| 6 | Cubic Meters |
| 7 | Pieces_Other Cases |
Generated by aglio on 27 Dec 2024