- API v1
- API v2
- DataLogic DL-AXIST / MEMOR 1 / MEMOR 10
- DataLogic Heron / Gryphon / QuickScan (New Devices)
- Install EasyFlor on Android
- Install EasyFlor on Chromebook / Chromebox / Chromebit
- Install EasyFlor on iPhone
- Install EasyFlor on Windows / Mac / Linux
- Opticon OPN2006
- Photo Booth: Activate EasyFlor Scan
- Pi Configuration
- Printer Configuration
- Test Scanner
- Zebra EC30
- Zebra TC21 / TC26
- Zebra TC25
API v1
Table of Contents
Getting Started
Master Data
Articles & Products
Webshop
Orders & Purchases
Invoicing - Debet
- Invoices
- Invoice as PDF
- Create debet invoice for debtor
- Invoiced distributed purchases
- Invoiced trolleys
- Invoiced packaging
- Packaging in invoiced purchases
- Custom lines on invoice
Invoicing - Credit
Payments
Synchronization
Forecasting
Changelog
| Version | Description | Date | Author |
|---|---|---|---|
| 1.2.10 | Reorganized document structure to match table of contents, added section headers | 2026-01-08 | DDH |
| 1.2.9 | Added table of contents, fixed duplicate version numbers, corrected descriptions, language consistency | 2026-01-07 | DDH |
| 1.2.8 | Added Prognoses endpoints | 2026-01-06 | DDH |
| 1.2.7 | Added TransportRegion | 2025-11-17 | DDH |
| 1.2.6 | Added Features to Purchase + Added MarkupCategory | 2023-10-14 | DDH |
| 1.2.5 | Added ListPreOrderGroupItem | 2023-06-02 | JJ |
| 1.2.4 | Added InvoiceSync | 2022-12-09 | JJ |
| 1.2.3 | Added RMAReason to Table | 2022-11-14 | JJ |
| 1.2.2 | Added PreOrderSync | 2022-06-11 | DDH |
| 1.2.1 | Added debtor remarks | 2022-04-06 | DDH |
| 1.2.0 | Added Shop endpoints | 2022-03-29 | JJ |
| 1.1.11 | Added RMA reasons to DistributedPurchaseSync | 2022-03-24 | DDH |
| 1.1.10 | Added QuantityPlates/QuantityAttachments to trolley | 2022-03-24 | DDH |
| 1.1.9 | Added more examples | 2022-03-03 | JJ |
| 1.1.8 | Added endpoints | 2022-01-20 | JJ |
| 1.1.6 | Added Location and Administration endpoints | 2021-11-20 | JJ |
| 1.1.5 | Added Sync requests | 2021-11-03 | JJ |
| 1.1.4 | Invoice documentation changed | 2021-03-14 | JJ |
| 1.1.3 | Added ManufacturerSupplierId | 2021-03-14 | JJ |
| 1.1.2 | Added DateFrom/DateTo endpoints | 2021-03-08 | DDH |
| 1.1.1 | Added JWT token authorization | 2020-11-11 | JJ |
| 1.1.0 | Deprecated entries | 2020-10-21 | DDH |
| 1.0.12 | Minor adjustments | 2020-04-30 | DDH |
| 1.0.11 | Added info about Date | 2018-04-05 | DDH |
| 1.0.10 | Added quantity to List | 2017-12-03 | DDH |
| 1.0.9 | Added priceDefault | 2017-08-01 | DDH |
| 1.0.8 | Added debtor PUT/PATCH (main level) | 2017-07-10 | DDH |
| 1.0.7 | Added purchase, invoice, invoice items and payments | 2017-07-07 | CB |
| 1.0.6 | Added OriginalPrice to ListArticleSort | 2017-06-12 | DDH |
| 1.0.5 | Added ListArticleSort array request | 2017-06-08 | DDH |
| 1.0.4 | Added articleSort documentation | 2017-03-01 | DDH |
| 1.0.3 | Minor changes | 2017-02-08 | DDH |
| 1.0.2 | MaxCancellationTime, Features, FeatureTypes | 2017-01-12 | DDH |
| 1.0.1 | Article id changed from int to string / invoices | 2016-10-31 | DDH |
| 1.0.0 | Authorization, distributed removed, status codes added | 2016-10-12 | DDH |
| 0.9.1 | Authorization, attachments, events | 2016-09-07 | DDH |
| 0.9 | Updated version | 2016-06-07 | DDH |
| 0.4 | Initial version for external use | 2015-11-18 | DDH |
Getting Started
Introduction
You can use a varied amount of Get() commands that deliver JSON files, which you can then import into other databases and/or reporting tools. Please note that Get() commands to larger collections such as articles, invoice items and purchases can only be used outside of office hours (before 5AM UTC or after 6PM UTC).
In order to use the API you need to be authorized for each database (of a customer) you connect to. If you are not authorized, you'll receive a HTTP status 401 (Unauthorized). More details in API Authorization. Once you end your session, use the Unauthorize command.
In the section 'general' you'll find helpful information to build your application with.
The next sections of this document, are the API commands available. Each section contains:
- a brief explanation of the type of record it houses
- per put/get/post command:
- the parameters you can use
- the command syntax
- the return output
- an example
General
JSON
Information about specific types and how it's formatted in JSON.
DateTime format
| Symbol | Description | Example |
|---|---|---|
| yyyy | year | 2015 |
| MM | month | 01 |
| dd | day | 31 |
| HH | hour | 13 |
| mm | minute | 01 |
| ss | seconds | 22 |
| tttttt | timezone | +02:00 |
| Z | UTC timezone | Z |
Date
- Format:
yyyy-MM-dd - Example:
2015-12-30
DateTime
- Format:
yyyy-MM-dd\THH:mm:ssttttttt - Example:
2015-12-30T13:40:20+02:00 - Remarks: Use timezone of debtor
TimeSpan
- Format:
((-)dd.)HH:mm:ss - Examples:
-01.13:50:01(minus one day, at 13:50:01)01.13:50:01(plus one day, at 13:50:01)13:50:01(same day, at 13:50:01)00.13:50:01(same as above)
LanguageValue
Object containing all available languages (ISO-639-1).
{
"nl": "Nederlandse benaming",
"de": "Deutsch-Bezeichnung",
"fr": "titre francais"
}
Null value
Don't send parameters without value.
Wrong:
{
"RequiredParameter": "text",
"OptionalParameter": null
}
Right:
{
"RequiredParameter": "text"
}
Encoding
UTF-8
Status codes
| Code | Description |
|---|---|
| 200 | OK - Request successful |
| 400 | BadRequest - Object containing error |
| 401 | Unauthorized - Authentication required or failed |
| 500 | ServerError - Error processing message, not fetched |
Error response format:
{
"error": "<error>",
"message": "<human readable error>"
}
Known errors:
NoOrInvalidJsonNoOrInvalidRequestArgumentNotFoundDocumentNotFoundApiOpeningHoursException(too large a request to process during office hours). May only be done before 5AM UTC or after 6PM UTC.
Tips
- The API is built async, as such you can fire multiple commands simultaneously.
- Order of properties available in the API is not guaranteed. Make sure that when parsing the file, you do so based on the property name - not on the position. JSON parsers should have this behavior by default.
- This API documentation has been written from a C# perspective. If you're not familiar with C# coding, you should at least familiarize yourself with the IEnumerable and Dictionary data types, which are uncommon in other programming languages.
- Any property that is not required, can have NULL as value.
- If an IEnumerable is required, it means the list is initialized ([] value) but may still contain no record(s).
Authorization / logging in
Cookie based authorization
Command: api/authorization
When successfully authorized, you will receive a cookie containing a session. Please append cookie this to any other call you'll make. Session is bound to the user. Session will expire when another call is made using the same username, in case of a valid login.
When receiving a HTTP Statuscode 401, please reauthorize.
Post parameters
| Property name | Description | Data type | Required |
|---|---|---|---|
| Username | Username of a user within the database you want to connect to | string | yes |
| Password | Password of a user within the database you want to connect to | string | yes |
| Database | The database you want to connect to | string | yes |
Post example
POST https://api.easyflor.eu/api/authorization
{
"Username": "api",
"Password": "wouldntyouliketoknow",
"Database": "EasyFlor-Demo"
}
Returns: 200 OK / 401 Unauthorized
JWT Bearer Token based authorization
Command: api/authorizationtoken
When successfully authorized, you will receive a model containing a Token. To use this Token add a header with the token to any other calls you'll make. The Token is bound to the user and will expire after the expiration date and a new token will need to be generated.
When receiving a HTTP Statuscode 401, please reauthorize.
Post parameters
| Property name | Description | Data type | Required |
|---|---|---|---|
| Username | Username of a user within the database you want to connect to | string | yes |
| Password | Password of a user within the database you want to connect to | string | yes |
| Database | The database you want to connect to | string | yes |
Post example
POST https://api.easyflor.eu/api/authorizationtoken
{
"Username": "api",
"Password": "wouldntyouliketoknow",
"Database": "EasyFlor-Demo"
}
Returns: 200 OK / 401 Unauthorized
| Property name | Description | Data type |
|---|---|---|
| Token | Token used for authentication with each request | string |
| Expiration | The expiration date of when the Token will no longer be valid | DateTime |
Authorized request example
curl --location --request GET 'https://api.easyflor.eu/api/debtor' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer ##TOKEN##'
Unauthorization / logging out
Note: Unauthorization is only used for Cookie based authorization. When using the JWT Bearer Token based authorization the token will expire on its own after a set amount of time.
Command: api/unauthorization
Cookie based logging out. When sent, cookie that started session is made invalid and any further commands sent will receive a 401 unauthorized exception.
Post parameters: None
Post example:
POST http://api.easyflor.eu/api/unauthorization
Returns: Nothing
Master Data
Debtors
Commands:
api/debtorapi/debtor/idapi/debtorsincedate/id(date being date the debtor is modified)
A company or person to which goods are delivered and invoices sent.
Get example
GET https://api.easyflor.eu/api/debtor
GET https://api.easyflor.eu/api/debtor/20
Debtor in JSON format
[{
"Id": 417,
"ParentId": null,
"Name": "test debiteur",
"PaysVAT": true,
"Language": "nl",
"Config": {
"Id": "ShopWhyDebtorConfigs/debtors/417",
"DebtorId": "debtors/417",
"SalesUnits": [],
"DirectPay": false
},
"Addresses": null,
"Numbers": null,
"Contacts": [{
"Initials": "m",
"FirstName": "marco",
"MiddleName": null,
"LastName": "kleine",
"PlaceOfBirth": null,
"DateOfBirth": "1970-12-10T00:00:00Z",
"Function": null,
"Gender": "Man",
"Nationality": "Nederlandse",
"MailAddresses": [{
"Category": "MAIL_1",
"Value": "testje@hotmail.nl"
}],
"Numbers": null,
"Users": [{
"Username": "Testje",
"Password": "+TEkLGxMMyknX6ZcN6BRg8MTlyeWOzphnXXQQUZDm8E=",
"PasswordSalt": "hCJjTLQJchM=",
"CanOrder": true
}]
}],
"MailAddresses": null,
"CurrencyISOCode": "EUR",
"CreatedOn": "DateTime",
"OrderDays": [{
"Id": "orderdays/1",
"Name": "Levering dinsdag",
"Day": 2,
"MaxDefaultOrderTime": "-1.15:30:00",
"Lists": [{
"Id": 73,
"MaxOrderTime": "-1.15:30:00",
"MinOrderTime": "00:00:00"
}, {
"Id": 98,
"MaxOrderTime": "-1.15:30:00",
"MinOrderTime": "00:00:00"
}]
}]
}]
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Code | Code to reference debtor with. Used mainly for easier searching. | string | yes |
| ParentDebtorCode | Code of the debtor that this debtor is a subdebtor of | string | no |
| Administration | Each debtor belongs to an administration | string | yes |
| Name | Name of the debtor | string | yes |
| SecondName | A second name for the debtor | string | no |
| Category | The name of the category to which the debtor belongs | string | yes |
| Country | Country code 3 of the country that the debtor resides in | string | no |
| Currency | ISO code of the currency the debtor uses (Deprecated: equals CurrencyISOCode) | string | yes |
| Language | Name of the language the debtor uses | string | yes |
| TransporterCode | Code of the transporter that is used to make deliveries to this debtor. | string | no |
| TransporterName | Name of the transporter that is used to make deliveries to this debtor. | string | no |
| TransportRegion | Name of the region, for transport purposes | string | no |
| Employees | The employees that may place orders for this debtor. | IEnumerable<string> | no |
| OrderDayNames | List of ids to the order days collection, which is a collection detailing when the debtor may order from the webshop. | IEnumerable<string> | no |
| ToInvoice | List of ids of debtors that this debtor is invoiced for. I.e. we deliver to various subcompanies, but the main company pays for it. | IEnumerable<string> | no |
| Locations | IEnumerable<string> | no | |
| InvoiceCreditTemplate | Template that is used to create credit invoices. | string | no |
| InvoiceDebetTemplate | Template that is used to create debet invoices. | string | no |
| InvoiceCSVTemplate | Template that is used to create debet CSV invoices | string | no |
| InvoiceEventsTodo | The default events that must be done for an invoice after creation. | IEnumerable<string> | no |
| Price | Name of the default price settings that this debtor uses | string | no |
| PriceUseMarkupCategories | Whether the markup categories in the default price settings are used to calculate the prices for debtor. | bool? | no |
| PriceUseOriginalPrice | Whether the buying price is used when applying markup categories to calculate the prices for debtor. | bool? | no |
| MarkupCategories | Which markup categories (contains the ids of the actual markupcategories) are to be used when calculating the prices for debtor. | IEnumerable<string> | no |
| DistributionPackagingVATRate | Code of the VAT rate to be used for packaging (NL: fust) invoiced to this debtor. | string | no |
| DistributionTrolleyVATRate | Code of the VAT rate to be used for trolleys (NL: karren) invoiced to this debtor. | string | no |
| DistributionSellingLocation | When items are sold to this debtor, the items can be added to the stock of a certain location. This field contains the name of that location if that option is enabled. | string | no |
| Block | Block debtor from making purchases in webshop | bool | yes |
| Id | Int part of the debtor id | int | yes |
| ParentId | Int part of the debtor id that this debtor is nested under | int | no |
| PaysVAT | If enabled, VAT is added to the invoice | bool | yes |
| CurrencyISOCode | ISO code of the currency the debtor uses | string | yes |
| CreatedOn | DateTime created | DateTime | yes |
The remainder of this document contains the same technical API specifications as the Dutch source version. All endpoint definitions, parameter tables, JSON examples, and code samples are identical as they were already written in English.
Do you have questions or need help? Feel free to contact us by phone at +31 (0)71 30 20 310 or send an email to support@easyflor.nl.