Erply API version 1.40.0

New Features

  1. Identity Integration

    Every API call that creates a new session (verifyUser, changePassword,switchUser), now also returns a JSON Web Token (JWT). This token can be used to authenticate with the various Erply services that require a JWT.

    These services include, for example:

    • Erply Cloud apps (FNE, Builder apps);
    • Erply CDN (beta);
    • Erply Identity;
    • Erply Service Engine;
    • and others.

    The new returned field is "identityToken".

    If you 1) have a company in Identity, 2) have integrated that company with your Erply account and 3) have a user account with the same name (same email address) in both Identity and Erply back office, the returned token will belong to that Identity user account and will contain all its permissions.

    If you do not have an Identity company integrated with your Erply account yet, one will be created automatically.

    If you do not have a user account with the same name in Identity yet, a user account will be created automatically. That user will have only a limited default permission set (eg. the permission to query CDN), additional permissions can then be added in Identity as usual.

  2. API calls addInvoiceAlgorithmChange, getInvoiceAlgorithmChanges and removeInvoiceAlgorithmChange have been added.

    These API calls allow to migrate from one “invoice calculation algorithm” to another. The algorithms in Erply are by convention designated with version numbers. Classic back office supports versions 2, 3 and 4; Berlin back office supports versions 2 and 3. The default version for all accounts is 2. Algorithms 3 and 4 are typically meant for more specific use cases.

    Changes can only be made for future dates (a change cannot be retroactive). However, it is also possible to go back to a lower version; previously this was not supported.

    Using these API calls requires support from back office, too. Support for these algoritm changes comes in Classic back office version 4.21 and also in a future Berlin back office version.

    Unless your account is on a supported back office version, you should not use these API calls. Otherwise, the algorithm changes will not be enforced anywhere else than in API.

  3. Various preparations have been made to support Web Hooks. Erply Web Hooks are a new feature that will soon be available; more detailed information will be announced separately. This API version contains just the following changes:

    1. New API call “wmGetSalesDocuments”.

    2. Support for events "posTransactionConfirmed", "salesOrderCreated" and"salesOrderConfirmed".

  4. Input parameter "shipToContactID" has been added to API call saveSalesDocument.

  5. Fields "shipToContactID" and "shipToContactName" have been added to the output of API call getSalesDocuments.


  1. Fixed: field "rightMakePOSReturnsWithoutReceipt" in API call getUserRights, which sometimes was returned as a string and sometimes as an integer, is now always an integer.

  2. Fixed: API call getInventoryTransferReport did not respect the date filters (input parameters) when requesting a report of inventory transfer orders (type=TRANSFER_ORDER).

  3. Fixed: API call saveStocktaking no longer adds matrix and bundle products to the created stocktaking sheet.

  4. Security improvements.

Erply API version 1.38.4


  1. Fixed: When re-saving a sales document with a bulk “saveSalesDocument” request and setting a custom attribute’s value to 0, API deleted the respective attribute (instead of updating its value to 0).

Erply API version 1.38.3


  • New configuration parameter "apply_promotions_to_zero_price_products" has been added. When this parameter is applied, products with the check box “Cashier must enter price in POS” and a zero price can be discounted by promotions. (Formerly, promotions never applied to such products.)

Erply API version 1.39.0

New Features

  1. New API call findProductForStocktaking has been added.

  2. Field "addedByUserName" has been added to API call getStocktakings. The same API call now also accepts input parameters "productGroupID", "productCategoryID","brandID"and "supplierID".

Erply API version 1.38.2


  1. Field "penalty" has been added to API call getSalesDocuments. The field was already editable with saveSalesDocument, but getSalesDocuments did not return it.
  2. API call getProductStock can now be disabled with configuration parameter "disable_api_getproductstock" = 1. This is an optimization to reduce the load on accounts that use Berlin POS and do not use inventory management at all.


  1. Fixed: In the CSV output of API call getProductStock, column “amountReserved” appeared in a wrong position.
  2. Fixed: all accounts can now use the “deliveryTermsID” input parameter in API call savePurchaseDocument; it is not limited to EU accounts any more.

Erply API version 1.38.1


  1. Fixed: Erply back office did not display product pictures in the “Inventory” / “PIM” module.

Erply API version 1.38.0


  1. An optimization in API call getProductStock: fetching reserved quantities ("getAmountReserved" = 1) is now faster.
  2. API call syncTotalProductStock now respects the "keep_reservation_until_invoice_confirmed" configuration setting.
  3. API call calculateShoppingCart has been optimized for customers who have a lot of active promotions, and use the extra module “Regional or customer group-specific promotions”.

Erply API version 1.37.2


  1. API hourly quota changed from 1000 to 2000 requests.

Erply API version 1.37.1


  1. Server-side logging has been improved.

Erply API version 1.37.0

New features

  1. A new API call has been added – getDeliveryTerms.


  1. A new output field "EDI" has been added to getCustomers API call.
  2. New input fields "companyName2" and "EDI" have been added to an API call saveCustomer.
  3. New input fields "GLN" and "companyTypeID" have been added to an API call saveSupplier.

Erply API version 1.36.2


  1. Support for email DMARC authentication added.

Erply API version 1.36.1


  1. API call saveSalesDocument did not always respect correct user rights when editing a document of type "ORDER" or "OFFER". In some cases, the right to edit invoices was checked instead.

Erply API version 1.36.0

New Features

  1. We have added new fields to getCustomers output and saveCustomer input. The fields are: "eInvoiceEmail", "emailEnabled", "eInvoiceEnabled", "mailEnabled","operatorIdentifier".

Erply API version 1.35.1


  1. Configuration parameter "api_getsalesdocuments_default_customer_sales_not_returned" has been added. When this parameter is applied, and API client calls getSalesDocuments with input parameter "clientID", and this is the ID of a default client, API returns an empty response.

Erply API version 1.35.0

New Features

  1. Support for Givex payment integration has been added: fields "certificateBalance", "transactionType", "statusCode", "statusMessage", and "expirationDate" have been added to API calls getPayments and savePayment. To enable this feature on your account, please contact customer support.


  1. Improvements in PAX payment integration: fields "entryMethod" and "transactionType" have been added to API calls getPayments and savePayment.
  2. Field "printDiscounts" has been added to the output of API call getSalesDocuments.

Erply API version 1.34.1

New Features

  1. Input field "archivalNumber" has been added to API call getPayments.

  2. Added support for configuration parameter "save_home_store_when_invoice_confirmed". When the parameter is set to 1, API saveSalesDocument will automatically save customer’s Home Store (will set it equal to the location of the current transaction, if customer does not have a home store yet).


  1. Partner key validation in getObjects, saveObject and other related API calls (which was introduced in API version 1.34.0) has been temporarily turned off until all cases of incorrect usage have been resolved.

Erply API version 1.34.0

New Features

  1. New API calls have been added:


  1. Fields "companyTypeID", "personTitleID", "GLN", and "customerBalanceDisabled" have been added to API calls getCustomers and saveCustomer.
  2. Partner key validation has been added to API calls:
  3. Password validation for demo accounts has been improved.

Erply API version 1.33.0

New Features

  1. New API calls verifyIdentityToken and createUserFromIdentityToken have been added.

  2. Support for the product card check box “Promotion discounts do not apply to this product” has been added to calculateShoppingCart. (This check box was added in Classic back office 4.18.0.)

  3. New account creation (API call createInstallation) and API calls saveUser and changePassword now require passwords to contain at least one small letter, one capital letter and one digit. For passwords that do not meet that requirement, error code 1102 is returned.


  1. Field "bankTransactionID" has been added to the output of API call getPayments.


  1. Fixed: API call getProductPricesInPriceLists only supported retrieving active price lists. Retrieving all price lists (with input parameter "active" = 0) failed with a fatal error.

  2. Fixed an issue where data (eg. products) added into a franchise account with partly-shared and partly-local data would get assigned incorrect IDs.

  3. Fixed: when integrated with a standalone customer registry, several API calls (such as saveGiftCard) still attempted to validate a customer ID using the local database and thus failed.

Erply API version 1.32.6


  1. Fixed: POS day closing screen will no longer freeze if there have been payments with more complicated payment type names or card type names.

Erply API version 1.32.5


  1. Fixed: signups to US server did not work because of incorrect routing.

Erply API version 1.32.4


  1. Fixed: the savePayment call now allows field "giftCardVatRateID" to be set to an empty value. Formerly, this triggered error code 1016 (invalid value).

Erply API version 1.32.2


  1. API call getProductPrices has been improved. Input parameter "productIDs" will accept at most 10 000 IDs and otherwise returns error 1162.
  2. Searching by attributes has been improved. Input parameters "searchAttributeName" and "searchAttributeValue" or "searchAttributeName#" and "searchAttributeValue#" will return error 1030 when they are defined as an array.


  1. Fixed: API call getBilledUntilDate didn’t return the correct date, when there were multiple readings with the same date for the same billing statement.
  2. Fixed: API call getProductCategories contained duplicate records on different pages in specific cases.

