- 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 |
InvoiceSettings (Not required object)
| Property | Description | Data type | Required |
|---|---|---|---|
| PaymentMethodId | Id of the default payment method uses for paying invoices. | string | no |
| PaymentCondition | Days debtor has for paying invoices | int | no |
| PaymentConditionNotify | Days debtor has before payment notifications are sent. | int | no |
| PaymentConditionBlock | Days debtor can have outstanding invoices before | int | no |
| PaymentConditionAmountBlock | decimal? | no | |
| SepaState | Values are First, WaitApproval, Recurring | string | no |
| CreditInvoiceTemplate | string | no | |
| DebetInvoiceTemplate | string | no | |
| DebetInvoiceCSVTemplate | string | no | |
| Settings | Values can be MailExport, CSVExport | List<string> | no |
| PaymentConditionLineTypes | What invoice lines need to be shown in 'amount to pay' statistics | List<string> | no |
| EventsTodo | The default events that must be done for an invoice after creation. | IEnumerable<string> | no |
DistributionSettings (Not required object)
| Property | Description | Data type | Required |
|---|---|---|---|
| PreOrderSettings | Values can be: NoRemainder (don't distribute remainder to debtor), NoStock (don't prefer stock distribution), NoSalesUnit (don't use sales units, match quantity), NoLeadingPrice (don't use leading price, always indication) | List<string> | no |
| FreshDaysExtra | Raise the amount of days before product expires with specified amount for this debtor. |
Config (Not required object)
Contains configuration specific to the debtor.
OrderDays (Not required IEnumerable<object>)
| Property | Description | Data type | Required |
|---|---|---|---|
| Id | string | yes | |
| Name | string | yes | |
| Day | string | no | |
| MaxDefaultOrderTime | string | no | |
| Lists | not in use | IEnumerable<object> | no |
| Hide | bool | yes | |
| MinDefaultOrderTime | string | no |
Addresses (IEnumerable<object>)
| Property | Description | Data type | Required |
|---|---|---|---|
| DebtorId | int | yes | |
| Category | string | yes | |
| Line1 | string | yes | |
| Line2 | string | no | |
| ZipCode | string | no | |
| City | string | yes | |
| State | string | no | |
| Country | string | yes | |
| DefaultAddresses | Values can be: ShippingAddress, BillingAddress | string array | no |
Numbers (IEnumerable<object>)
Numbers for this specific debtor, such as IBAN number.
| Property | Description | Data type | Required |
|---|---|---|---|
| DebtorCode | string | yes | |
| DebtorName | string | yes | |
| Category | LanguageValues | yes | |
| Value | string | yes | |
| DebtorId | int | yes |
Contacts (IEnumerable<object>)
Contacts known within the company.
| Property | Description | Data type | Required |
|---|---|---|---|
| Id | string | yes | |
| DebtorId | string | yes | |
| DebtorCode | string | yes | |
| Initials | string | no | |
| FirstName | string | no | |
| MiddleName | string | no | |
| LastName | string | yes | |
| DateOfBirth | string | no | |
| PlaceOfBirth | string | no | |
| Nationality | string | no | |
| Function | string | no | |
| Gender | string | no | |
| MailAddresses | See mailaddresses property of debtor. | IEnumerable<object> | no |
| Numbers | See numbers property of debtor. | IEnumerable<object> | no |
| Users | Properties are: Username (string), Password (byte[]), PasswordSalt (byte[]), CanOrder (bool), DebtorContactPersonId (string) | IEnumerable<object> | no |
| Defaults | Values can be Order, Invoice | IEnumerable<string> | no |
MailAddresses (IEnumerable<object>)
| Property | Description | Data type | Required |
|---|---|---|---|
| Category | Name of category in default language | string | yes |
| Value | Email address | string | yes |
Remarks (IEnumerable<object>)
| Property | Description | Data type | Required |
|---|---|---|---|
| Category | Category of item | string | yes |
| Description | Content of remark | string | yes |
| Date | Date / time of insert | DateTime | yes |
Note: Some properties may be deprecated (will be removed in one of the following versions) or not actively used in the application. Check the property descriptions for details.
PUT debtor
Endpoint: api/debtor/
Send:
{
"ParentId": 1234,
"Code": "TEST",
"Name": "test debiteur",
"PaysVAT": true,
"Language": "nl",
"CurrencyISOCode": "EUR",
"CountryCode": "NL"
}
Return: 200 response: <int:DebtorId>
PATCH debtor
Endpoint: api/debtor/<int:Debtor Id>
{
// (Equals PUT debtor)
}
Return: 200 response
PUT debtor shop config
Endpoint: api/debtor/<int:Debtor id>/webshop
Send:
{
"DirectPay": true
}
Returns: 200 response
PATCH debtor shop config
Endpoint: api/debtor/<int:Debtor Id>/webshop
Send:
{
"DirectPay": true
}
Return: 200 response
PUT debtor information
Endpoint: api/debtor/<int:Debtor Id>/(addresses|contacts|numbers)
addresses:
{
"Line1": "",
"Line2": "",
"ZipCode": "",
"City": "",
"State": "",
"Country": "",
"DefaultAddresses": []
}
Return: 200 response
contacts:
{
"Initials": "",
"FirstName": "",
"MiddleName": "",
"LastName": "",
"DateOfBirth": "",
"Function": ""
}
Return: 200 response: <int:contactId>
numbers:
{
"Code": "Code known in Number categories in EasyFlor",
"Value": "Value of this number"
}
Return: 200 response
PUT debtor contact information
Endpoint: api/debtor/<int:Debtor Id>/<int:Contact Id>/(users|mailAddresses|numbers)
users:
{
"Username": "",
"Password": "",
"CanOrder": true
}
Return: 200 response
mailAddresses:
{
"Value": "test@test.tt"
}
Return: 200 response
numbers (phonenumber):
{
"Value": "00312310630587"
}
Return: 200 response
PATCH debtor information
Endpoint: api/debtor/<int:Debtor Id>/(addresses|contacts|numbers)/<int:index>
Return: 200 response
PATCH debtor contact information
Endpoint: api/debtor/<int:Debtor Id>/<int:Contact Id>/(users|mailAddresses)/<int:index>
Return: 200 response
DELETE
Endpoint: api/debtor/<int:Debtor Id>/(addresses|contacts|mailAddresses)/<int:index>
Return: 200 response
Currently unsupported.
Password checking
- Get user input (Password + Username)
SHA256(<user input:Password> . "" . <PasswordSalt of Username>)should equal<Password of Username>
Suppliers
A company or person which delivers goods to the company whose database you're connecting to.
GET
GET /api/supplier
Received: [{<Supplier Object>}, ...]
GET /api/supplier/<string:supplierId>
Received:
{
"Id": "string - Id of supplier in Easyflor",
"Name": "string - Name of supplier",
"Code": "string - Code of supplier",
"Category": "string - Category of supplier (Manufacturer/Supplier/Grower)",
"Country": "string - Full name of country",
"Language": "string - ISO-639-1",
"MarkupCategories": ["IEnumerable<string>"]
}
Employee
An employee who works at the company whose database you're connecting to.
GET
GET /api/employee
Received: [{<Employee Object>}, ...]
GET /api/employee/<string:employeeId>
Received:
{
"Id": "string - Id of employee in Easyflor",
"Name": "string - Name of employee",
"Code": "string - Code of employee",
"ArticleGroups": ["IEnumerable<string>"]
}
Countries
A country stored in our database. Is tied to debtors, invoices, suppliers, etc.
Command
GET api/country
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the country | string | yes |
| Name | Name in the different languages | LanguageValue | yes |
| CountryCode2 | 2 letter code according to ISO-3166 alpha 2 | string | no |
| CountryCode3 | 3 letter code according to ISO-3166 alpha 3 | string | no |
Administrations
Administrations stored in our database. Is tied to debtors, locations, etc.
Commands
GET api/administration
GET api/administration/{id}
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the administration | string | yes |
| Name | Name of the administration | LanguageValue | yes |
Locations
Locations stored in our database. Is tied to debtors, purchases, etc.
Commands
GET api/location
GET api/location/{id}
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the location | string | yes |
| Name | Name of the location | string | yes |
| OwnerAdministrationId | The administration of the owner of this location | string | no |
Articles & Products
Article
An article, such as red roses.
GET*
GET /api/article
Received: [{Article Object}, ...]
GET /api/article/<string:articleId>
Received:
{
"id": "string - PK",
"articleGroupId": "int - FK to ArticleGroup",
"name": "LanguageValue - Name of article",
"code": "string - Code of article",
"primaryColor": "string - RHS Code",
"secondaryColor": "string - RHS Code",
"VBNCode": "string - VBN code of article",
"MPSCode": "string - MPS code of article",
"features": [
{
"code": "string - Floricode code of feature (050)",
"sort": "string - Floricode sort of feature (S01)",
"codeName": "LanguageValues - Full name of code (50 cm)",
"sortName": "LanguageValues - Full name of Sort (Potmaat)"
}
],
"sorts": [
{
"id": "string - ArticleSortId",
"name": "LanguageValue - Name of article",
"attachments": "string - Id of attachment | chapter attachments",
"features": [
{
"code": "string - Floricode code of feature (050)",
"sort": "string - Floricode sort of feature (S01)",
"codeName": "LanguageValues - Full name of code (50 cm)",
"sortName": "LanguageValues - Full name of Sort (Potmaat)"
}
],
"tags": ["LanguageValue - Extend article tags (Valentine)"]
}
],
"tags": ["LanguageValue - Tags given to an article (Autumn)"],
"MarkupCategories": ["string - Markup categories that are applied to products ordered from this supplier"],
"Employees": ["string - Employees that can order from supplier"],
"Currency": "string - ISO code of currency of supplier",
"Country": "string - Name of country of supplier",
"Language": "string - ISO code of language of supplier",
"Category": "string - Supplier category name"
}
ArticleSort
A variation in the article, for example you have the Red roses, of which there is a 50CM and 60CM article sort.
PUT
PUT /api/articlesort
Send:
{
"articleSorts": ["articleSortId"]
}
Received:
[{
"id": "string - ArticleSortId",
"name": "LanguageValue - Name of article",
"attachments": "string - Id of attachment | chapter attachments",
"features": [
{
"code": "string - Floricode code of feature (050)",
"sort": "string - Floricode sort of feature (S01)",
"codeName": "LanguageValues - Full name of code (50 cm)",
"sortName": "LanguageValues - Full name of Sort (Potmaat)"
}
],
"tags": ["LanguageValue - Extend article tags (Valentine)"]
}]
ArticleGroup
A category for the articles. Categories can be nested in other categories. I.e. category Roses falls under category Flowers.
GET
GET /api/articlegroup
Received: [{ArticleGroup Object}, ...]
GET /api/articlegroup/<int:articlegroupid>
Received:
{
"id": "int - PK",
"parentId": "int - FK of ArticleGroup",
"name": "LanguageValues - Name of article group",
"featureTypes": ["string - List of feature types to show for group"],
"hide": "bool - true = not shown on shop"
}
Markup Categories
Get the markup categories.
Command
GET /api/MarkupCategories
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the markup category in string format (MarkupCategories/203) | string | yes |
| Name | Name of Category | LanguageValues | yes |
Attachments
An attachment stored in our database, for example the picture of an article.
GET
GET https://images.easyflor.eu/vk_1297_ef/Website/Photos/<id:string>.jpg
Remove string
attachments/from the ID
Returns
image in image formats: jpg/png/gif/bmp unresized
Webshop
ListGroup
A list group is a collection of lists which are shown under one header on the shop.
GET
GET /api/listgroup
Received: [{<ListGroup>}, ...]
GET /api/listgroup/<int:listgroupid>
Received:
{
"id": "int - PK",
"name": "string - Name of list",
"lists": ["Array(ListObj) - ListId's"],
"debtors": ["Array(int) - Debtors"]
}
ListObject
{
"id": "string - PK List",
"order": "int - Order of list",
"dateFrom": "datetime - Date from which it is active",
"dateTo": "datetime - Date from which it is closed",
"maxCancellationTime": "timespan - How long till a order can't be changed"
}
ListArticleSort
An article sort offered on a webshop list.
Events
- Name: ListArticleSort
- Payload:
[{ Id: <string:id>, Type: <PUT|DELETE> }, ...] - Will fire when new ListArticleSort is added/changed/removed
GET
GET /api/listarticlesort
Received: [{<ListArticleSort>}, ...]
GET /api/list/<string:list>
GET /api/listArticleSort/<string:id>
PUT
PUT /api/listarticlesort
Send:
{
"listArticleSorts": ["string:id", "string:id"]
}
Received:
{
"id": "string - PK",
"articleSortId": "string - FK ArticleSort",
"articleSortTags": ["LanguageValues - Combination of all tags (Article, articlesort and ListArticleSort)"],
"listId": "string - FK List",
"salesUnits": [
{
"quantity": "int - quantity per unit",
"salesUnit": "int - unit"
}
],
"features": [
{
"code": "string - Floricode code of feature (050)",
"sort": "string - Floricode sort of feature (S01)",
"codeName": "LanguageValues - Full name of code (50 cm)",
"sortName": "LanguageValues - Full name of Sort (Potmaat)"
}
],
"quantityAvailable": "int - Quantity Available",
"isCheckedIn": "bool - Is checked in?",
"supplierId": "string - FK Supplier",
"manufacturerId": "string - FK Manufacturer",
"attachments": "string - Attachments | Chapter Attachments",
"dateFrom": "Date - Date from when active",
"dateTo": "Date - Date to active",
"packagings": ["string - Array with packaging codes (577)"],
"minQuantity": "int - Minimal number to order",
"originalPrice": "decimal - Original price of article"
}
DebtorListArticleSortPrice
A price for a ListArticleSort
PUT
PUT /api/debtorlistarticlesortprice
Send:
{
"debtorId": "int - DebtorId (Required)",
"listArticleSorts": ["string - ListArticleSortId (Required)"]
}
Received:
[
{
"id": "string - PK ListArticleSortId",
"stock": "int - Items in stock",
"prices": [
{
"quantity": "int - Quantity",
"price": "decimal - Price in currency of debtor",
"priceDefault": "decimal - Price in currency of shop"
}
]
}
]
Favorites
Favorites stored in our database.
Command
GET api/ShopFavorites
Get returns
| Property | Description | Data type | Required |
|---|---|---|---|
| DebtorId | Id of the debtor | string | yes |
| ArticleSorts | Array of article sorts | array | yes |
ArticleSorts object:
| Property | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the articlesort | string | yes |
| Name | Name of article | LanguageValue | yes |
| ArticleId | Id of the article | string | yes |
| MaxPrice | decimal | no | |
| MinPrice | decimal | no | |
| Features | Features of articleSort (extends) | array(obj) | no |
| Tags | Extend article tags (Valentine) | array(LanguageValue) | no |
DebtorSessions
Debtor Session record stored in the database contains last known activities.
Commands
GET api/ShopDebtorSession
GET api/ShopDebtorSession/{id}
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| DebtorId | Id of the debtor | string | yes |
| LastActivityOn | Date and time of last activity | DateTime | yes |
Orders & Purchases
Pre orders
The request (demand) for a certain article sort from a debtor.
GET
GET /api/preorder/<int:PreOrderId>
Received:
{
"price": "decimal - In currency of debtor",
"date": "date - Date of PreOrder",
"listArticleSortId": "string - FK ListArticleSort",
"articleSortId": "string - FK ArticleSortId",
"packagings": ["string - Code of packaging (577)"],
"quantity": "int - Number of items ordered by customer",
"quantityOrdered": "int - Number of items already ordered by backoffice",
"quantityDistributed": "int - Number of items assigned to customer",
"dateTimeLastModified": "datetime - DateTime of last modified",
"salesUnits": [
{
"quantity": "int - quantity for salesUnit",
"salesUnit": "int - salesUnit"
}
],
"orderResponses": [
{
"quantity": "int - number ordered",
"state": "enum - Ok, Error, Inconclusive, PreOrder, Cancelled"
}
]
}
Quantity explained
- Quantity = Quantity needed by customer (the amount ordered by customer)
- QuantityOrdered = Quantity ordered at external supplier by backoffice owner. When Quantity equals QuantityOrdered, order is completely ordered at external supplier
- QuantityDistributed = Quantity assigned of items in stock by backoffice owner. When Quantity equals QuantityDistributed, order is completely assigned to customer
Flow
When directly from stock:
- Quantity = 100 example
- QuantityOrdered equals 0 or empty (it's not ordered but directly given)
- QuantityDistributed equals Quantity
When ordered at external supplier but not yet confirmed by supplier:
- Quantity = 100
- QuantityOrdered equals Quantity
- QuantityDistributed is lower than Quantity (It might be already partially confirmed and sent through)
When ordered at external supplier and confirmed by supplier:
- Quantity equals QuantityOrdered equals QuantityDistributed.
State explanation
When Quantity is positive:
| State | Description |
|---|---|
| Ok | Ordered successfully |
| Error | Not available |
| Inconclusive | External party returned an unexpected message |
| PreOrder | Backordered, no further status update |
When Quantity is negative (part or whole order is cancelled):
| State | Description |
|---|---|
| Cancelled | Order successfully cancelled |
| Error | Order not cancelled |
| Inconclusive | External party returned an unexpected message |
PUT
PUT /api/preorder
Send:
{
"Id": "int - Optional, filling it will update order rather than create a new one.",
"debtorId": "int",
"listArticleSortId": "string - FK ListArticleSort",
"date": "Date - in UTC (ends with Z)",
"quantity": "int - Number of items chosen by debtor times QuantityPerUnit given by DebtorListArticleSortPrice",
"price": "decimal - Price, given by DebtorListArticleSortPrice"
}
Received:
{
"id": "string - preOrder id",
"result": "int - Amount not added (if ordered 20, it may return 5, so your real order amount is 15)"
}
PreOrderDate
GET
GET api/preorderdate/YYYY-MM-DD/<int:debtorid>
Received: See PreOrder
Purchases
A purchase is a buying action from the company whose database you're in, from a supplier. A purchase can be the result of a preorder.
Commands
| Endpoint | Notes |
|---|---|
api/purchase |
* only outside of opening hours |
api/purchase/id |
|
api/PurchaseSinceDate/** |
** only last 7 days within opening hours. Date being date the purchase is delivered |
api/PurchaseSinceChangeDate/** |
** only last 7 days within opening hours. Date being date the purchase is delivered |
api/purchase/stock |
list of all purchases which have not been sold completely |
DateFrom/DateTo examples (DateTo is optional):
api/PurchaseSinceDate/20170317api/PurchaseSinceDate/20170301/20170330api/PurchaseSinceChangeDate/20170317api/PurchaseSinceChangeDate/20170301/20170330
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the purchase in string format (purchases/203) | string | yes |
| Name | Name of article, i.e. red roses | LanguageValues | yes |
| Description | Description of article, i.e. 50cm | LanguageValues | yes |
| Date | Date and time when the article was bought | DateTime | yes |
| DistributedPurchaseIds | Ids of the sales records as strings (distributedpurchases/204) | List<string> | yes |
| QuantityBought | amount bought in this purchase | int | yes |
| QuantitySold | amount sold of the purchase | int | yes |
| OriginalPrice | Price article was bought for (per quantity) | decimal | yes |
| RaisedOriginalPrice | OriginalPrice with markup for indirect purchasing costs | decimal | yes |
| ArticleGroupId | Id of the article group of the article bought | string | yes |
| ArticleGroupName | Name of the article group of the article bought | LanguageValues | yes |
| Employee | Name of the employee who did the purchase | string | no |
| ArticleId | Id of the article the purchase is connected to. | string | yes |
| LatestDistributedPurchaseDate | Date that the last distribution was created | DateTime? | no |
| SupplierId | Id of the supplier of the purchased goods | string | yes |
| Features | Features of articleSort | array(obj) | yes |
Features object:
{
"code": "string - Floricode code of feature (050)",
"sort": "string - Floricode sort of feature (S01)",
"codeName": "LanguageValues - Full name of code (50 cm)",
"sortName": "LanguageValues - Full name of Sort (Potmaat)"
}
Get example
GET https://api.easyflor.eu/api/purchasesincedate/20170317
[{
"Id": "purchases/109096",
"ArticleGroupId": "articlegroups/99",
"ArticleGroupName": {
"de": "Andere",
"en": "Other",
"nl": "Overig",
"it": "Altri",
"da": null,
"pl": "Rozne",
"fr": "Autres",
"cs": null,
"es": null,
"se": null
},
"Date": "2016-12-15T09:27:47.6922085",
"OriginalPrice": 0.0,
"RaisedOriginalPrice": 0.0,
"QuantityBought": 4,
"QuantitySold": 4,
"Name": {
"de": "DIVERSEN H%",
"en": "DIVERSEN H%",
"nl": "EIGEN REGEL H% (geen commissie)",
"it": null,
"da": null,
"pl": null,
"fr": "DIVERSEN H%",
"cs": null,
"es": null,
"se": null
},
"Description": {"de": null, "en": null, "nl": " ", "it": null, "da": null, "pl": null, "fr": null, "cs": null, "es": null, "se": null},
"Employee": null,
"DistributedPurchaseIds": ["DistributedPurchases/72458"]
}]
DistributedPurchase
A distributed purchase represents goods from a purchase that have been allocated/sold to a specific debtor.
Commands
| Endpoint | Notes |
|---|---|
api/distributedpurchase |
* only outside of opening hours |
api/distributedpurchase/id |
|
api/DistributedPurchaseSinceChangeDate/** |
** only last 7 days within opening hours. Date being date the purchase is delivered |
DateFrom/DateTo examples (DateTo is optional):
api/DistributedPurchaseSinceChangeDate/20170317api/DistributedPurchaseSinceChangeDate/20170301/20170330
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the purchase in string format (purchases/203) | string | yes |
| Name | Name of article, i.e. red roses | LanguageValues | yes |
| Description | Description of article, i.e. 50cm | LanguageValues | yes |
| Date | Date and time when the article was bought | DateTime | yes |
| DistributedPurchaseIds | Ids of the sales records as strings (distributedpurchases/204) | List<string> | yes |
| QuantityBought | amount bought in this purchase | int | yes |
| QuantitySold | amount sold of the purchase | int | yes |
| OriginalPrice | Price article was bought for (per quantity) | decimal | yes |
| RaisedOriginalPrice | OriginalPrice with markup for indirect purchasing costs | decimal | yes |
| ArticleGroupId | Id of the article group of the article bought | string | yes |
| ArticleGroupName | Name of the article group of the article bought | LanguageValues | yes |
| Employee | Name of the employee who did the purchase | string | no |
| ArticleId | Id of the article the purchase is connected to. | string | yes |
| LatestDistributedPurchaseDate | Date that the last distribution was created | DateTime? | no |
| SupplierId | Id of the supplier of the purchased goods | string | yes |
Invoicing - Debet
Invoices
An invoice made for a debtor, which can be divided into the subtypes credit invoice and debet invoice.
Commands
GET /api/invoice/
GET /api/InvoiceSinceDate/<dateFrom: yyyyMMdd>/<dateTo: yyyyMMdd>
GET /api/debtorinvoice/<int : debtor id>
Note: dateTo isn't required
Get returns
{
"Id": "string - id of invoice",
"DebtorId": "string - id of debtor",
"Date": "date - invoice date",
"Administration": "string - id of administration",
"BillingDebtorContactAddressId": "string - id of debtor billing address",
"ShippingDebtorContactAddessId": "string - id of debtor shipping address",
"AdministrationContactAddressId": "string - id of administration address",
"DebtorPaysVat": "bool - does debtor pay vat",
"CountryId": "string - id of country of debtor",
"Totals": "totals - total excl. vat, incl. vat and per vat",
"Negative": "bool - is debet invoice total < 0 or credit > 0",
"InvoiceState": "string - id of payment state of invoice",
"Currency": "string - name of currency",
"CurrencyCode": "string - code of currency",
"CurrencyTotalDecimals": "integer - amount of decimals total is rounded on",
"CurrencyISOCode": "string - ISO code of currency, like $",
"CurrencyId": "string - id of currency",
"TransportRegion": "string - Name of transport region",
"Done": "bool - Invoice has been finalized",
"Payed": "bool - Invoice has been paid",
"ToPay": "decimal - Amount of invoice not yet paid in invoice currency.",
"DaysOpen": "int? - If invoice has not been paid, this will return the amount of days between the invoice date and current date. Otherwise null.",
"Exported": "bool - Invoice exported to accountant",
"Statistics": "statistics - Statistics for CBS",
"Retrospectives": "retrospectives - Markups applied to invoice",
"Language": "string - Language code for invoice"
}
Invoice as PDF
Get Invoice PDF by ID.
Command
GET /api/invoicepdf/<string:InvoiceId>
Get returns
PDF file containing the invoice
Create debet invoice for debtor
Create a debet invoice containing all distributed orders till given moment.
Command
POST /api/debtordebetinvoicecreate/<int:DebtorId>
Received
<string:InvoiceId>
or
<empty> when not able to create invoice
Invoiced distributed purchases
Flowers and plants sold to a debtor and then invoiced.
Commands
| Endpoint | Notes |
|---|---|
api/DebetInvoicePurchaseItem |
* only outside of opening hours |
api/DebetInvoicePurchaseItem/id |
|
api/DebetInvoicePurchaseItemSinceDate/id |
** date being invoice date |
api/DebetInvoicePurchaseItemSinceDate/fromdate/todate |
* |
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the invoice line of the distributed purchase | string | yes |
| Name | Name of article, copied from distribution | string | yes |
| InvoiceNumber | invoice number as a string | string | no |
| InvoiceDate | Date invoice was sent | DateTime | yes |
| DebtorCode | Code of the debtor of the invoice line | string | yes |
| ArticleId | Id of the article as string (articles/3) | string | yes |
| ArticleSortId | Id of the article sort as string (articlesorts/3) | string | yes |
| ArticleGroupId | Id of the highest article group the article is linked to. I.e. if it's flowers / red roses, then this will contain the id of article group flowers. | string | yes |
| ArticleGroupName | the name in the default language of the specified ArticleGroupId | string | yes |
| PurchaseId | Id of the original purchase from which the article came. | string | yes |
| Date | Date the purchase was sold to debtor | DateTime | yes |
| Quantity | Amount of the packaging sold to debtor | decimal | yes |
| DebtorId | Id of debtor as string (Debtors/3) | string | yes |
| DebtorIdInt | Int part of debtor string (3) | int | yes |
| InvoiceId | Id of invoice as string (invoices/32) | string | yes |
| VATRateId | Id of the vat rate that applies to this invoice line | string | no |
| OriginalPrice | Buying price of the article per quantity | decimal | no |
| Country | code 2 of the country of the invoice | string | yes |
| CountryCode | code 2 of the country of the invoice | string | yes |
| Price | price of a quantity of the invoice line, converted to default currency. | decimal | yes |
| TotalPrice | Total price of the quantity of the invoice line, converted to default currency. | decimal | yes |
| Employee | Name of the employee that sold the flower/plant (not invoiced!) | string | no |
| Employees | The codes of the employees that may sell flowers/plants to this debtor | IEnumerable<string> | no |
| SupplierId | The id of the supplier | string | no |
| ManufacturerSupplierId | The id of the manufacturer (table supplier) | string | no |
Invoiced trolleys
Trolleys (NL: karren) that are invoiced.
Commands
| Endpoint | Notes |
|---|---|
api/DebetInvoiceTrolleyItem |
* only outside of opening hours |
api/DebetInvoiceTrolleyItem/id |
|
api/DebetInvoiceTrolleyItemSinceDate/** |
** date being invoice date |
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the invoice line of the distributed purchase | string | yes |
| InvoiceNumber | invoice number as a string | string | no |
| InvoiceDate | Date invoice was sent | DateTime | yes |
| DebtorCode | Code of the debtor of the invoice line | string | yes |
| PackagingCode | Code of the packaging | string | yes |
| Date | Date the packaging was sold to debtor | DateTime | yes |
| Quantity | Amount of the packaging sold to debtor | decimal | yes |
| QuantityAttachments | Amount of attachments sold to debtor | int | yes |
| QuantityPlates | Amount of plates sold to debtor | int | yes |
| PackagingDepositPrice | Deposit price per quantity (NL: statiegeld) in default currency | decimal | yes |
| PackagingPrice | Price per quantity in default currency | decimal | yes |
| PackagingTotalDepositPrice | Total deposit price of packaging in invoice line in default currency | decimal | yes |
| PackagingTotalPrice | Total price of packaging in invoice line in default currency | decimal | yes |
| DebtorId | Id of debtor as string (Debtors/3) | string | yes |
| DebtorIdInt | Int part of debtor string (3) | int | yes |
| InvoiceId | Id of invoice as string (invoices/32) | string | yes |
Get example
GET api/DebetInvoicePackagingItemSinceDate/20170318
[{
"Id": "debetinvoicedistributedtrolleyitems/4667",
"InvoiceNumber": "66000013",
"DebtorCode": "DATAB",
"PackagingCode": "DC",
"Date": "2016-11-17T00:00:00Z",
"Quantity": 1.0,
"PackagingDepositPrice": 7.000,
"PackagingPrice": 0.040,
"PackagingTotalDepositPrice": 7.000,
"PackagingTotalPrice": 0.040,
"InvoiceDate": "2016-11-17T00:00:00Z",
"DebtorId": "debtors/1536",
"DebtorIdInt": 1536,
"InvoiceId": "DebetInvoices/5106"
}]
Invoiced packaging
Packaging (NL: fust) that is invoiced separately from the packaging used to deliver flowers. For example the tray that a load of flowers are on.
Commands
| Endpoint | Notes |
|---|---|
api/DebetInvoicePackagingItem |
* only outside of opening hours |
api/DebetInvoicePackagingItem/id |
|
api/DebetInvoicePackagingItemSinceDate/id |
** date being invoice date |
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the invoice line of the distributed purchase | string | yes |
| InvoiceNumber | invoice number as a string | string | no |
| InvoiceDate | Date invoice was sent | DateTime | yes |
| DebtorCode | Code of the debtor of the invoice line | string | yes |
| PackagingCode | Code of the packaging | string | yes |
| Date | Date the packaging was sold to debtor | DateTime | yes |
| Quantity | Amount of the packaging sold to debtor | decimal | yes |
| SingleUse | Is packaging only to be used once or can it be returned? | bool | yes |
| PackagingDepositPrice | Deposit price per quantity (NL: statiegeld) in default currency | decimal | yes |
| PackagingPrice | Price per quantity in default currency | decimal | yes |
| PackagingTotalDepositPrice | Total deposit price of packaging in invoice line in default currency | decimal | yes |
| PackagingTotalPrice | Total price of packaging in invoice line in default currency | decimal | yes |
| DebtorId | Id of debtor as string (Debtors/3) | string | yes |
| DebtorIdInt | Int part of debtor string (3) | int | yes |
| InvoiceId | Id of invoice as string (invoices/32) | string | yes |
Packaging in invoiced purchases
When you sell your flowers, you also use packaging (NL: fust) to deliver it. With this command you can retrieve the amount of packaging you deliver this way and its value.
Commands
| Endpoint | Notes |
|---|---|
api/PackagingInDebetInvoicePurchaseItem |
* only outside of opening hours |
api/PackagingInDebetInvoicePurchaseItem/id |
|
api/PackagingInDebetInvoicePurchaseItemSinceDate/id |
** date being invoice date |
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the invoice line of the distributed purchase | string | yes |
| InvoiceNumber | invoice number as a string | string | no |
| InvoiceDate | Date invoice was sent | DateTime | yes |
| DebtorCode | Code of the debtor of the invoice line | string | yes |
| PackagingCode | Code of the packaging | string | yes |
| Date | Date the packaging was sold to debtor | DateTime | yes |
| Quantity | Amount of the packaging sold to debtor | decimal | yes |
| SingleUse | Is packaging only to be used once or can it be returned? | bool | yes |
| PackagingDepositPrice | Deposit price per quantity (NL: statiegeld) | decimal | yes |
| PackagingPrice | Price per quantity | decimal | yes |
| PackagingTotalDepositPrice | Total deposit price of packaging in invoice line | decimal | yes |
| PackagingTotalPrice | Total price of packaging in invoice line | decimal | yes |
| DebtorId | Id of debtor as string (Debtors/3) | string | yes |
| DebtorIdInt | Int part of debtor string (3) | int | yes |
| InvoiceId | Id of invoice as string (invoices/32) | string | yes |
Custom lines on invoice
Line created by user with no link to a purchase or article, just an own description.
Commands
| Endpoint | Notes |
|---|---|
api/DebetInvoiceCustomItem |
* only outside of opening hours |
api/DebetInvoiceCustomItem/id |
|
api/DebetInvoiceCustomItemSinceDate/id |
** date being invoice date |
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the invoice line of the distributed purchase | string | yes |
| Name | Name given to the custom item by employee (should correspond with a flower/plant name) | string | yes |
| Description | Description given to the custom item by employee | string | no |
| InvoiceNumber | invoice number as a string | string | no |
| InvoiceDate | Date invoice was sent | DateTime | yes |
| DebtorCode | Code of the debtor of the invoice line | string | yes |
| Quantity | Amount of the packaging sold to debtor | decimal | yes |
| DebtorId | Id of debtor as string (Debtors/3) | string | yes |
| DebtorIdInt | Int part of debtor string (3) | int | yes |
| InvoiceId | Id of invoice as string (invoices/32) | string | yes |
| VATRateId | Id of the vat rate that applies to this invoice line | string | no |
| Country | code 2 of the country of the invoice | string | yes |
| CountryCode | code 2 of the country of the invoice | string | yes |
| Price | price of a quantity of the invoice line, converted to default currency. | decimal | yes |
| TotalPrice | Total price of the quantity of the invoice line, converted to default currency. | decimal | yes |
| Employees | The codes of the employees that may sell flowers/plants to this debtor | IEnumerable<string> | no |
Invoicing - Credit
Credited deposits
Packaging (NL: fust) and Trolleys (NL: karren) that carry a deposit price and have been returned by debtor.
Commands
| Endpoint | Notes |
|---|---|
api/CreditInvoiceDepositItem |
* only outside of opening hours |
api/CreditInvoiceDepositItem/id |
|
api/CreditInvoiceDepositItemSinceDate/id |
** date being invoice date |
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the invoice line of the distributed purchase | string | yes |
| InvoiceDate | Date invoice was sent | DateTime | yes |
| DebtorCode | Code of the debtor of the invoice line | string | yes |
| PackagingId | Id of the packaging that has been returned. Is null if trolleyId is filled. | string | no |
| TrolleyId | Id of the trolley that has been returned. Is null if packagingId is filled. | string | no |
| Date | Date the packaging was sold to debtor | DateTime | yes |
| Quantity | Amount of the packaging sold to debtor | decimal | yes |
| SingleUse | Is packaging only to be used once or can it be returned? | bool | yes |
| Price | Deposit price per quantity (NL: statiegeld) in default currency | decimal | yes |
| Country | Country code 2 of the country that the debtor resides in | string | yes |
| CountryCode | Country code 2 of the country that the debtor resides in | string | yes |
| DebtorId | Id of debtor as string (Debtors/3) | string | yes |
| DebtorIdInt | Int part of debtor string (3) | int | yes |
| InvoiceId | Id of invoice as string (invoices/32) | string | yes |
Custom credited lines
Line created by user with no link to a purchase or article, just an own description.
Commands
| Endpoint | Notes |
|---|---|
api/CreditInvoiceCustomItem |
* only outside of opening hours |
api/CreditInvoiceCustomItem/id |
|
api/CreditInvoiceCustomItemSinceDate/id |
** date being invoice date |
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the invoice line of the distributed purchase | string | yes |
| Name | Name given to the custom item by employee (should correspond with a flower/plant name) | string | yes |
| Description | Description given to the custom item by employee | string | no |
| InvoiceNumber | invoice number as a string | string | no |
| InvoiceDate | Date invoice was sent | DateTime | yes |
| DebtorCode | Code of the debtor of the invoice line | string | yes |
| Quantity | Amount of the packaging sold to debtor | decimal | yes |
| DebtorId | Id of debtor as string (Debtors/3) | string | yes |
| DebtorIdInt | Int part of debtor string (3) | int | yes |
| InvoiceId | Id of invoice as string (invoices/32) | string | yes |
| VATRateId | Id of the vat rate that applies to this invoice line | string | no |
| Country | code 2 of the country of the invoice | string | yes |
| CountryCode | code 2 of the country of the invoice | string | yes |
| Price | price of a quantity of the invoice line, converted to default currency. | decimal | yes |
| TotalPrice | Total price of the quantity of the invoice line, converted to default currency. | decimal | yes |
| Employees | The codes of the employees that may sell flowers/plants to this debtor | IEnumerable<string> | no |
Credited distributed purchases
Flowers and plants sold to a debtor, then invoiced and then credited.
Commands
| Endpoint | Notes |
|---|---|
api/CreditInvoicePurchaseItem |
* only outside of opening hours |
api/CreditInvoicePurchaseItem/id |
|
api/CreditInvoicePurchaseItemSinceDate/id |
** date being invoice date |
Get returns
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the invoice line of the distributed purchase | string | yes |
| InvoiceNumber | invoice number as a string | string | no |
| InvoiceDate | Date invoice was sent | DateTime | yes |
| DebtorCode | Code of the debtor of the invoice line | string | yes |
| ArticleId | Id of the article as string (articles/3) | string | yes |
| ArticleSortId | Id of the article sort as string (articlesorts/3) | string | yes |
| ArticleGroupId | Id of the highest article group the article is linked to. I.e. if it's flowers / red roses, then this will contain the id of article group flowers. | string | yes |
| ArticleGroupName | the name in the default language of the specified ArticleGroupId | string | yes |
| PurchaseId | Id of the original purchase from which the article came. | string | yes |
| Date | Date the packaging was sold to debtor | DateTime | yes |
| Quantity | Amount of the packaging sold to debtor | decimal | yes |
| DebtorId | Id of debtor as string (Debtors/3) | string | yes |
| DebtorIdInt | Int part of debtor string (3) | int | yes |
| InvoiceId | Id of invoice as string (invoices/32) | string | yes |
| VATRateId | Id of the vat rate that applies to this invoice line | string | no |
| OriginalPrice | Buying price of the article per quantity | decimal | no |
| Country | code 2 of the country of the invoice | string | yes |
| CountryCode | code 2 of the country of the invoice | string | yes |
| Price | price of a quantity of the invoice line, converted to default currency. | decimal | yes |
| TotalPrice | Total price of the quantity of the invoice line, converted to default currency. | decimal | yes |
| Employee | Name of the employee that sold the flower/plant (not invoiced!) | string | no |
| Employees | The codes of the employees that may sell flowers/plants to this debtor | IEnumerable<string> | no |
Payments
Payments
You can register payments done for an invoice in Easyflor. For example bank transactions, cash payments and cheques. The payment can then be linked to one or more invoices.
Commands
GET api/payment
GET api/payment/id
GET api/paymentsincedate/id
date being payment date
Get returns
| Property | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the payment in string format (payments/1) | string | yes |
| DebtorCode | Code of the debtor that made the payment | string | yes |
| Debtor | Name of the debtor that made the payment | string | yes |
| DateTime | Date and time at which the payment was made | DateTime | yes |
| EmployeeName | Name of the employee that created the payment | string | no |
| PaymentMethod | Name of the payment method | string | yes |
| Description | Description of the payment | string | no |
| Number | Own (reference)number given to the payment | string | no |
| CurrencyDecimals | Amount of decimals in the currency used for payment | int | yes |
| CurrencyCode | Code of the currency used for payment | string | yes |
| Amount | Amount of currency paid | int | yes |
| AmountLeft | Amount of currency not yet linked to invoices | int | yes |
| PaidInvoices | Invoices that the payment is linked to. | object collection | yes |
PaidInvoices object:
| Property | Description | Data type | Required |
|---|---|---|---|
| InvoiceId | Id of the invoice that the payment is done on. | string | yes |
| Amount | Amount of currency that is paid on the invoice. | decimal | yes |
| DateTime | Date time the payment was linked | DateTime | yes |
| UserId | Id of User that linked payment | string | no |
Synchronization
Sync
With these options you can sync between Easyflor and your application.
When syncing for the first time, do a full sync of all the available data. From that point on, get the highest change date/time (DateTimeLastModified) of the records you exported during the full sync and use that for your next request. This way you won't have to do a full sync every time.
These calls are limited to 2000 records per call, when doing a full sync, first sync with the FULL SYNC endpoint, afterwards take the MAX(DateTimeLastModified) and sync from that date to get the next 2000 records.
Commands
| Endpoint | Description |
|---|---|
api/DistributedPurchaseSync/ |
full sync |
api/DistributedPurchaseSync/{DateTime} |
sync from date |
api/PreOrderSync/ |
full sync |
api/PreOrderSync/{DateTime} |
sync from date |
api/DistributedTrolleySync/{DateTime} |
sync from date |
api/PurchaseSync/ |
full sync |
api/PurchaseSync/{DateTime} |
sync from date |
api/DebtorSync/ |
full sync |
api/DebtorSync/{DateTime} |
sync from date |
api/InvoiceSync/ |
full sync |
api/InvoiceSync/{DateTime} |
sync from date |
api/ListPreOrderGroupItemSyncAll/{Id} |
full sync |
api/ListPreOrderGroupItemSync/{DateTime}/{Id} |
sync from date |
DistributedPurchaseSync
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the distributed purchase | string | yes |
| Name | Name of article, copied from distribution | string | yes |
| Description | Description of article, i.e. 50cm | string | yes |
| ArticleId | Id of the article as string (articles/3) | string | yes |
| ArticleSortId | Id of the article sort as string (articlesorts/3) | string | yes |
| ArticleGroupId | Id of the highest article group the article is linked to. I.e. if it's flowers / red roses, then this will contain the id of article group flowers. | string | yes |
| PurchaseId | Id of the original purchase from which the article came. | string | yes |
| DebtorId | Id of debtor as string (Debtors/3) | string | yes |
| OriginalPrice | Buying price of the article per quantity | decimal | no |
| Price | Price of a quantity of the invoice line, converted to default currency. | decimal | yes |
| BasePrice | Total price of the quantity of the invoice line, converted to default currency. | decimal | yes |
| EmployeeId | Id of the employee that sold the flower/plant (not invoiced!) | string | no |
| SupplierId | The id of the supplier | string | no |
| ManufacturerSupplierId | The id of the manufacturer (table supplier) | string | no |
| CurrencyId | Id of currency | string | yes |
| IsCheckedIn | The checked in status | bool | yes |
| IsCheckedInLabel | The label checked in status | bool | yes |
| Date | Date for which the article needs to be distributed | datetime | yes |
| Events | The history of the given record and the employee responsible for a given change. | List | yes |
| EventsRMA | RMA events | List | yes |
| DateTimeLastModified | The date time on which a record is created/updated | DateTime | yes |
Events types:
| Sort | Handled | Description |
|---|---|---|
| CheckedIn | false | Checked in by this employee |
| CheckedIn | true | Label printed for this distributedpurchase by this employee |
| Checked | false | Checked with scanner by this employee |
| Checked | true | "Eindcontrole" without scanner, employee agreed that all things has been done |
| Packaged | true | Packaged by this employee |
| RMA | true | An RMA has been made by this employee |
| EKT | false | This item will be send using EKT |
| EKT | true | This item is send using EKT |
EventsRMA object:
| Property | Description |
|---|---|
| Quantity | Number of items RMA'ed |
| RMAReason | The reason for the RMA |
| RMADescription | Description of RMA |
| RMADistributedPurchaseId | Id of DistributedPurchase which was RMA'ed |
PurchaseSync
| Property name | Description | Data type | Required |
|---|---|---|---|
| Id | Id of the purchase in string format (purchases/203) | string | yes |
| Name | Name of article, i.e. red roses | string | yes |
| Description | Description of article, i.e. 50cm | string | yes |
| Date | Date and time when the article was bought | DateTime | yes |
| DistributedPurchaseIds | Ids of the sales records as strings (distributedpurchases/204) | List<string> | yes |
| QuantityBought | Amount bought in this purchase | int | yes |
| QuantitySold | Amount sold of the purchase | int | yes |
| OriginalPrice | Price article was bought for (per quantity) | decimal | yes |
| ArticleGroupId | Id of the article group of the article bought | string | yes |
| EmployeeId | Id of the employee who did the purchase | string | no |
| ArticleId | Id of the article the purchase is connected to. | string | yes |
| ArticleSortId | Id of the article sort as string (articlesorts/3) | string | yes |
| SupplierId | Id of the supplier of the purchased goods | string | yes |
| CurrencyId | Id of currency | string | yes |
| LocationSectionId | Id of location section | string | no |
| LocationId | Id of location | string | yes |
| IsCheckedIn | The checked in status | bool | yes |
| DateTimeLastModified | The date time on which a record is created/updated | DateTime | yes |
DebtorSync
See Debtor Get returns section above for full property list.
PreOrderSync
Same as PreOrder
InvoiceSync
Same as Invoice
Get example
GET api/DistributedPurchaseSync/2021-11-03T11:00:00
[
{
"id": "DistributedPurchases/2382500",
"articleId": "articles/24949/-",
"articleSortId": "ArticleSorts/24949/-/S20-040/S99-PROTEA CYN AYOBA ARCTIC ICE",
"articleGroupId": "articlegroups/33",
"isCheckedIn": true,
"isCheckedInLabel": false,
"events": [
{
"sort": "CheckedIn",
"quantity": 4,
"handled": false,
"employeeId": "employees/65",
"dateTime": "2021-11-03T19:59:04.5205191Z"
}
],
"name": "PROTEA CYN. AYOBA ARCTIC ICE",
"description": "40 cm",
"purchaseId": "DistributedPurchaseOrderables/993356",
"debtorId": "debtors/4579",
"employeeId": "employees/65",
"price": 6.85,
"basePrice": 6.85,
"originalPrice": 5.55,
"dateTimeLastModified": "2021-11-03T19:59:04.531676Z",
"currencyId": "currencies/Base/2"
},
{
"id": "DistributedPurchaseOrderables/993356",
"articleId": "articles/24949/-",
"articleSortId": "ArticleSorts/24949/-/S20-040/S99-PROTEA CYN AYOBA ARCTIC ICE",
"articleGroupId": "articlegroups/33",
"isCheckedIn": true,
"isCheckedInLabel": true,
"events": [],
"name": "PROTEA CYN. AYOBA ARCTIC ICE",
"description": "40 cm",
"purchaseId": "purchases/688427",
"debtorId": "debtors/737",
"employeeId": "employees/102",
"price": 5.85,
"basePrice": 5.85,
"originalPrice": 5.55,
"dateTimeLastModified": "2021-11-03T19:59:04.5296768Z",
"currencyId": "currencies/Base/2"
}
]
Forecasting
Prognoses
Forecast data per year and per week. All endpoints are read-only (GET) and support pagination where applicable.
Commands
| Endpoint | Notes |
|---|---|
api/prognoses/{year} |
paginated (128 items per page) |
api/prognoses/{year}/{week} |
|
api/prognoses/price/{year}/{week} |
paginated (256 items per page) |
api/prognoses/quantity/{year}/{week} |
paginated (256 items per page) |
GET all prognoses for a year
GET /api/prognoses/{year}?page={page}
Retrieves all prognoses for the specified year, sorted by week number (descending). Contains only metadata and statistics, no article lines.
Received:
{
"page": 1,
"totalPages": 4,
"items": [
{
"id": "Prognoses/2025/12",
"year": 2025,
"week": 12,
"statistics": {
"articleCount": 240,
"articlesWithPriceCount": 180,
"articlesWithQuantityCount": 200
}
}
]
}
GET one specific prognosis
GET /api/prognoses/{year}/{week}
Retrieves one specific prognosis. Returns 404 if the prognosis does not exist.
Received:
{
"id": "Prognoses/2025/12",
"year": 2025,
"week": 12,
"statistics": {
"articleCount": 240,
"articlesWithPriceCount": 180,
"articlesWithQuantityCount": 200
}
}
GET price prognoses per article
GET /api/prognoses/price/{year}/{week}?page={page}
Returns only articles for which a price prognosis exists. Enriched with article name and VBN code.
Received:
{
"page": 1,
"totalPages": 2,
"items": [
{
"articleId": "Articles/123",
"articleName": "Roos Red Naomi",
"vbnCode": "12345",
"price": 0.42
}
]
}
GET quantity prognoses per article
GET /api/prognoses/quantity/{year}/{week}?page={page}
Returns only articles for which a quantity has been specified. Contains quantities and, if available, the distribution per day.
Received:
{
"page": 1,
"totalPages": 3,
"items": [
{
"articleId": "Articles/456",
"articleName": "Tulipa Yellow",
"vbnCode": "67890",
"quantity": 12000,
"percentagePerDay": {
"Monday": 0.18,
"Tuesday": 0.22,
"Wednesday": 0.20
}
}
]
}
Heeft u vragen of heeft u hulp nodig? Neem dan gerust contact met ons op via telefoonnummer +31 (0)71 30 20 310 of stuur een e-mail naar support@easyflor.nl.