Erply API version 1.32.1


  1. Fixed: API call getSalesDocuments returned row totals as nulls. This was a regression from API version 1.32.0.

Erply API version 1.32.0

New Features

  1. New API call has been added: getSalesDocumentActualReportsDataset


  1. Error code 1030 will be returned when input parameter priceListIDs is defined as an array in API call getPriceLists.
  2. Configuration of server clusters were simplified.

Erply API version 1.31.6


  1. Fixed: API call verifyUser did not return coupon microservice endpoint and token.

Erply API version 1.31.5


  1. Detailed logging has been removed because this feature is not used.

  2. Configuration of Berlin POS assets URL has been simplified.


  1. Fixed: calls to customer registry did not work. This was a regression from API version 1.31.0.

Erply API version 1.31.4


  1. Configuration of per-account hourly limits has been simplified.


  1. Fixed: changing password through Password Reminder did not work.
  2. Fixed: on a Z Report, the “Day income” and “Counted amount” for a custom card payment type (configured via "pos_custom_extra_card_payment_types") were shown in separate blocks. (The report did not recognize that both values belong to the same payment type.)

A Complete List of Erply API Report Calls

Erply has some great news for developers! We recently updated our API report request system – all report-related commands are now listed by topic to make it easier to quickly find the command you’re looking for and pull the report from the API. 

Here’s how to find the right command using Erply’s API. 



  1. getSalesReport
    Produces a “Sales report” (which, in addition to net sales, also reports VAT or sales tax) or a “Cost of Goods Sold” report (which reports costs and sales margins). Offers many different aggregation options.

  2. getCustomerBalances
    Returns all customers who have any unpaid invoices (or prepayments, or store credit), and their current balance.

  3. getAccountStatements
    Same as previous — but additionally, for each customer, returns a link to a payment reminder letter (PDF), and links to all unpaid invoices (PDF).

  4. getCostOfGoodsSold
    Returns the cost of each sold item in the specified time period. The same information can be retrieved from API call getSalesReport, too.

  5. getTaxExemptions
    Returns a list of sales documents to which tax exemption has been applied. (For more specific use cases.)

  6. getRoundedSales
    Returns a list of invoices to which rounding has been applied. (For more specific use cases.)

  7. getSalesTotalsByEmployeeAndDay

  8. getSalesTotalsByEmployeeAndMonth

  9. getSalesTotalsByWarehouseAndDay

  10. getSalesTotalsByWarehouseAndMonth



  1. getProductStock
    Returns current inventory quantities on hand (at the moment, or on a specific date), reserved quantities, weighted average cost, Reorder Points and Restock Levels.

  2. getSummaryInventoryReport
    Returns total value of inventory by location, on a specific date.

  3. getAmountsOnOrder
    Returns the quantities that have already been ordered from suppliers (but have not been delivered yet). When deciding on how much to reorder, the already-ordered quantities must be factored in to prevent double ordering.

  4. getReservedStock
    Returns only a list of reserved product quantities (ie. all products that have been reserved with a Sales Order, Prepayment Invoice, or a Sales Quote). The same information is also available from API call “getProductStock”, but a standalone call may be sometimes more efficient (less output to process).

  5. syncTotalProductStock
    For a specific use case: if an application wants to synchronize the total inventory quantity across all locations. Use it if your application only stores a total inventory quantity for each product (not separate quantities per store), and wants to stay up-to-date with all changes made in Erply.


Order Fulfilment

  1. getFulfillableOrders
    Returns sales orders that can be fulfilled with the current quantity in stock. (The report arranges unfulfilled sales orders in chronological order, starting with the oldest, and prints out those for which it can allocate inventory.)


Purchases and Inventory Transfers

  1. getPurchaseReport

  2. getInventoryTransferReport


Point of Sale Operations

  1. getPointOfSaleDayTotals
    For the “day closing” procedure. Returns the total of all sales transactions taken place during the cashier’s shift, grouped by payment method.

  2. getReports
    Returns an “X Report” or “Z Report”.

  3. getEmployeeStats


Recurring Billing

  1. getBilledUntilDate
    Returns all recurring billings and the “billed until” date for each one. This is necessary for deciding which customers need to be issued a new (monthly, yearly) bill — and what period must it cover.



  1. getAppliedPromotionRecords


Gift Cards, Coupons, Reward Points

  1. getGiftCardRedeemings

  2. getRedeemedCoupons

  3. getUsedRewardPointRecords

  4. getEarnedRewardPointRecords



  1. getUserOperationsLog


The full list of all Erply API functions you can find here.


Erply offers an extremely robust API and is compatible with a variety of software integrations to offer retailers the highest level of customization. If you do not have an Erply account yet, create it here or contact our team at or by calling +1 917 210 1251.

Erply API version 1.31.0 - 1.31.2

New Features

  1. New API calls have been added:


  1. A few adjustments have been made to taxed gift cards (introduced in version 4.14).

    For taxed gift cards to work correctly (to be able to sell and redeem them in POS, and to have proper reporting in back office), API in your server must be updated to version 1.31, and your account must have at least Classic back office 4.15 or Berlin back office 5.16.

  2. Logins that have taken place over API (including logins to Berlin POS) are now recorded in the “Login Activity” module in back office.

Erply API version 1.30.1, 1.30.2

New Features

  1. Filter “regularGiftCards” added to API call getProducts.
  2. In API calls getAssignments and saveAssignment, products added to the assignment can now have a customized name. Field “itemName” has been added to assignment rows.

Erply API version 1.30.0

New Features

  1. New API call “getFiscalDeviceNumbers” has been added.

  2. Field "vatrateID" has been added to API calls getGiftCards and saveGiftCard. Filter "vatrateID" has been aded to API call getGiftCards.

  3. Field "giftCardVatRateID" has been added to API calls getPayments and savePayment. Filter "giftCardVatRateID" has been aded to API call getPayments.


  1. Fixed: API call getFranchiseSalesDocuments returned out-of date information for sales documents where prices or discounts had been later changed.

  2. Fixed: API call getVatRates now returns tax rate attributes, too, as documented.

  3. Fixed: API call “savePOSStatistics” rejected certain input.

Erply API version 1.29.0

New Features

  1. New API call getServiceEndpointsForPOS has been added.
  2. Fields "vatrateID", "currencyCode", "countryID", "deliveryTermsID", and "integrationCode" have been added to API calls getSuppliers and saveSupplier.
  3. Fields "transactionTypeID", "transportTypeID", "deliveryTermsID", "deliveryTermsLocation", and "triangularTransaction" have been added to API calls getPurchaseDocuments and savePurchaseDocument.

    To use these fields, your account country must be an European Union country. Otherwise, when attempting to set these fields with “savePurchaseDocument”, API will return error code 1159.

  4. Fields "projectID" and "rounding" have been added to API calls getPurchaseDocuments and savePurchaseDocument.


  1. Obsolete input parameter "doNotCreateUser" has been removed from API call createInstallation.


  1. Fixed: API call saveProductGroup added unnecessary escaping to quotation marks in product group names.
  2. Fixed: re-saving a sales document with saveSalesDocument removed the "sourceWaybillID" values from document rows.

Erply API version 1.28.4


  1. Resolved a cache conflict that occurred when using an external customer registry. This resulted in occasional error messages in back office, or error codes in API.
  2. Fixed: API call getCustomerGroups did not allow input parameter "changedSince" to have a value of 0, and returned error code 1016.
  3. A separate counter of API requests created for Erply Books and for Shopify connector. These two integrations can now continue making API calls even when some other application has reached the hourly limit of allowed requests.

Erply API version 1.28.2, 1.28.3


  1. Fixed: In API call getCustomers, search fields searchCode, searchRegistryCode, searchVATNo, searchEmail and searchMobile did not return a matching customer if the search word contained an underscore.
  2. Fixed: API call saveAddress produced an error when updating the address of a deleted customer.
  3. Fixed: API calls getProductGroups, getCustomers, getAccountStatements returned links to other resources starting with http://. These links have now been updated to https://.
  4. Fixed: URLs returned by API call getAccountStatements contained errors.

Erply API version 1.28.0, 1.28.1

New Features

  1. A new API call, getSalesDocumentActualReportsHTML has been added. Use this call to get a sales document printout on an Actual Reports template.

  2. API now supports overwriting invoice reference numbers with custom values. Field "customReferenceNumber" has been added to API calls saveSalesDocument and getSalesDocuments.


  1. API call getSalesDocuments can now sort returned invoices by ID (orderBy=documentID), and this is now also the default sorting, instead of dateAndNumber.

  2. Ability to sort records by ID has also been added to API calls getPurchaseDocuments, getEmployees,getEvents, getSuppliers.

  3. Support for a new POS application added.


  1. Fixed: re-saving a confirmed sales document with saveSalesDocument no longer loses information about promotion and price list discounts applied to that sale. (This information can be queried with API call getAppliedPromotionRecords.)

  2. Fixed: re-saving a sales document with saveSalesDocument did not correctly update the component rows of a sold bundle.

  3. Fixed: the savePayment call now respects input parameter "customerID". Formerly, if API client specified "documentID", "customerID" was always overwritten to invoice’s customer.

  4. Fixed: API call saveCustomer incorrectly returned an error if certain location IDs were used in the "signupStoreID" and "homeStoreID" input parameters.

  5. Fixed: sometimes, after having edited your company’s information in Berlin POS, attempting to re-save company card in back office failed with an error, “This form has been updated by another user.”.

  6. Fixed: sometimes, the Z Report did not correctly show the name of the cashier opening the day, or the cashier closing the day. On future day openings and closings, this will no longer happen.

  7. Fixed: In case of errors, API now always returns error code 1000, instead of an empty response.

Other Notes

In future versions, if API client sends a bundled saveSalesDocument + savePayment call in one bulk request, and API detects that the sales document is a duplicate, the bundled savePayment call will start returning error code 1158.

Code 1158 is not an error condition. It just indicates that API has received the same command twice, but data has nevertheless been successfully saved. API clients should be updated to ensure that the error message does not get shown to an end-user.

Right now, API will continue behaving as-is: the payment will be created nevertheless, resulting in duplicate data. The described change will happen in a future API version.

Only savePayment will start returning code 1158. A duplicate “saveSalesDocument” call returns the already-created document, and will continue to do so in the future.

Additionally, if the “saveSalesDocument” call in that bulk request fails for any other reason, “savePayment” will start returning error code 1157. This is to avoid creating incomplete data. If the client application knows how to resolve the issue that caused saveSalesDocument to fail, it should re-send the whole bulk request, the document as well as the payment.

Erply API version 1.27.4



  1. Fixed: API call removeAssortmentProducts always reported that the specified products do not exist in the given assortment.

Erply API version 1.27.2, 1.27.3


  1. Filter "getItemsFromFirstPriceListOnly" in API call getProducts has been optimized and is now faster with locations that have a very large primary price list.

  2. Improved support for load balancing of API servers.

  3. Support for a new POS application added.

  4. When attempting to set an attribute’s value to an array, API now returns error code 1014, instead of converting it to an empty value.


  1. Fixed: coupons associated with one-time promotions (automatic coupons that Erply itself generates, to keep track which customers have already used the promotion) are now set to “redeemed” status again. This was a regression from API version 1.22.

    Functionally, it does not matter whether the coupon’s status is “active” or “redeemed”. However, some customers were used to seeing these coupons in back office’s “Coupons, gift cards” report, and reported that the coupons no longer show up.

Erply API version 1.27.0

New features

  1. New API calls have been added:

    1. addItemToMatrixDimension
    2. editItemInMatrixDimension
    3. syncTotalProductStock
    4. setSalesOrderAsFulfilled
    5. getRegisterTotalSalesOverTime
    6. registerReceiptPrint
    7. getReceiptPrints
    8. getUnfinishedSales
  2. API call getUserOperationsLog can now be queried for deleted Inventory Registrations, Inventory Transfers and Inventory Write-Offs.

  3. API call getGateways returns one additional payment integration: “TriPOS Cloud”.

  4. API call createInstallation now requires user names and email addresses to be no longer than 100 characters. (Error code 1156 is returned if either value is too long.) Similarly, API call saveUser requires user names to be no longer than 100 characters.

  5. API call verifyUser returns a new field "remindUserToUpdateUsername" (with a value of 0 or 1). This field is intended for a specific workflow in Berlin POS.

  6. API call verifyUser may now return error code 1068, indicating that the user cannot log in until they have confirmed their email address.


  1. API call createInstallation now returns error code 1155 if an account cannot be immediately prepared. It will no longer hand out a “pending” or “tentative” account number (an account that does not exist yet, but will be created later).

    Since API clients may expect to be able to immediately use the new account, returning a non-existing number would have caused issues. In practice, this issue (new account unavailability) has occurred very rarely and mostly with sandbox / demo accounts.

  2. Support for an obsolete Google Apps login feature has been removed.

Erply API version 1.26.6


  1. Customer registry token now contains user’s full name as their identifier.

Erply API version 1.26.5


Fixed: API call getSalesReport produced an error with input parameter "reportType" = "SALES_BY_ALL_PRODUCTS".

Erply API version 1.26.4


Fixed: an error in customer and product full-text search.

Erply API version 1.26.3


  1. Fixed: a user rights issue in certain API calls, eg. “savePriceList”. (User rights were checked for the wrong module.)

Erply API version 1.26.2


  1. Fixed: when encountering an error while handling a bulk request (eg. no session key provided), API returned an empty result instead of indicating the error code.

Erply API version 1.26.0, 1.26.1

New Features

  1. Input parameter "searchNameIncrementally" in API call getCustomers now additionally returns customers whose company registry code, or a person’s National ID number exactly matches the specified search phrase.

  2. Compliance with General Data Protection Regulation can now be activated on demand on non-EU accounts, too — with configuration parameter "gdpr_features_enabled" = 1.

  3. Field "reasonID" has been added to API calls saveInventoryRegistration and getInventoryRegistrations.

  4. Input parameters "documentDateStart" and "documentDateEnd" have been added to API call getSalesReport, allowing to filter a Cost of Goods Sold (COGS) Report by document date (as an alternative to filtering by inventory transaction date).

    Please see the documentation for that API call for a more in-depth explanation about the COGS report and date ranges. This feature requires Classic back office, version 4.12 or newer.

  5. API calls getSalesDocuments and saveSalesDocument now support per-row waybill IDs which indicate which row on an invoice has originated from which waybill. API call getSalesDocuments outputs a new field "sourceWaybillID" on each row; saveSalesDocument accepts input parameter "sourceWaybillID#".

  6. Fields "variationDescription" → "order" and "variationList" → "order" have been added to API call getProducts. This allows to sort a list of matrix variations in the same order in which the respective colors / sizes have been arranged.


  1. Support for Thai and Faroese languages has been added.

  2. Configuration parameter "api_getpointsofsale_all_invoice_numbers_not_returned" = 1 enables an optimization: API call getPointsOfSale returns the field "lastInvoiceNo" to Berlin POS only if POS asks for one specific register, and not the whole list.


  1. Fixed: when creating a new payment with savePayment, API will now populate “last modification timestamp” with current timestamp, not user-supplied data. (Input parameter "added" is still accepted, but it won’t affect last modification timestamp any more.)

  2. Fixed: the checkbox “Customer does not earn new reward points” on customer form was interpreted incorrectly, and API did not allow the customer to spend those points, either. This restriction has been lifted from API calls editEarnedRewardPointRecord, editUsedRewardPointRecord,getCustomerRewardPoints, saveIssuedCoupon and subtractCustomerRewardPoints.

  3. Fixed: When deciding whether to instruct POS to issue a coupon or not, API call calculateShoppingCart ignored the check box “Customer does not earn new reward points” and always assumed that customer is going to earn points from the current transaction, too.

Erply API version 1.25.0, 1.25.1

New features

  1. Filter "typeID" has been added to API call getPayments.
  2. API call saveProduct now supports adding, modifying and deleting long attributes.


  1. Fields "entryMode" and "signatureNotRequired" have been removed from API calls getPayments and savePayment. These fields were related to a payment provider integration that has not been completed and is not in use.


  1. Fixed: product pictures added with API call saveProductPicture were not ordered correctly in API output and on back office’s product card.

Erply API version 1.24.0

New features

  1. Support for Klarna payment integration has been added: field "klarnaPaymentID" has been added to API calls getPayments and savePayment. To enable this feature on your account, please contact customer support.

  2. Search field "referenceNumber" has been added to API calls getSalesDocuments and getPurchaseDocuments.

  3. Field "epsiDownloadURLs" has been added to API calls verifyUser, switchUser and changePassword. It contains EPSI installer URLs for each operating system.

  4. The following fields (specific to wholesale of alcoholic beverages) have been added to API calls getProducts and saveProduct. To have these extra product fields on your account, please contact customer support.

    • registryNumber
    • alcoholPercentage
    • batches
    • exciseDeclaration
    • exciseFermentedProductUnder6
    • exciseWineOver6
    • exciseFermentedProductOver6
    • exciseIntermediateProduct
    • exciseOtherAlcohol
    • excisePackaging
  5. Field "packagingType", related to packaging report, has been added to API calls getProducts and saveProduct.

  6. API now supports back office configuration checkbox “”Show in webshop” is checked by default for new products and product groups”. (This checkbox will be added in Classic back office 4.11 and Berlin back office 5.12.)


  1. A validation in API calls addProductToPriceList and savePriceList, related to configuration parameter "do_not_allow_to_add_flyer_items_to_store_pricelist", has been improved.

  2. API call getFranchiseSalesDocuments can now detect cross-franchise returns and will return appropriately reduced quantities when queried with "nonReturnedItemsOnly" = 1.


  1. Fixed: API call getProductCostForSpecificAmount returned an incorrect response.

Erply API version 1.23.0

New features

  1. New API call recordGDPRConfirmation has been added.

  2. Support for the employee authorization process, introduced in Classic back office 4.10 and Berlin back office 5.11, has been added. If the restrictions have been enabled from back office and user has not been given access yet, API will prevent user from accessing customer information.

  3. New API call logProcessingOfCustomerData has been added. Use this call to log customer processing activities that have taken place outside of Erply if it is not possible to keep a log elsewhere.


  1. Fixed: when editing an existing product, API call saveProduct will no longer reset the product’s tax rate to the default value if no tax rate is provided.

  2. Fixed: applying promotions “Buy 3 pcs of Product X for $10” to a sale was a very slow process.

  3. When using a standalone customer registry, a timeout or no response from the registry no longer causes a fatal error (error 1000). Timeout has been increased from 5 to 10 seconds.

Erply API version 1.22.4

New features

  1. API call savePayment now accepts new input parameter "transactionTime" for Verifone Finland and Nixpay (Nixor) payments.

    This extra field is needed for Berlin POS. To make this field available, extra module “Transaction Time of a Payment” needs to be installed to your account. Please contact customer support for that. Without that extra module, these two payment integrations cannot be used.

    Classic back office (starting with version 4.10) and Berlin back office (starting with version 5.10) will warn if you attempt to configure a register to use Verifone Finland or Nixpay (Atos Worldline) payments, and this module has not been installed yet.


  1. Fixed: in a bulk request, it was not possible to make queries in different languages (eg. to retrieve product names in English and product groups in German). This caused an issue with weighted products on Greek accounts.

Erply API version 1.22.3

Bug fixes

  1. Fixed: API calculateShoppingCart calculated a “$ off entire invoice” promotion discount incorrectly when customer purchased a gift card.

Erply API version 1.22.2

Bug fixes

  1. Fixed: if one API call in a bulk request fails with error code 1005, 1006 or 1009, the remaining calls will now be executed, too. Formerly, API terminated the bulk request, returned a response and ignored all the remaining calls.

  2. Fixed: Promotion “Get % off all items” with the additional check box “Except lines to which a manual discount or any other price list or promotion discount has already applied” was incorrectly regarded as successful, even when all items in the shopping cart already had a prior discount, and thus the promotion did not actually discount any items. As a result, a coupon was unnecessarily redeemed.

Erply API version 1.21.9

  1. Fixed: if one API call in a bulk request fails with error code 1005, 1006 or 1009, the remaining calls will now be executed, too. Formerly, API terminated the bulk request, returned a response and ignored all the remaining calls.

Erply API version 1.22.0

New features

  1. API call calculateShoppingCart now supports new promotion type “Special Unit Price”. In this type of promotion, shopper gets a special price for specific products if they buy at least a certain quantity.

    The promotion may also be set up with a limit: maximum number of discounted items per sale.

    To set up this new type of promotion, Classic back office is required — version 4.9 or newer. Alternatively, the promotion can be created over API, with the saveCampaign call. (New input fields"specialUnitPrice" and "maxItemsWithSpecialUnitPrice" have been added.)

  2. API call calculateShoppingCart now supports “Redemption Limit”. This is a way to specify that a promotion may not apply to one sale more than the specified number of times.

    A Redemption Limit of 3, for a promotion “Buy 2 pies and get an apple 50% off”, means that regardless of the quantities the customer purchases, they will only get 3 discounted apples at most. (And to get those, they need to buy 6 pies.)

    Redemption Limit should not be confused with “maximum number of discounted items”. Consider carefully which one you might need.

    To set up promotions with Redemption Limits, Classic back office is required — version 4.9 or newer. Alternatively, it can be set over API, with the saveCampaign call. (New input field "redemptionLimit"has been added.)

  3. Algorithm for the following two promotion types:

    • Buy one product and get % or $ off another product (Buy One Get One)
    • Get N pcs. of a product for a fixed total

    has been changed. As coupon promotions, they will now apply only once per scanned coupon. And when using them manually, cashier must specify how many times they want to apply it.

    If you set up a coupon promotion “Free apple with every pie”, and customer picks three pies and three apples, they will now need to have three coupons as well. Formerly, scanning just one coupon would have given all 3 apples free of charge.

  4. Support for a standalone coupon microservice has been added.

  5. API call addPromotionCountsToInvoice has been added. This is meant for Berlin POS, for reporting how many times each promotion applied to a sale.

    1. This data is only used for custom integrations at the moment. This data cannot be managed from back office, or retrieved over API.
    2. This feature needs to be installed to an account as an extra module, “Promotion Count on Invoice”.
  6. API call calculateRewardPoints has been added. This is a custom integration hook for Berlin POS.


  1. Filters "searchEmail" and "searchMobile" have been added to API call getCustomers.
  2. Field "timeZone" (store time zone) has been added to API calls getWarehouses and saveWarehouse.
  3. Field "promotionReasonCodeID" has been added to API call getAppliedPromotionRecords.
  4. Field "warehouseValue" in API call getSalesDocuments, on each invoice row, which previously was undocumented, has now been documented. This field returns the unit cost of sold item. To retrieve that field, use input flag "getCOGS" = 1.
    1. Please note that the unit cost is returned in invoice currency. To get the value in account’s main currency, multiply it by the field "currencyRate".
  5. Names of the two parameters introduced in 1.21.6 have been updated to "customer_registry_group_cache_time" and "customer_registry_customer_cache_time", respectively.

Bug fixes

  1. Fixed: input parameter "excludeDiscountedFromPercentageOffEntirePurchase" in API call saveCampaign did not work.

Erply API version 1.21.8

New features

  1. API calls verifyUserswitchUser, and changePassword now return the endpoint URL and authentication token for the service that provides advertisements to the point-of-sale customer display. These can be found in the "displayAdManagerURLs" block. There can be multiple endpoints and tokens configured; if that is the case, API clients must pick one.

Erply API version 1.21.7

  1. Fixed: two issues related to configuration parameter"treat_price_list_discount_as_discount_on_receipt".

Erply API version 1.21.6

  1. For accounts that use an external customer registry service, caching has been implemented for some of the customer registry queries. Caching can be enabled with configuration parameters:
    • "customer_registry_group_getparents_cache_time" = (time in seconds)
    • "customer_registry_customer_getmasterrecord_cache_time" = (time in seconds)
  2. Fixed: On a franchise account, an error occurred in API call getProductStock when combining input parameters “getAmountReserved” and “changedSince”.

Erply API version 1.21.5

  1. Fixed: API savePurchaseDocument must not return error code 1121 when API client re-saves a confirmed purchase document and does not actually change the document’s type.

Erply API version 1.21.4

  1. A debug logging feature has been added.

Erply API version 1.21.2, 1.21.3

  1. User rights verification in the following API calls has been updated: getBrands, getInventoryRegistrations, getInventoryWriteOffs, getProductCategories, saveBrand, saveDeliveryType, saveProductCategory, saveProductGroup, deleteDeliveryType. This is to ensure compatibility with Classic back office 4.8.0.

Erply API version 1.21.0

New features

  1. API call getProducts can now return not only price list prices for a particular store, but also information about how these prices were calculated: which price lists applied, in what order, and how much discount each price list provided.
    • To get this information, set input parameter"getPriceCalculationSteps" = 1. For each product, API returns a block of information named"priceCalculationSteps".
    • Since this information is meant to accompany the"priceListPrice" and"priceListPriceWithVat" fields, you also need to set input parameters"getPriceListPrices" = 1 and "warehouseID" (to specify the store).
    • Your account must use Classic back office (version 4.5.0 or newer). On Berlin back office, the feature is not supported yet.
  2. Field"typeID" (payment type ID) has been added to payments returned from API call getFranchiseSalesDocuments.
  3. Input parameter"getCurrentUser" = 1 has been added to API call getUserRights. Setting this flag returns your own user rights (the rights of the currently authenticated user).


  1. Fixed: API call getProductGroups returned an error when filters “productGroupID” and “searchAttributeName” were combined.
  2. Fixed: API call getEmployees returned an error when filters “warehouseID” and “searchName” were combined.

Erply API version 1.20.0

New features

  1. API call verifyUser no longer allows PIN authentication. For an alternative, please see the switchUser call. It requires the previous session’s key as input, meaning that authenticating with a PIN is possible only if another user has been previously logged into your application.
  2. Authentication calls (verifyUserswitchUser and changePassword) now enforce a maximum session length of 1 day (86400 seconds). If you request a session longer than that, API will still generate a session that expires in 86400 seconds.
  3. Support for a customer registry microservice has been added.
  4. Feature “Minimum Password Age” has been implemented. This feature may be used to limit how often regular (non-administrator) users can change their password (eg. no more frequently than once every 5 days).
    • This feature can be enabled by setting configuration parameter "minimum_password_age" to the desired number of days.
    • The corresponding implementation for Classic back office will be added in version 4.7.0.


  1. In sign-up e-mails, support contact information for Finland has been updated.
  2. An optimization in API call getSalesDocuments.


  1. Fixed: API call getAmountsOnOrder returned incorrect quantities.
  2. Fixed: API call editAssortmentProducts incorrectly reported that a product does not exist in the assortment.

Erply API version 1.19.1

  • Security fix.

Erply API version 1.19.0

New features

  • New API call getBilledUntilDate has been added. This API call returns the “last billed date” for recurring billings (the same information that can also be seen in back office, Sales → Recurring billings).


  • Improved backward compatibility: to have API response returned with an appropriate "Content-Type" header (which was originally added in 1.18.0), API client must now explicitly add input parameter "sendContentType" = 1 to every request. Changing Content-Type for all requests had an adverse effect on existing API clients.
  • As a performance optimization, API call calculateShoppingCart will no longer:
    • Apply item-level promotion discounts (get $ or % off of a specific product) to rows with quantity 5000 or over. (Price list prices and invoice-level discounts — $ or % off entire sale — will still apply.)
    • Allow rows with quantity 5000 or over to trigger a promotion. (Promotion “Buy Product X and get 10% off entire sale” will not apply if you set the quantity of Product X to 5000.)
    • Processing a large quantity requires more server resources and may be slow. In the “calculateShoppingCart” requests sent from POS, a large quantity is usually a cashier’s typo, for example a product code scanned into the Quantity field. Thus, this change ensures that a mistyped quantity will not make POS unresponsive.
  • Fields "addedByUserName" and "lastModifiedByUserName" have been added to API call getPriceLists.
  • Field "batch" has been added to API calls getSalesDocuments and saveSalesDocument, to each document row. It is related to extra module “Alcohol Wholesale”. To be able to use this field in API, this extra module must be activated on your account. (This field was formerly visible in back office, on sales document form, but was not editable over API.)
  • Support for Vietnamese language has been added. However, to use Vietnamese, account must be updated to a back office version that supports Vietnamese. Vietnamese support is coming in Classic back office 4.7.
  • Support for “subsidies” (originally added in API version 1.13.0) has been improved. In API “saveSalesDocument” call, subsidy now gets calculated and stored for “Get these items for a special price” promotions, too.


  • Fixed: API call getSalesDocuments now returns a reference number for Sales Orders, too. Formerly, Sales Orders printed from back office did have a reference number, but API did not output it.
  • Fixed: errors in API calls “getSchedule”, “getTimeSlots” and “saveEvent” have been fixed.
  • Fixed: API call “saveSalesDocument” will no longer attach manual discount’s reason ID to discount records that are not manual discounts (ie., to price list and promotion discounts). This issue might have been observable when retrieving discount records with API getAppliedPromotionRecords call.
  • Fixed: products that have a product card price 0.00, but for which a price has been defined in a store price list, were incorrectly flagged by API getSalesDocuments as "originalPriceIsZero" = 1.
  • Fixed: after calling saveCompanyInfo and saveAddress simultaneously, attempting to edit company information in back office sometimes failed with an error, “This form has been updated by another user.”.
  • Fixed: calling getProductStock with the parameters "getProductsWithReorderPointDefined" = 1 or "getProductsWithRestockLevelDefined" = 1 did not return products with which no inventory transactions had taken place yet.
  • Fixed: according to documentation, saveSalesDocument is supposed to apply store- and customer-specific price (and discount) when omitting "price#" and "discount#" input parameters. This did not work if product’s original price on product card was 0 and its price had been specified in a price list.

Erply API version 1.18.0

New features

  • New API call getRoundedSales has been added. It returns a list of invoices, receipts, invoice-waybills and credit invoices where invoice total has been rounded.
    • Rounding can be configured from back office: Settings → Configuration → Invoices and sales. Invoices can be rounded to the nearest 0.05, nearest 0.10, or full units.
    • In certain countries, sales paid in cash are rounded to the nearest 0.05, too.
  • Promotions can now be “enabled” and “disabled” with a check box (in addition to adjusting start and end dates). Field "enabled" has been added to API calls saveCampaign and getCampaigns.
    • This feature needs to be activated by customer support. Please contact customer support if you need this feature.
    • Additionally, it requires Classic back office version 4.7.0 or newer.


  • API responses are now returned with an appropriate “Content-Type” HTTP header:
    • “application/json” for JSON output;
    • “application/xml” for XML output.
  • Field "storeGroup" has been added to API call getCampaigns.
  • In API call saveCampaign, the default value for input parameter "type" is now "auto".
  • One new partner key added.
  • A hardcoded customer-specific setting removed.


  • Fixed: promotion settings “Each customer can use the promotion only once” and “Promotion can only be used once on every birthday” were not being respected. This was a regression introduced in API version 1.13.0.
  • Fixed: an error in API call saveAddressType.
  • Fixed: Promotions marked with the check box “Allow the same items to trigger other promotions after this promotion has been applied” were in some cases being applied to the sale too many times.

Erply API version 1.17.1


  • Fixed: when re-saving a sales or purchase document with API calls saveSalesDocument or savePurchaseDocument, and only updating/setting an attribute or some other field (without updating document rows), package quantities on rows were lost.
  • Fixed: when re-saving a sales document with API call saveSalesDocument, the “Billing period” information on invoice (start and end date) was lost.
  • Fixed: API calls saveProductGroup and saveProductCategory no longer allow to set a group as its own parent.
  • Fixed: API call saveSalesDocument returned an error when saving a receipt with promotion information and a manual discount.
  • Fixed: API call getProductStock returned an error when using input parameters "getProductsWithReorderPointDefined" = 1 or "getProductsWithRestockLevelDefined" = 1.

Erply API version 1.17.0

New features


  • New input parameter "getProductsFor" = "SALES" | "ORDERING" has been added to API call getProducts. This filter returns products that the given store is allowed to sell or purchase, according to the store’s assortment. Even if assortments are not in use, it can be used as a status filter.
  • API call getSellableProducts has been added.

Multi-language price lists and promotions


  • Attribute support has been added to API calls getAssortmentsgetStoreRegionssaveAssortment, and saveStoreRegion.
  • Field "cashierMustEnterPrice" has been added to API calls saveProduct and getProducts.
  • Support for “subsidies” (originally added in API version 1.13.0) has been improved; the following fields have been added:
    • "purchasedProductSubsidies" and "awardedProductSubsidies" in API call saveCampaign;
    • "purchasedProducts" → "subsidy" and "awardedProducts" → "subsidy" in API call getCampaigns;
    • "unitItemSubsidy""unitTransactionSubsidy""totalItemSubsidy""totalTransactionSubsidy" in getAppliedPromotionRecords.
  • Configuration parameter "customer_code_unique" = 1 has been added. When enabled, API call saveCustomer will require field "code" (national ID number for persons / registry code for companies) to be unique.


  • Fixed: Deleting a sales document will now also delete links between the deleted document, and any recurring billings and meter readings. (Previously, issues occurred when trying to re-create another invoice from the same recurring billing or reading.)
  • Fixed: In API call saveSalesDocument, if a document was re-saved without making changes to document rows, links between the document and recurring billings / meter readings were lost.

Erply API version 1.16.0

New features

  • The logic of promotions has been changed: promotions (both invoice-level and item-level promotions) will no longer apply to gift cards.
    • Gift cards are the products that have the “This product is a serial numbered gift card” or “This product is a regular gift card” check box checked on product card.
    • A gift card can still be a promotion trigger (as in “Buy a gift card and get the following discount on some other product”), but it cannot receive any promotion discounts itself.
  • Field "code" has been added to API call getReasonCodes. If you are using Classic back office, version 4.5.0 or newer, you can specify “codes” (alphanumeric identifiers, for example) to Reason Codes. These might be useful for integrations or custom reporting.
  • Field "reasonID" has been added to API calls getCampaigns and saveCampaign – to associate a promotion with a reason code. This might be useful for building custom reports.
  • With API call saveSalesDocument, it is now possible to associate an invoice with a recurring, metered, billing, too — in addition to ordinary recurring billings.
    • Input parameter "billingStatementID#" will accept the ID of a metered billing and will not return an error code.
    • In addition to that, API client must supply input parameter "billingReadingIDs#". For API it is important to know which readings of the meter the invoice must be associated with.
    • If field "billingStatementID#" refers to an ordinary billing, parameter "billingReadingIDs#" must be omitted. Otherwise API will return error code 1013.
  • New API call getTaxExemptions has been added. This is a reporting-related API call.


  • API call getChangedDataSince supports querying for 4 new kinds of objects:
    • Inventory Registrations
    • Inventory Transfers
    • Inventory Write-Offs
    • Payments


  • Fixed: API call getUserOperationLog did not order the returned records by ID. When retrieving multiple pages of data, API client might not have been able to get the IDs of all deleted objects.
  • Improvements related to record management in franchise chains.
  • Fixed: when adding, updating or deleting an address, the “last changed” timestamp of the related customer or supplier must be updated, too.

Erply API version 1.15.1

  • Fixes

    • Fixed: promotions with check box “Except lines to which a manual discount or any other price list or promotion discount has already applied” (support for which was added in API 1.14.0) sometimes gave less discount than they were supposed to.
    • Fixed: error in API call getSalesDocuments.

Erply API version 1.15.0

New features

  • API call getProductStock now allows to retrieve inventory quantity summarized across all locations — by omitting the "warehouseID" input parameter.
    • To exclude the quantities in locations designated as “offline warehouses” for returned inventory, an API client can specify the "excludeOfflineWarehouses" = 1 flag.
    • Please note that it is not possible to simultaneously retrieve total quantity across all locations and:
      • Reorder Points and Restock Levels ("getReorderPoints" = 1);
      • Most recent cost ("getSuggestedPurchasePrice" = 1);
      • Average purchase price and cost ("getAveragePrices" = 1);
      • or, to filter only products with Reorder Point defined or Restock Level defined. To use these filters or flags, "warehouseID" parameter is still required.


  • The ability to synchronize changes in reserved quantities with API call getProductStock has been improved.

Erply API version 1.14.1


  • Fixed: when re-saving a sales document with saveSalesDocument, even when only updating the general properties of the document, “batches” on invoice rows were lost.

Erply API version 1.14.0

New features

  • “Invoice-level promotions that do not apply on top of other discounts” implemented in API call calculateShoppingCart. If you have classic back office 4.5.0 or newer, you can set up a promotion that gives a percentage discount on the entire purchase, except those items that already have a discount: whether from a promotion, a price list or applied manually by the cashier.
    • To be able to specify such promotions in back office, you also need three additional modules activated on your account: “Promotion Report”“Applied Price Lists” and “Applied Manual Discount”.
  • Support of attributes added for recurring billing — to API calls getBillingStatements and saveBillingStatement.


  • Fixed: a promotion “Get $ or % discount on entire purchase in exchange for loyalty points” did not respect the “Further Restrictions” part: that the discount should not apply to certain products, or that the discount should only apply to explicitly listed products.

Erply API version 1.13.0 - 1.13.5

New features

Price list management

  • For more fine-grained price list management, new API calls have been added to add or remove individual product prices from the price list: addProductToPriceList,editProductInPriceListdeleteProductInPriceList. Also, the product prices in a price list can be fetched page-by-page with new API call getProductsInPriceList.
    • It is still possible to define the whole price list and its contents with the savePriceList API call. The new calls offer just an alternative that may be useful on some occasions — when working with very large price lists, for instance.
  • API call deletePriceList has been added.
  • Filter "pricelistIDs" has been added to API call getPriceLists, for retrieving multiple price lists by ID.
  • The following input parameters have been added to API call getPriceLists, to filter price lists by activity period:
    • startDateFrom
    • startDateTo
    • endDateFrom
    • endDateTo

“Store Regions” module

Regional or customer group-specific promotions

  • This is an extra feature which allows to specify that a promotion applies only in certain regions, and/or only to specific customer groups.
  • Please contact customer support to enable it on your account. It also requires the “Store Regions” module that has been mentioned above.
  • This feature is only available in Classic back office and requires back office version 4.5.0 or newer.
  • This module enables:
    • Filters "storeRegionIDs" and "customerGroupIDs" in API call getCampaigns.
    • Output fields "storeRegions" and "customerGroups" in API call getCampaigns.
    • Input parameters "storeRegionIDs" and "customerGroupIDs" in API call saveCampaign.

Information about applied price list discounts, and applied manual discounts

  • When these extra features are enabled, Berlin POS starts reporting not only which promotions applied to each sale, but also:
    • Which price lists applied, and how much discount each price list gave;
    • How much manual discount was applied. (Manual discount is applied by the cashier in POS by editing price, specifying a discount percentage, or by clicking one of the predefined discount % buttons.)
  • Both of these (applied price lists, and applied manual discounts) are extra modules. Please contact customer support to enable one or both of them on your account.
  • This information does not have a user-visible output (a report) yet, but it can be retrieved with API call getAppliedPromotionRecords. The records returned from getAppliedPromotionRecords will no longer always have a field named "promotionID"; some of the records (those that indicate that a price list discount applied) have a field named "priceListID" instead, and records indicating manual discount will have neither.
  • This feature also requires Classic back office, version 4.5.0 or newer. Also, Berlin POS version 3.25 or newer is highly recommended.
  • With Classic back office version 4.5.0, the applied discounts (promotion, price list and manual discounts) can also be printed on a receipt.

Price list discount shown as discount, on receipt and in printouts

  • Configuration parameter "treat_price_list_discount_as_discount_on_receipt" has been added. With that parameter enabled, sales made from Berlin POS are adjusted so that any discounts from price lists are displayed as discounts. The “-…%” number will include price list discounts, and the “original price”, if it has been enabled, will also show pre-price list price.
    • This only works with online receipts printed from Berlin POS.
    • Additionally, at least the “Promotion Report” and “Applied Price Lists” extra modules must be be enabled (see above), and the “Applied Manual Discounts” module is recommended as well.

“POS multicurrency” module

  • This is an extra feature which allows to count the cash in the register in Berlin POS in multiple currencies.
  • Please contact customer support to enable it on your account.
  • It also requires Berlin POS version 3.25 or newer, and customer support must apply configuration parameter "touchpos_sale_additional_currencies" to define which currencies need to be counted in POS.
  • This feature also requires Classic back office, version 4.5.0 or newer.
  • When the module is enabled, the following extra fields in API can be used:

Package support on documents

  • API calls saveSalesDocumentsavePurchaseDocumentsaveInventoryRegistration, and saveInventoryTransfer now support packages and package quantities for each document row. It is possible to specify, for example, that the item was sold/purchased/received not only in a quantity of 150, but as 15 boxes of 10 pcs. each.
  • Each of these API calls has the following new input parameters (“#” signifies document row number):
    • packageID#
    • amountOfPackages#
  • API calls getSalesDocumentsgetPurchaseDocumentsgetInventoryRegistrations, and getInventoryTransfers output the same information. Each of these API calls has the following new fields for each document row:
    • packageID
    • amountOfPackages
    • amountInPackage
    • packageType
    • packageTypeID
  • Note that package support on Inventory Registrations and Inventory Transfers is not enabled by default. You might need to contact customer support to have it enabled.

Management of “locations in warehouse”

  • For managing the classification of “warehouse locations”, new API calls getLocationsInWarehousesaveLocationInWarehouse, and deleteLocationInWarehouse have been added.
  • Filters "locationInWarehouseIDs" and "locationInWarehouseText" have been added to API call getProducts.
  • Output fields "locationInWarehouseID""locationInWarehouseName" and "locationInWarehouseText" have been added to API call getProducts.
  • Input parameters "locationInWarehouseID" and "locationInWarehouseText" have been added to API call saveProduct.

New promotion type

  • New promotion type has been added: buying a predefined quantity or more of a product, or from a set of products, will reduce the price of all units by a discount amount, or a discount percentage.
  • For example: “Buy 3 soups or more and get $2 off each”. If customer buys 3, 4, 5, 6, … soups, all the items (the first three as well as all subsequent ones) will get the discount.
  • API call calculateShoppingCart will apply this promotion, and fields "percentageOffMatchingItems" and "sumOffMatchingItems" have been added to API calls getCampaignsand saveCampaign.
  • To be able to specify this type of promotion in back office, you need Classic back office version 4.5.0 or newer.

“Assortments” module

  • This API version adds preliminary support for “assortments”, ie. ability to specify different product selections for different stores.
  • This feature is not functional yet; it is only possible to define the assortments and modify their contents, but they are not being enforced yet. All products can be sold and purchased as usual in POS and in back office, regardless of whether they belong to the particular store’s assortment or not.
  • The exact way how assortments are going to work, and what features they are going to provide, has not been fully specified yet.
  • Please contact customer support to enable it on your account.
  • This module enables:

“Price list types” module

  • This is an extra feature for classifying price lists into store price lists and retail chain-wide price lists — and applying more specific user rights.
  • With this extra module activated, users without the right to “Create and edit price lists with other types besides “Store Price List”” are not able to edit, or delete, a price list whose type is not “Store Sale Price List”.
  • Please contact customer support to enable it on your account.
  • This feature is only available in Classic back office and requires back office version 4.5.0 or newer.
  • Installing this module enables:
    • Field "type" in API calls getPriceLists and savePriceList. Please note that when the “Price list types” module gets activated, field “type” becomes a required field in savePriceList. For ERPLY to be able to enforce user rights, it is important that all price lists be classified into categories.
    • Input parameter "types" in API call getPriceLists, to filter price lists by type. This parameter accepts a comma-separated list of type codes.
    • Flag "rightEditRetailChainPriceLists" in API call getUserRights.

“Price list row subsidy and other fields” module

  • This is an extra feature for storing more information attached to a price list row, or a promotion. These additional fields are customer-specific and ERPLY’s standard functionality does not rely on these fields.
  • Please contact customer support to enable it on your account.
  • This feature is only available in Classic back office and requires back office version 4.5.0 or newer.
  • Installing this module enables:

Customer’s “associations” and “professionals”

  • A customer can have two types of related customers: “associations” and “professionals”. This feature, and this terminology, is specific to one customer and ERPLY’s standard functionality does not rely on this information.
  • New API calls saveCustomerAssociationdeleteCustomerAssociationsaveCustomerProfessional, and deleteCustomerProfessional have been added.
  • A list of linked customers can be retrieved with API call getCustomers. Specify input flag getAssociationsAndProfessionals = 1. The returned records will have blocks named associations and professionals.

Dashboard API calls

Other new features

  • API call getConfParameters reports the status of more modules (whether these extra modules are installed or not).
  • New API calls convertPOSLanguageIdentifier and convertAPILanguageIdentifierForPOS have been added. These are used by Berlin POS.
  • It is now possible to set up a new franchise chain so that the HQ account will see all locations (warehouses), but each franchisee account will see only its own locations. This will also require Classic back office version 4.5.0 or newer.
  • New API call getTaxOffices has been added, and field "taxOfficeID" has been added to API calls saveCustomer and getCustomers. This is a Greece-specific feature.
  • New API call getHomeStores has been added. In a franchise, the list of “home stores” or “sign-up stores” may not be the same as the list of account’s own stores. Therefore, when populating a “Home Store” / “Sign-up store” drop-down list with options — regardless of whether it is a franchise account or a regular account — it is recommended to use API call “getHomeStores”, instead of “getWarehouses”.
    • The call will also omit any locations that have been designated as “offline warehouses” for returns.
  • Canada-specific field "gstExemptTaxRateID" has been added to API calls getVatRates and saveVatRate.
  • API call saveSalesDocument can now create invoices that are associated with a recurring billing. The following input fields have been added:
    • billingStatementID#
    • billingStartDate#
    • billingEndDate#
  • The same fields can also be retrieved through getSalesDocuments. The following output fields have been added to each document row: billingStatementIDbillingStartDateand billingEndDate.


  • A few improvements have been made to the customer and product search indexes which were added in version 1.12.1.
  • New partner keys have been added.
  • A few deprecated and undocumented calls have been removed.
  • When a location (warehouse) does not have a name in a particular language, API calls getWarehouses and getAllowedWarehouses will return it as-is (an empty string), not the name in English instead.
  • Input parameter "code" has been added to API call getWarehouses, to look up one specific warehouse by its code.
  • Location code can now be modified with API call saveWarehouse.
  • Fields "promotionName" and "priceListName" have been added to API call getAppliedPromotionRecords. These return the name of the price list or promotion that applied to a sale (in addition to the promotion / price list ID, which was already available before).
  • Output field "rowID" has been added to API calls getSalesDocuments (to each invoice row) and getAppliedPromotionRecords. This allows you to map applied promotion discounts and price list discounts to exact invoice rows.
    • Note, however, that row IDs on an invoice change every time an invoice is saved (as a sales document is a versioned object, and on each saving we create a new set of rows in the database), so you should not rely on these IDs when synchronizing data.
  • API calls verifyUserswitchUser, and changePassword now return the endpoint URL and authentication token for “transaction history registry”. These can be found in the "transactionRegistryURLs" block. This is a special integration for one customer. There can be multiple endpoints and tokens configured; if that is the case, API clients must pick one.
  • Fields "addedByUserName" and "lastModifiedByUserName" have been added to API calls getUserRights and getUserGroups.
  • Field "lastModifiedByUserName" has been added to API call getEmployees.
  • API call getUserOperationsLog can be queried for deleted user groups, using input parameter tableName = "userGroups".


  • The endpoint and authentication token of customer registry (added in version 1.12.4) are no longer returned as “customerRegistryURL” and “customerRegistryToken”. Instead, in the response of API calls verifyUserswitchUser, and changePassword, there is now a block named "customerRegistryURLs" which can define multiple available endpoints.
  • Fixed: API call getSalesReport returned an empty response when configuration parameter "users_can_see_only_own_warehouse_documents" = 1 had been applied.
  • Fixed: all purchase orders created with savePurchaseDocument were assigned the same number.
  • Fixed: it must not be possible to change the type of a confirmed purchase document with API call savePurchaseDocument.
  • Input parameters "recordsOnPage" and "pageNo" in all API calls are now validated. A non-integer value will return an API error code.
  • Fixed: API call getPriceLists with input parameter "getHeadersOnly" = 1 must still return price list attributes.

Erply API version 1.12.6


  • Fixed: in POS, a promotion gave discount to products, or was triggered by products that had not actually been listed by the user when setting up the promotion.

Erply API version 1.12.5



  • Fixed: when re-saving a purchase document with savePurchaseDocument, the “supplier quoted delivery dates” on document rows were lost.

Erply API version 1.12.3


  • Fixed: fields “taxExempt”, “paysViaFactoring”, “shipGoodsWithWaybills” in API saveCustomer were saved incorrectly.

Erply API version 1.12.1, 1.12.2


  • One partner key has been added.
  • Support for better customer and product search indexes has been added.

Erply API version 1.12.0

New features

  • New API calls saveProductPackage and deleteProductPackage have been added. These calls allow adding packages to a product, modifying the packages and deleting them.
    • Note that previously it was possible to add packages to a product with the “saveProduct” call, specifying fields packageTypeID1, amountInPackage1, packageTypeID2, amountInPackage2, and so on. This feature was added in API 1.10, but was not in widespread use and did not suit well for making more sophisticated changes to packages. Therefore it has therefore been removed. You should use the “saveProductPackage” and “deleteProductPackage” calls instead.
  • In API getProducts, list of packages can now be retrieved from a new, better sub-structure productPackages. The previous structure, named packages still exists, but has been deprecated. If a product has two packages of the same type (eg. two boxes with different unit quantity in them), the new field productPackages now returns them both. Formerly, API was only able to output one package of each type.
  • API call getPointOfSaleStatuses has been added. This returns the current status of each register, and the time when the register was last opened or closed. Can be useful for building a dashboard of stores.
  • API call getClockedInEmployees has been added. This API call returns a list of employees who have clocked in to work — in a selected store, or across all stores. Can be useful for building a dashboard of stores.
  • API savePayment and getPayments now support reading and writing bank record data. Fields bankAccount, bankDocumentNumber, bankPayerAccount etc. have been added.
  • Support for Reverse VAT has been added. Reverse VAT rates can be created with API saveVatRate (using the new fields isReverseVat and reverseRate), and these fields are also returned by API getVatRates.
  • Filters birthdayMonthDayFrom and birthdayMonthDayTo have been added to API getCustomers and getEmployees, to allow filtering by a birthday range.
  • Quantities of packaging materials associated with a product (fields salesPackageClearBrownGlass, salesPackageGreenOtherGlass and 14 others) can now be retrieved with API getProducts (you need to specify flag getPackagingMaterials = 1) and can also be edited with API saveProduct.
  • Field “storeGroups” has been added to API getWarehouses and saveWarehouse.
  • Field quickBooksDebitAccount has been added to API getPaymentTypes and savePaymentType.
  • Fields integrationCode, taxExempt, paysViaFactoring, shipGoodsWithWaybills has been added to API saveCustomer. (Corresponding fields already exist in getCustomers.)


  • For new Italian accounts, Italian language will be enabled by default.
  • Two new partner keys have been added.
  • When a new Greek account is created, no default sign-up e-mail will be sent.
  • A separate API call counter has been added for the WMS application (warehouse scanning app). This means that the application will not be affected if other API clients have used up the account’s hourly limit of API calls.
  • Major optimizations and reorganization in API calculateShoppingCart.


  • Fixed: on sales documents imported with API saveEDocuments, product name did not appear.
  • Fixed: API saveCustomer should always place a customer into the first top-level group when groupID is not specified. Occasionally, the customer was created in some sub-group instead.
  • Fixed: In certain cases, API getUserRights returned an incorrect value for the rightEditPriceOnReturnWithoutReceiptInPOS flag.
  • Fixed: API saveSalesDocuments did not check for correct user rights when saving a sales order.
  • Fixed: API saveProductPicture did not check for correct user rights whan saving a picture.
  • Fixed: Added input parameter timeclockRecordID to API getClockIns, for retrieving one specific record by ID. (Documentation had incorrectly specified that this filter already exists.)
  • Fixed: in Z Report, at the bottom of each POS shift, totals for each payment type (other than cash) are listed. These lines did not have a label to indicate the payment type.

Erply API version 1.11.1

New features

  • Filters “shipDateFrom” and “shipDateTo” have been added to API getPurchaseDocuments.
  • Fields “addedByUsername” and “lastModifiedByUsername” have been added to API getProducts.
  • Fields “currencyRate” and “applyQuotedPrices” have been added to API calculateShoppingCart.
    • “currencyRate” allows retrieving shopping cart total in some other currency than system default. However, this works when only price lists are applied to the sale; promotions should then be disabled by setting the flag “doNotApplyPromotions” = 1.
    • “applyQuotedPrices” lets you apply “a price from customer’s previous quote”. Read the documentation, however; the behaviour of that flag may depend on account settings.
  • New Greek accounts will be now created with the “Q-Zone” branding by default.


  • Fixed: due to an inappropriate rounding step, API calculateShoppingCart returned a non-zero promotionDiscount when there actually weren’t any promotions applying to the shopping cart item. In POS, this had the effect that receipt discount and total changed every time when user pressed the “Save” button in the “Discount” screen.
  • Fixed: API calculateShoppingCart did not take into account that selecting invoice calculation algorithm also depends on selected document type, not just country. On European accounts and in Berlin back office, this had the effect that tiny discount amounts appeared on invoice rows even when user did not adjust the price.
  • Fixed: API getProductStock did not identify a product as “changed” when synchronizing data with the “changedSince” filter and using the “getAmountReserved” flag, and only the reserved quantity had changed between two synchronizations.

Erply API version 1.10.9

  • “PayPal Here” added to the list of payment processing gateways. (API getGateways now returns it as one of the options.)
  • Endpoint URL of the Paypal Here gateway added to API verifyUser, changePassword and switchUser calls.
  • Service endpoint URLs (Cayan, Avalara, Pusher, StrikeIron, PayPal) are now also returned to Providence POS, in addition to Berlin POS. (In API verifyUser, changePassword and switchUser calls.)
  • Filter “pointOfSaleID” added to API getSalesDocuments.
  • Additions to the “Quantities in Bins” API:
    • Input filters “allowedProduct” and “code” added to API getBins. Both return exact matches only.
    • Input filter “minimumAmount” added to API getBinQuantities — to return only those bin quantities which are larger or equal to the specified value.
    • Fields “replenishmentMinimum” and “maximumAmount” in bins have been changed from integer to decimal. API saveBin and getBins now support and return fractional values for these two fields.

Erply API version 1.10.7, 1.10.8

  • Configuration parameter "receipt_language_for_product_names" implemented. It should be set to a language code (“eng”, “ger”, “swe” etc.); when set, the item names on POS receipts will always be printed in specified language, even if the rest of the receipt is in another language.
  • Customer IP address (output field “ipAddress”) added to API verifyUser, switchUser and changePassword.
  • Support for archived tax rates added. API getVatRates outputs whether a tax has been archived or not, and has a flag for filtering only archived or only non-archived taxes; API saveVatRate can be used to archive or de-archive a tax. (Archiving tax rates was added in classic back office version 4.3.62.)
  • Field “shippingDate” added to API getSalesDocuments and saveSalesDocument.
  • API getReasonCodes now supports new reason code types, CASH_IN (for POS cash-in operations) and CASH_OUT (for POS cash-out operations).
  • The Z Report now respects the "users_can_see_only_own_warehouse_documents" configuration setting and will not output data for locations for which the user does not have rights.

Erply API version 1.10.6

  • Customer-specific changes.

Erply API version 1.10.5

  • StrikeIron service discovery added for Berlin POS.
  • New partner keys added.

Erply API version 1.10.4

  • For new Polish accounts, Polish language will be enabled by default.
  • For new Dutch accounts, Dutch language will be enabled by default.
  • Additions to the “Quantities in Bins” API:
    • Fields “allowedProduct”, “replenishmentMinimum”, “maximumAmount”, “order”, “preferred” added to API getBins and saveBin.
    • Input filter “preferred” added to API getBins, getBinRecords and getBinQuantities (to retrieve data from preferred bins only).
    • Output field “preferred” added to API getBinRecords and getBinQuantities (to indicate whether each record belongs to a preferred or non-preferred bin).
    • Input filter “productIDs” added to API getBinQuantities.
    • Input fields “documentType” and “documentID” in API saveBinRecords are no longer compulsory.
  • Improved: API prevents changing product or supplier code if it is used for inter-account synchronization.
  • Fixed: When creating Inventory Registrations or Inventory Write-Offs, API checked wrong user rights.
  • Fixed: In certain cases, API calls getCustomers and getPurchaseDocuments produced error 1000 on franchise accounts.
  • Security fixes.

Erply API version 1.10.2, 1.10.3

  • Fields “addressTypeID” and “addressTypeName” added to the output of API getCustomers.
  • Fields “pricelistID2”, “pricelistID3”, “pricelistID4”, “pricelistID5” added to the output of API getCustomerGroups.
  • Filters “createdUnixTimeFrom” and “createdUnixTimeTo” added to API getCustomers, to filter customers by creation time.
  • Filters “purchasedUnixTimeFrom”, “purchasedUnixTimeTo” (to filter by time of purchase), and “redeemedUnixTimeFrom”, “redeemedUnixTimeTo” (to filter by time when redeemed) added to API getGiftCards.
  • Fixed: In certain cases, the duplicates filter in API saveSalesDocument did not activate, and allowed duplicate invoices to be saved.
  • Various improvements to the “Quantities in Bins” API. A few parameter validations have been added, improved performance under high loads.
  • Security fixes.

Erply API version 1.10.1

  • Configuration parameters "password_only_alphanumeric_allowed" and "password_alphanumeric_required" have been added. These parameters can be set to restrict what kinds of passwords users can pick.
  • API getConfParameters now returns the “invoiceLogoURL” value with an “https://” prefix, instead of “http://”.
  • Fixed: API saveProductCategory and saveProductGroup no longer allow to create a hierarchy loop (where an item is among its own parents).
  • Internal improvements in getSalesDocuments, saveSalesDocument.

Erply API version 1.10.0

  • New API calls added (the “Quantities in Bins” API):
  • Filters “extraField1IDs”, “extraField2IDs”, “extraField3IDs”, “extraField4IDs” added to API getProducts.
  • Product card extra fields can now also be edited with API saveProduct. (Input parameters “extraField1ID”, “extraField2ID”, “extraField3ID”, “extraField4ID” have been added.)
  • API saveProduct: added the ability to update product’s packages.
  • Fixed: API getProductGroups should return a flat list when searching by attribute.
  • Speed optimization in API getMatrixDimensions.
  • Security fixes.

Erply API version 1.9.0

  • When a promotion applies multiple times, API applyPromotions now creates just one statistics entry, instead of multiple ones.
  • Field “isOfflineInventory” added to API getWarehouses.
  • Fields “signUpStoreID” and “homeStoreID” added to API getCustomers and saveCustomer.
  • New API calls added:
  • New output fields added to API getProducts:
    • extraField1Title, extraField1ID, extraField1Code, extraField1Name;
    • extraField2Title, extraField2ID, extraField2Code, extraField2Name;
    • extraField3Title, extraField3ID, extraField3Code, extraField3Name;
    • extraField4Title, extraField4ID, extraField4Code, extraField4Name.
  • Note that both the new API calls, as well as the extra fields in API getProducts, require customer support to enable a new module on your ERPLY account.

Erply API version 1.7.10

  • Support for Tyro payment integration added.

Erply API version 1.7.7, 1.7.8, 1.7.9

  • Configured new helpdesk phone numbers for signups from Poland, Italy and UK.
  • Field “rightEditPriceOnReturnWithoutReceiptInPOS” added to API getUserRights.

Erply API version 1.7.6

  • Fixed: “Price at least” / “Price at most” condition in promotions was not always applied correctly by API calculateShoppingCart.

Erply API version 1.7.5

  • Fixed: in some cases, promotions were not applied in correct order in API calculateShoppingCart.

Erply API version 1.7.4

  • Support for PAX payment integration added.
  • Fixed: the “priceListID” field in API calculateShoppingCart sometimes produced incorrect results.
  • Fixed: customer’s “last changed” timestamp was not updated when editing an attribute field.
  • New partner keys added.

Erply API version 1.7.3

  • Additional output fields added to API findMasterListProducts.
  • API saveSalesDocument, savePurchaseDocument, saveInventoryRegistration, saveInventoryTransfer, saveInventoryWriteOff now update a document’s last change timestamp even if API client only modifies document rows, not the header fields.

Erply API version 1.7.2

  • Filters “stateID” and “status” added to API getPurchaseDocuments. With the “status” filter it is possible to query only unfulfilled, partially fulfilled or fulfilled purchase orders.
  • Output field “status” added to API getPurchaseDocuments.
  • Fixed: API getUserRights sometimes returned incorrect user rights for the “Orders” module.