Powered by Olark

InventoryAPI by Erply is a powerful backend for web shops, and more.

  • Use as a backbone for any web shop
  • Plug into your existing software
  • Connect inventory with POS and accounts
Developer
competition

Erply Inventory API

List of API functions

This is a list of all API functions. Click on function name and you'll find all required and optional input parameters and response fields.

  • addCustomerRewardPoints() - Add a new points transaction and increase customer's point balance.

    Typically, reward points accumulate automatically from customer's purchases. You can define the "dollar spent / points earned" ratio in ERPLY backend, SETTINGS → Configuration → Invoices and Sales. This API function is only for adjusting customer's point balance manually, or for building a custom loyalty program.

    To subtract points from customer, see subtractCustomerRewardPoints. To get current point balance for a specific customer, see getCustomerRewardPoints. (There is currently no way to retrieve point balances for all customers simultaneously.)

    If you are building a custom loyalty program, you may also take a look at getEarnedRewardPointRecords and getUsedRewardPointRecords — to retrieve a detailed list of all transactions where customer has earned or spent points.
  • applyPromotions() - An alias for API call calculateShoppingCart.

    calculateShoppingCart takes a list of items and quantities as input, and returns up-to-date item prices and the total value of the cart — with price lists, discounts, promotions, coupons, and taxes automatically applied.
  • calculateShoppingCart() - Calculate the value of a shopping cart, and have discounts, promotions and taxes automatically calculated by API. You only need to input item IDs and quantities.

    calculateShoppingCart is a very versatile function that:
    • For each item, finds the sales price that should apply in given location, and to the specified customer.
    • Automatically applies price list prices, discounts and promotion rules.
    • Automatically applies correct tax rate to each item.
    • Calculates invoice net total, tax/VAT and total, using the same algorithm as ERPLY backend.
    You need to input product IDs and quantities, and you may also specify location ID and customer ID.

    calculateShoppingCart can be used in web shops, or to easily implement a custom Point of Sale application on top of Erply API. This API call is used by ERPLY's own Touch POS, so the most up-to-date implementation is guaranteed.

    Price list and promotion rules are very complicated and implementing them locally would also mean you need to download huge amounts of data. That is why we recommend to call calculateShoppingCart instead.
  • clockIn() - Clock in an employee.

    Timeclock records are used for Time and Attendance Report. (If you have the module enabled on your ERPLY account, see Reports » Commission, timeclock » Time and Attendance Report.)

    To clock out an employee, use clockOut. To retrieve all timeclock records, use getClockIns.
  • clockOut() - Clock out an employee.

    Timeclock records are used for Time and Attendance Report. (If you have the module enabled on your ERPLY account, see Reports » Commission, timeclock » Time and Attendance Report.)

    To clock in an employee, use clockIn. To retrieve all timeclock records, use getClockIns.
  • decrementAttributeValue() - Decrement attribute value.

    This API call is for editing custom objects. ERPLY has an object storage where you can store custom data for plug-ins, integrations etc.

    For other object storage functions, see getObjects, saveObject, deleteObject (which allow to manipulate whole objects), and incrementAttributeValue, decrementAttributeValue — which provide a way to atomically increment or decrement one numeric field of a specific object (eg. to implement a counter).
  • deleteAddress() NEW - Delete a supplier / customer / company address.
  • deleteAppliance() - Delete an appliance.

    This function returns error 1006 if assignment module is not enabled on this account.
  • deleteAssignment() - Delete an assignment.

    This function returns error 1006 if assignment module is not enabled on this account.
  • deleteAssignmentGroup() - Delete an assignment group.

    This function returns error 1006 if assignment module is not enabled on this account.
  • deleteBillingStatement() - Delete a billing statement.
  • deleteBillingStatementReading() - Delete a reading of billing statement.
  • deleteCampaign() - Delete a sales promotion.
  • deleteCoupon() - Delete a coupon rule.
  • deleteCustomer() NEW - Delete a customer.
  • deleteCustomerGroup() - Delete a customer group.
  • deleteDeliveryType() - Delete a delivery type.
  • deleteEmployee() - Delete an employee.
  • deleteEvent() - Delete an event.
  • deleteMatrixDimension() - Delete a matrix dimension.
  • deleteObject() - Delete an object.

    ERPLY has an object storage where you can store custom data for plug-ins, integrations etc.

    For other object storage functions, see getObjects, saveObject, deleteObject (which allow to manipulate whole objects), and incrementAttributeValue, decrementAttributeValue — which provide a way to atomically increment or decrement one numeric field of a specific object (eg. to implement a counter).
  • deletePayment() - Delete a payment.
  • deleteSalesDocument() - Delete a sales document (Invoice, Quote, Sales Order, etc).
  • deleteSupplier() - Delete a supplier.
  • deleteSupplierGroup() - Delete a supplier group.
  • deleteProduct() - Delete a product. Products that have any number of transactions associated with them (sales, purchases or inventory) cannot be deleted; API returns error 1063. Instead, we always recommend to archive the product — setting its status to "ARCHIVED".

    In ERPLY backend, deleting products is no longer possible; clicking the "X" button always archives a product.
  • deleteProductFile() - Delete a product file.
  • deleteProductGroup() - Delete a product group. Note that products belonging to this group, as well as subgroups, will NOT be deleted or recategorized.
  • deleteProductPicture() - Delete a product picture.
  • deleteProject() - Delete a project.
  • deletePurchaseDocument() - Delete a purchase document (invoice, order, return).
  • getAccountStatements() - Retrieve all customers who have a non-zero balance (who have unpaid invoices, prepayments, store credit etc.). For each customer, API returns a link to PDF payment reminder document, and also links to all unpaid invoices in PDF format.

    NB! The links are valid for one-time use ONLY. You should download the PDF's and e-mail or display them as needed, but the link should not be shown or forwarded to customer.
  • getAddresses() - Retrieve customer, supplier, or company addresses.
  • getAddressTypes() - Retrieve address types.
  • getAllowedWarehouses() - Retrieve warehouses that this particular authenticated user has access to. API call getWarehouses, on the other hand, returns all warehouses.
  • getAmountsOnOrder() - Get product quantities on Purchase Orders that have not been fulfilled yet.
  • getAppliances() - Retrieve appliances or vehicles.

    This function is related to the Assignments module. Depending on configuration, your Assignments module may be set up either for appliance repair (in which case this function returns the list of appliances), or vehicle/car repair (this function returns the list of vehicles). Vehicles have a few extra fields, compared to appliances.

    This function returns error 1006 if assignment module is not enabled on your account.
  • getAssignmentGroups() - Retrieve assignment groups.

    This function returns error 1006 if assignment module is not enabled on this account.
  • getAssignments() - Retrieve assignments.

    Assignments module is an Erply feature for repair workshops. There are two different configurations: appliance repair and vehicle repair. API call getAppliances lists your appliance/vehicle database.

    This function returns error 1006 if assignment module is not enabled on this account.
  • getBillingStatements() - Retrieve billing statements.
  • getBillingStatementReadings() - Retrieve billing statement readings.
  • getBrands() - Retrieve product brands.

    Brands are a way of categorizing your product database, and several API calls support filtering by brand.

    Products can additionally be organized into groups (getProductGroups, hierarchical), categories (getProductCategories, hierarchical), and priority groups (getProductPriorityGroups, a flat list).
  • getBusinessAreas() - Retrieve areas of business (Manufacturing, services, transportation etc.) Used as a classifier in CRM.
  • getCampaigns() - Retrieve sales promotions.

    This API call will return descriptions of promotion rules, which are generally structured as follows: "Customer must do/buy X and will get Y" (a discount, special price etc.)

    For an API call that automatically implements all promotion rules and price lists automatically for you, see calculateShoppingCart.

    To create a promotion rule, see saveCampaign.
  • getCashIns() - Retrieve POS cash drops and cash payouts.

    A cash drop can be recorded with API call POSCashIN and a payout with POSCashOUT. These operations are printed on the register's day-end Z Report.

    By convention, a cash drop with an amount of 0 is an indicator of "No Sale", ie. just opening the drawer.
  • getChangedDataSince() - Get information about what items have been created, updated or deleted in the server since the given timestamp.

    Function output lists the various modules (data tables) in the system, whether there have been additions/updates, and whether there have been deletions in the particular module.
  • getClockIns() - Retrieve timeclock records.

    An employee can be clocked in with API call clockIn and clocked out with clockOut.

    Timeclock records are used for Time and Attendance Report. (If you have the module enabled on your ERPLY account, see Reports » Commission, timeclock » Time and Attendance Report.)
  • getConfParameters() - Get account configuration — all the settings from the module Settings > Configuration and also a number of hidden settings that can be enabled by Erply technical support.

    This function returns exactly one result record. This record contains a variable number of attributes and it is not guaranteed that any one of these attributes will be present. The contents of this record should be saved into a dictionary or an associative array, and a default value (0, unless specified otherwise) assumed for all missing ones.

    Some of the parameters are supposed to have a decimal/integer value, or a value of 1 or 0 (true/false, enabled/disabled). However API returns almost all fields as strings. If your programming environment requires that, please cast the parameters to the correct type. In the table below, the types are marked with an asterisk.

    Most — but not all! — settings can be edited using saveConfParameter. Do NOT edit any undocumented settings or those marked as "Not Editable".
  • getCostOfGoodsSold() - Get the cost of goods sold for a given period. API returns an array of all sales document rows in the selected period, and the cost for each row.

    Erply calculates cost according to FIFO principle.

    Usage guidelines: Note that the COGS of any sale may change at any time — Erply does not freeze cost at the moment when sale takes place. Many kinds of operations may adjust it, eg. entering or correcting a purchase invoice at a later date, adding freight costs, deleting other documents etc. Find out what are the accounting principles in your company and pull COGS only when all adjustments for the given period are done — eg. at the end of month.
  • getCountries() - Get the list of countries. Countries are a way of categorizing your customer and supplier databases.
  • getCoupons() - Get coupon rules.

    Coupon rule is like the "blueprint" or "type" of a printed coupon (that is issued from POS and handed to a customer). The "blueprint" specifies in what circumstances the coupons will be printed from POS, and what promotion will apply when customer returns with the coupon — ie., what discount or extra value it effectively carries.

    A coupon rule should be associated with a sales promotion (see getCampaigns).

    In order for the customer to use those discounts, you need to issue the customer a coupon with an unique serial number (see getIssuedCoupons, saveIssuedCoupon). When customer returns with the coupon code, it has to be scanned at the POS. Scanning redeems the coupon, invokes the promotion associated with it, and gives customer a discount.

    To create a coupon rule, see saveCoupon.
  • getCustomerGroups() - Get customer groups. In ERPLY, customer groups are hierarchical; a group can contain sub-groups.
  • getCustomers() - Retrieve your customer database.

    In addition to customer card fields, you can have API to return:
    • customer addresses (set getAddresses = 1);
    • customer contact persons (set getContactPersons = 1);
    • customer balance (set getBalanceInfo = 1)
    To add or edit a customer record, use saveCustomer.

    Each customer belongs to a customer group (see getCustomerGroups).

    To retrieve current reward points balance for a particular customer, see getCustomerRewardPoints.
  • getCompanyInfo() - Get information about the company running the account.
  • getCurrencies() - Get currencies (that have been defined on your ERPLY account).
  • getCustomerBalances() - Retrieve current balance (store credit) of all customers.

    NB! This API call is essentially a report and can take a long time to run. Avoid calling it too frequently. API processes getCustomerBalances calls one at a time; if you issue another call while previous one is running, API returns error 1021.

    Balance is essentially the difference between customer's total invoices and total payments. As such, balance cannot be adjusted directly. To change customer's balance (or to import initial balances), either create a payment (savePayment) or an unpaid invoice (saveSalesDocument).

    When you create an invoice and want it to be paid off of customer's store credit (prepaid balance), set input parameter amountPaidWithStoreCredit.

    If this call returns error 1006, please contact ERPLY helpdesk to update your account.
  • getCustomerRewardPoints() - Get customer's current number of reward points.

    Reward points accumulate automatically from customer's purchases. In Erply backend, you can set up how many reward points a customer earns for each $1 spent, and the reward points will accrue automatically from that point on.

    To subtract the points ("redeem" or "use" them), use subtractCustomerRewardPoints.

    Unfortunately, there no way yet to retrieve point balances for all customers simultaneously.

    To add points manually (although you typically do not need to do that), see addCustomerRewardPoints. If you are building a custom loyalty program, you may also take a look at getEarnedRewardPointRecords and getUsedRewardPointRecords — to retrieve a detailed list of all transactions where customer has earned or spent points.
  • getDayClosings() - Retrieve a log of POS day openings and closings.

    POS can be opened with POSOpenDay and closed with POSCloseDay.
  • getDayOpenings() - An alias for getDayClosings.
  • getDefaultCustomer() - Get the ID of default customer used for POS transactions (typically, "POS Customer", "Walk-in" or similar).

    If such a customer is not defined, API returns no records.
  • getDeliveryTypes() - Get delivery types.

    "Delivery type" is a classifier for categorizing sales orders. To assign delivery type to a sales order, pass the deliveryTypeID input parameter to saveSalesDocument.

    See also saveDeliveryType, deleteDeliveryType.
  • getDocumentStatuses() - Retrieve document statuses.
    Note: Documents module in ERPLY is being phased out and is no longer developed.
  • getDocumentTypes() - Retrieve document types.
    Note: Documents module in ERPLY is being phased out and is no longer developed.
  • getDocumentSeries() - Retrieve document series.
    Note: Documents module in ERPLY is being phased out and is no longer developed.
  • getEarnedRewardPointRecords() - Retrieve all transactions where customers have earned reward points.

    This API call is for building custom loyalty programs. For other related calls, see addCustomerRewardPoints (to add points to a customer manually) and getUsedRewardPointRecords (to retrieve transactions where customers have spent reward points}.

    For simpler integrations, you will more likely need getCustomerRewardPoints to retrieve a customer's point balance, and subtractCustomerRewardPoints to subtract points from customer.
  • getEDocuments() - if ID is specified, returns the corresponding EDocument. Otherwise returns a list of EDocuments, according to the supplied filtering parameters.
  • getEmailAccounts() - Returns the list of configured email accounts and the access credentials for each account
  • getEmployees() - Returns an array of employees.
  • getEmployeeStats() - Retrieve some total figures about employee sales performance. Currently this method only returns information about the currently authenticated user. Calling this method does not require any user rights.

    This method returns only one record, with the fields described below.

    These figures may be approximate, ERPLY may use optimizations to return these figures quickly (eg. to cache the calculated values). For authoritative sales data, see API call getSalesReport.

    Unfortunately, timeclock records are not available over the API yet.
  • getEvents() - Retrieve events or appointments.

    In Erply backend, events (appointments) are listed in the Calendar » Tasks module.

    To edit or add an event, use saveEvent.
  • getEventStatuses() - Retrieve event statuses.

    Statuses can be added or edited with saveEventStatus.
  • getEventTypes() - Retrieve event types.

    Types can be added or edited with saveEventType.
  • getFulfillableOrders() - Retrieve sales orders that can be fulfilled.
  • getGiftCardRedeemings() - Return an array of gift card redeemings.

    This function returns error 1006 if "Gift card extras" module is not enabled on this account.
  • getGiftCards() - Retrieve gift cards.

    To create a new gift card, or update the balance of an existing gift card, use saveGiftCard. To get a log of gift card redeemings, see getGiftCardRedeemings.

    In ERPLY, gift cards have a "balance". A gift card can be used multiple times, until all the balance has been spent. A customer can use any gift card that has not expired and has a non-zero balance.
  • getInventoryRegistrations() - Retrieve Inventory Registrations.

    Inventory Registration is a document that takes products into inventory; it has a list of items and quantities. It is similar to a Purchase Invoice, but has fewer fields and is best suited for registering your initial stock quantities when you start using ERPLY — or for making inventory quantity adjustments.

    Non-stock products and bundles cannot be on Inventory Registrations (these items do not have inventory).

    Products can be removed from stock with Inventory Write-offs (see getInventoryWriteOffs) and moved between locations with Inventory Transfers (see getInventoryTransfers).

    To create an Inventory Registration, see saveInventoryRegistration.
  • getInventoryTransfers() - Retrieve Inventory Transfers.

    In ERPLY, an Inventory Transfer is a document that moves inventory between locations (stores); subtracts from one location and adds to the other. An Inventory Transfer has a list of items and quantities.

    Non-stock products and bundles cannot be transfered (these items do not have inventory).

    To create or update an Inventory Transfer, see saveInventoryTransfer.
  • getInventoryWriteOffs() - Retrieve Inventory Write-Offs.

    Inventory Write-Off is a document that removes products from inventory; it has a list of items and quantities.

    Products can be added to stock with Inventory Registrations (see getInventoryRegistrations) and moved between locations with Inventory Transfers (see getInventoryTransfers).

    To create an Inventory Write-Off, see saveInventoryWriteOff.
  • getInvoicePaymentTypes() - Retrieve invoice payment methods.

    "Payment type" or expected payment method is an informative field on invoices. It indicates how the invoice will likely be paid by the customer. (However, keep in mind that actual payments on the invoice may be different from expected payment type.)

    To add a new type or edit an existing one, see saveInvoicePaymentType.
  • getIssuedCoupons() - Get the list of coupons that have been printed from POS and issued to customers.

    Coupons are used in Erply to give promotional discounts. Coupons can be printed from POS and given to customers. If customer returns to the store, presents the coupon and cashier scans coupon code, a specific promotion will apply to the ongoing sale.

    Issued coupons can be registered in Erply with saveIssuedCoupon. If customer returns to the store with a coupon, it can be validated with verifyIssuedCoupon and then redeemed with redeemIssuedCoupon. To apply coupon discount to a sale, pass coupon code to API call calculateShoppingCart. calculateShoppingCart will also notify you whether the coupon was applicable to that particular shopping cart or not.

    This function returns error 1006 if promotions module is not enabled on this account.
  • getMatrixDimensions() - Returns an array of possible matrix dimensions.
  • getObjects() - Retrieve your custom objects.

    ERPLY has an object storage where you can store custom data for plug-ins, integrations etc.

    For other object storage functions, see getObjects, saveObject, deleteObject (which allow to manipulate whole objects), and incrementAttributeValue, decrementAttributeValue — which provide a way to atomically increment or decrement one numeric field of a specific object (eg. to implement a counter).
  • getPayments() - Retrieve payments.

    In ERPLY, a payment is associated with a customer (customerID), and optionally an invoice (documentID; or some other sales document, eg. a sales order). One invoice can have many payments. Payment, on the other hand, can only be associated with one invoice at a time. If customer makes an aggregate payment towards several invoices, it needs to be split up into parts.

    A payment may not always be associated with a specific invoice (eg. deposits, store credit).

    To register a new payment or update an existing one, see savePayment.
  • getPaymentTypes() - Retrieve payment types.

    To create a new payment type, see savePaymentType.
  • getPointOfSaleDayTotals() - Returns today's cash, card and other payment type totals for the specified register (point of sale).

    This API call is for implementing a day closing procedure in POS. API provides day totals as recorded by ERPLY; cashier can then input actual counted amounts and reconcile the differences.

    If you want to just retrieve the X/Z Report printout, see getReports.
  • getPointsOfSale() - Retrieve all registers (points of sale), in all shops and locations. One shop can have many registers. A register has field "warehouseID" to indicate which store or warehouse it is located in.
  • getPriceLists() - Returns price lists and the contents of each price list.

    Price lists may contain three types of "rules": 1) fixed prices for specified products; 2) fixed prices for specified services; 3) percentage discounts for specified product groups. (A discount applies to all products in this group and its subgroups.)

    There can be multiple price lists associated with location, customer, or customer group and the price lists interact with each other and override each other in various ways. To apply all applicable price lists and promotions to a sale, we recommend to use API call calculateShoppingCart. (As input; you need to send all the items on your receipt; API will return the same list, with final prices for each item added.)

    Re–implementing all price list rules in your application would be a major undertaking, and we plan to constantly add new promotion features to ERPLY.
  • getProductCategories() - Retrieve the list of product categories.

    Categories are a way of categorizing your product database, and several API calls support filtering by category.

    Products can additionally be organized into groups (getProductGroups, hierarchical), brands (getBrands, a flat list) and priority groups (getProductPriorityGroups, a flat list)
  • getProducts() - Retrieve your product database.

    In addition to product card fields, you can have API to return:
    • inventory quantities (set getStockInfo = 1);
    • costs and purchase prices (set getFIFOCost = 1);
    • price list prices in a particular store (set getPriceListPrices = 1);
    • recipes for assembly and bundle products (set getRecipes = 1);
    • package options (set getPackageInfo = 1);
    • replacement products (set getReplacementProducts = 1);
    • related products (set getRelatedProducts = 1);
    • product parameters (set getParameters = 1);
    • product files (manuals, specifications) (set getRelatedFiles = 1);
    • beverage containers (set getContainerInfo = 1);
    • detailed list of variations for a matrix product (set getMatrixVariations = 1).
    To add or edit a product, use saveProduct. To retrieve inventory quantities ONLY, or to synchronize that data, use getProductStock. To retrieve only price list prices, use getProductPrices.

    Services are also considered a special kind of products — non-stock products.
  • getProductStock() - Retrieve your ERPLY inventory — quantities on hand, reserved amounts, Reorder Points and Restock Levels, FIFO costs, and most recent purchase prices.

    By default, API returns all products that have a non-zero inventory quantity in the warehouse you specified. In other words, items with a zero inventory quantity are skipped.

    However, if you use input parameters "changedSince" (all quantities that have changed since last synchronization), or "getProductsWithReorderPointDefined" / "getProductsWithRestockLevelDefined", API will also return items with zero inventory quantity.
  • getProductCostForSpecificAmount() - Get FIFO unit cost for a specific amount of specific items you are planning to subtract from inventory.

    API inspects all the batches that are currently in stock, calculates (according to FIFO rules) how many items should be discounted from which batch (starting with the oldest ones), and returns the weighted average cost of the resulting lot.

    This function is useful when you plan to make an inventory transaction (eg. a sale, transfer or inventory writeoff), but want to know the exact total cost of the items before actually making the transaction.

    You need to specify amount, because each batch may have a different cost. The amount that you require may have to be pulled from one or multiple batches, depending on how many items are left in each batch.

    Please contact Erply support if you plan to use this API call. Your account may need updates or customizations to be applied.
  • getProductFiles() - Retrieve product files (brochures, manuals, specifications). For each file, API provides a URL.

    Please note that the files (as well as product images) are not accessible by default. To get access to the files, please contact ERPLY customer support.

    The same information is also available through API call getProducts (field relatedFiles), so if you need to query product information anyway, getProducts API call can also provide you the list of associated files.
  • getProductFileTypes() - Returns an array of product file types.
  • getProductGroups() - Returns a HIERARCHICAL array of product groups.

    Groups are a way of categorizing your product database, and several API calls support filtering by group.

    Products can additionally be organized into categories (getProductCategories, hierarchical), brands (getBrands, a flat list), and priority groups (getProductPriorityGroups, a flat list)
  • getProductPictures() - Retrieve product pictures.

    For each picture, ERPLY provides 4 URLs for 4 different image sizes. These URLs must not be hotlinked — you need to download the images to your application and serve them from there.

    Access to images is currently limited and the images are not accessible by default. If you need to access the files, please contact ERPLY customer support.

    The same information is also available through API call getProducts (field images), so if you need to query product information anyway, getProducts can also provide you the list of images for each product.
  • getProductPrices() - Returns product's net sales price in a certain location, or net sales price for a specific customer — according to any price lists that apply.

    You can query prices for a single product (by supplying parameter productID) or multiple products at a time (by supplying parameter productIDs).
  • getProductPriorityGroups() - Returns an array of product priority groups.

    Priority groups are a way of categorizing your product database, and several API calls support filtering by priority group.

    Products can additionally be organized into groups (getProductGroups, hierarchical), categories (getProductCategories, hierarchical), and brands (getBrands, a flat list).
  • getParameters() - Retrieve product parameters.

    "Product parameters" is a ERPLY add-on module, primarily for web shops. (It is not enabled by default. If you are looking for a simple way to attach extra key-value data to products, you may want to consider using attributes instead.)

    To work with parameters, you first need to define "parameter groups" in Erply backend, and associate these with product groups. Each group must define a set of parameters for a specific type of product. Eg.: inner and outer diameter for bearings; volume, energy rating and physical dimensions for refrigerators etc.

    Then, on product card, you can set specific parameter values for each item (eg. Refrigerator XYZ has a volume of 250 L, energy rating "A+" and measures 500 x 650 x 1700 mm).

    This API call will return list of parameters and which parameter group they belong to. Unfortunately, API does not have calls for listing all the groups yet, or querying which product groups are associated with which parameter groups.

    To get products and their parameter values, use API call getProducts, set getParameters = 1 and see output field "parameters".
  • getProductUnits() - Returns an array of product possible units.
  • getProjects() - Returns an array of projects.
  • getProjectStatuses() - Returns an array of possible project statuses.
  • getProjectTypes() - Returns an array of possible project types.
  • getPurchaseDocuments() - Returns a list of purchase documents (purchase invoices or orders), according to the supplied filtering parameters.

    If you have specified document ID or invoice number, or if the search criteria match a single sales document, or if you have set getRowsForAllInvoices = 1, API returns all documents together with their rows. Otherwise only document headers will be returned.
  • getPurchaseDocumentStatuses() - Returns an array of purchase document possible statuses.
  • getReasonCodes() - Get a list of reason codes.
  • getRedeemedCoupons() - Get a list of coupons that have been redeemed at the register.

    For a more generally useful API call, see getIssuedCoupons. getIssuedCoupons lists coupons with ALL statuses — active, expired, redeemed — and you can also use a status filter to retrieve any of the three.
  • getReports() - Get a report. Currently, only Z Report / X Report (day sales and payments in POS) is available; it can be retrieved either as structured data or HTML.
  • getSalesDocuments() - Retrieve sales documents (invoices, waybills, credit invoices, quotes or orders), according to the supplied filtering parameters.

    If you have specified document ID or invoice number, or if the search criteria match a single sales document, or if you have set getRowsForAllInvoices = 1, API returns all documents together with their rows. Otherwise only document headers will be returned.

    To create a new sales document (invoice, order or quote), see saveSalesDocument.

    If you are looking for a way to pull all sales data for external processing, see getSalesReport. getSalesReport can output either detailed data or aggregate it as needed: it can provide totals by products, by product groups, by dates, by locations, etc.
  • getSalesReport() - Get a sales report.

    API returns a link to CSV file that contains the report.
  • getSchedule() - Returns employee's work schedule. It can be retrieved in two formats: a list of employee's working hours for each day, or a list of employee's time off.

    This function can only be used is Salon module is enabled on your account. For other salon related functions, see getEmployees and getTimeSlots.
  • getTimeSlots() - Returns first available appointment slots for a chosen service in a selected salon (location).
    API will inspect employee's schedules and find first available times that have not been booked yet.

    Using this API call, you can schedule:
    • One appointment for one customer;
    • Several consecutive appointments (eg. multiple hair care services) for one customer;
    • Appointments for a group of customers who want to arrive and leave together.
    This function can only be used if Salon module is enabled on your account. For other salon related functions, see getEmployees and getSchedule.

    Returns error 1044 if the service being booked does not have a default length specified in Erply backend.
  • getUsedRewardPointRecords() - Retrive all reward point subtraction transactions.

    This API call is for building custom loyalty programs. For other related calls, see addCustomerRewardPoints (to add points to a customer manually) and getEarnedRewardPointRecords (to retrieve transactions where customers have earned reward points}.

    For simpler integrations, you will more likely need getCustomerRewardPoints to retrieve a customer's point balance, and subtractCustomerRewardPoints to subtract points from customer.
  • getServices() - Returns an array of services.
  • getStocktakings() - Retrieve physical stocktakings.

    A physical stocktaking is an operation where inventory is manually re-counted; if actual count differs from the inventory quantity in ERPLY, the quantity in ERPLY is adjusted.

    When physical stocktaking is completed, the stocktaking act must be confirmed. Any surplus items can then be taken into inventory with an Inventory Registration, and missing items subtracted with an Inventory Write-Off.

    To retrieve all item counts in one specific stocktaking, see getStocktakingReadings. To start a new stocktaking (create a new stocktaking act), see saveStocktaking. To update quantities on an act, see saveStocktakingReadings and incrementStocktakingReading.
  • getStocktakingReadings() - Retrieve item counts on one specific stocktaking act.

    To retrieve a list of physical stocktakings, see getStocktakings. To start a new stocktaking (create a new stocktaking act), see saveStocktaking. To update quantities on an act, see saveStocktakingReadings (to make bulk updates) or incrementStocktakingReading (to increment quantities atomically).
  • getSummaryInventoryReport() - Get summary inventory report (all stores and locations).

    For more detailed data, use getProductStock instead.
  • getSupplierGroups() - Retrieve supplier groups.
  • getSupplierPriceLists() - Retrieve supplier price lists and the contents of each price list.

    Contact ERPLY Helpdesk to enable Supplier Price Lists module on your account. (If not enabled, API returns error 1006.) Entering your supplier price lists into ERPLY is useful when creating Purchase Orders, or when receiving supplies; ERPLY will automatically populate the Price field for each item.
  • getSuppliers() - Retrieve suppliers.

    Suppliers can be associated with products (see getProducts) and purchase orders / purchase invoices (see getPurchaseDocuments).
  • getUserGroups() - Return an array of user groups.
  • getUserOperationsLog() - Retrieve a log of all items that have been deleted from ERPLY (since a certain point of time). This is important for synchronizing data to a local database: getUserOperations lists items that you can delete from local database.

    For more information, see the data synchronization guide: Synchronizing Data with “changedSince”
  • getUserRights() - Returns an array of user rights.
  • getVatRates() - Returns the list of VAT rates (or sales tax / GST / etc. rates, depending on what taxation is used in the particular country)
  • getWarehouses() - Returns a list of warehouses, or locations, or stores.

    API call getAllowedWarehouses returns the list of those warehouses that your user has access to.
  • getWidgets() - Returns an array of possible widgets. This function is only available if your Erply account is running version 3.4 or newer; otherwise returns error 1006.
  • incrementAttributeValue() - Increment attribute value.

    This API call is for editing custom objects. ERPLY has a custom object storage where you can store custom data for plug-ins, integrations etc.

    For other object storage functions, see getObjects, saveObject, deleteObject (which allow to manipulate whole objects), and incrementAttributeValue, decrementAttributeValue — which provide a way to atomically increment or decrement one numeric field of a specific object (eg. to implement a counter).
  • incrementStocktakingReading() - Increment a product's counted quantity on a stocktaking act.

    Use this call to implement a custom scanning / counting application. The application should issue an "incrementStocktakingReading" API call for each counted item; then the totals will be correct even if multiple devices are counting and updating quantities simultaneously.

    For related API calls, see getStocktakings, getStocktakingReadings and saveStocktaking.

    If you want to update quantities in bulk (and your script is the only one modifiying the stocktaking, so there are no concurrency issues), you may use saveStocktakingReadings.
  • pollNewInvoices() - DEPRECATED. Ask system if there are any invoices that need verification by fiscal printer.
  • POSCashIN() - Drop an amount of cash in register.

    By convention, a cash drop with an amount of 0 is an indicator of "No Sale", ie. just opening the drawer. So if you want to record drawer openings (and have these printed on the Z Report), send a cash drop event with amount 0.

    For cash payouts, use POSCashOUT. To get a list of all cash drops and cash payouts, use getCashIns.
  • POSCashOUT() - Pay out an amount of cash from register.

    For cash drops, use POSCashIN. To get a list of all cash drops and cash payouts, use getCashIns.
  • POSCloseDay() - Close the day (or cashier's shift) in POS. The day must be previously opened with POSOpenDay.

    To close the day, cashier needs to count the amount of cash at the register, and indicate how much of it will be stored at the register (closedSum) and how much taken away and deposited (bankedSum).

    Both the opening and closing (and the amount of cash counted at opening time and closing time) will be recorded on the Z Report.

    A log of POS openings and closings can be retrieved with getDayClosings.
  • POSOpenDay() - Open the day (or cashier's shift) in POS.

    To open the day, cashier needs to count the amount of cash at the register.

    Day must later be closed with POSCloseDay. Both the opening and closing (and the amount of cash counted at opening time and closing time) will be recorded on the Z Report.

    A log of POS openings and closings can be retrieved with getDayClosings.
  • redeemIssuedCoupon() - Redeem a coupon that has been previously issued to a customer. All coupons accepted by the cashier have to be redeemed so that the coupons cannot be used again.

    To just verify that a coupon is valid (before redeeming it), use verifyIssuedCoupon. To get the list of all issued coupons, use getIssuedCoupons.

    redeemIssuedCoupon returns error 1040 if a coupon with such identifier has not been issued at all. If coupon has been redeemed already, API returns error 1041. If coupon has expired (and is thus not valid any more), API returns error 1045. If coupon is valid, API returns error 0.
  • removeItemsFromMatrixDimension() - Remove variations from matrix dimension.
  • removeItemsFromPriceList() - Remove rules from price list. You need to specify rule type and the ID of the respective product or product group that you want to remove. (If using the Quantity Discounts module, you also need to specify the "amount" parameter.)

    You can specify many such parameter pairs in one API request; give a sequential number (1, 2, 3, ...) to each such pair. The "#" character below denotes this sequential number.
  • removeItemsFromSupplierPriceList() - Remove rules from supplier price list.

    Contact ERPLY Helpdesk to enable Supplier Price Lists module on your account. (If not enabled, API returns error 1006.)

    You need to specify the ID of the respective product that you want to remove. (If using the Quantity Discounts module, you also need to specify the "amount" parameter.)

    You can specify many such parameter pairs in one API request; give a sequential number (1, 2, 3, ...) to each such pair. The "#" character below denotes this sequential number.
  • saveAddress() - Create or update customer's or supplier's address.
  • saveAddressType() - Create or update address type.
  • saveAppliance() - Create or update an appliance.

    This function returns error 1006 if assignment module is not enabled on this account.
  • saveAssignment() - Create or update an assignment.

    This function returns error 1006 if assignment module is not enabled on this account.
  • saveAssignmentGroup() - Create or update an assignment group.

    This function returns error 1006 if assignment module is not enabled on this account.
  • saveBillingStatement() - Create or update a billing statement.
  • saveBillingStatementReading() - Creates a reading of billing statement.
  • saveBrand() - Creates or updates brand.
  • saveCampaign() - Create or update a sales promotion.

    A sales promotion is a rule that gives a discount when a certain condition is met — and can be configured to apply either automatically or be invoked manually by the cashier in POS.

    For specifying unconditional discounts (that do not depend on a certain other item being purchased, or customer's total basket value), you should rather use price lists (see getPriceLists).

    To retrieve promotions, see getCampaigns.

    For an API call that automatically implements all promotion rules and price lists automatically for you, see calculateShoppingCart.
  • saveCompanyLogo() - Upload company logo.
  • saveConfParameter() - Updates configuration parameter. If parameter name is invalid, returns error 1016. Some configuration parameters returned by getConfParameters — 'languages', 'additionalModules', 'invoice_algorithm_version', 'default_currency' — are derived from various other settings and you cannot directly change their value.
  • saveCountry() - Creates or updates country.
  • saveCoupon() - Create or update a coupon rule.

    Coupon rule is like the "blueprint" or "type" of a printed coupon (that is issued from POS and handed to a customer). The "blueprint" specifies in what circumstances the coupons will be printed from POS, and what promotion will apply when customer returns with the coupon — ie., what discount or extra value it effectively carries.

    A coupon rule should be associated with a sales promotion (see getCampaigns).

    In order for the customer to use those discounts, you need to issue the customer a coupon with an unique serial number (see getIssuedCoupons, saveIssuedCoupon). When customer returns with the coupon code, it has to be scanned at the POS. Scanning redeems the coupon, invokes the promotion associated with it, and gives customer a discount.

    To retrieve coupon rules, see getCoupons.
  • saveCurrency() - Creates or updates currency.
  • saveCustomer() - Create a new customer or update customer information. Function can be used for manipulating both companies and persons. Some parameters only apply to one or another.
  • saveCustomerGroup() - Create or update a customer group.
  • saveDeliveryType() - Create or update a delivery type.
  • saveDocument() - Create or update a document.
    Note: Documents module in ERPLY is being phased out and is no longer developed. Although you can create the records with API saveDocument, there is no corresponding getDocuments API call to retrieve saved documents.
  • saveEDocuments() - Creates a new EDocument (sales invoice/order or purchase invoice/order)
  • saveEmployee() - Create or update an employee.
  • saveEvent() - Create or update an event/appointment.

    In Erply backend, events (appointments) are listed in the Calendar » Tasks module.

    To retrieve events, use getEvents.

    Function may return error 1043 if creating appointment and employee already has an appointment in the selected time slot. (In that case you need to requery getTimeSlots and select a different start and end time for new appointment.)
  • saveEventType() - Create or update an event type.

    To retrieve event types, see getEventTypes.

    Events (appointments) can be managed with the getEvents and saveEvent API calls.
  • saveEventStatus() - Create or update an event status.

    To retrieve event statuses, see getEventStatuses.

    Events (appointments) can be managed with the getEvents and saveEvent API calls.
  • saveGiftCard() - Create a new gift card; or redeem an existing gift card and update its balance.

    To retrieve a list of all gift cards, or for more information about gift cards in ERPLY, see getGiftCards.
  • saveInventoryRegistration() - Create an Inventory Registration.

    See also getInventoryRegistrations.
  • saveInventoryTransfer() - Create or update an Inventory Transfer.

    Inventory Transfer is a document that moves inventory between locations (stores); subtracts from one location and adds to the other. Inventory Transfer has a list of items and quantities.

    Non-stock products and bundles cannot be transfered (these items do not have inventory).

    For retrieving Inventory Transfers, see getInventoryTransfers.
  • saveInventoryWriteOff() - Create an Inventory Write-Off.

    See also getInventoryWriteOffs.
  • saveInvoicePaymentType() - Create or update an invoice payment method.

    "Payment type" or expected payment method is an informative field on invoices. It indicates how the invoice will likely be paid by the customer. (However, keep in mind that actual payments on the invoice may be different from expected payment type.)

    To list existing invoice payment methods, see getInvoicePaymentTypes.
  • saveIssuedCoupon() - Register a printed coupon that has been issued to a customer.

    The issued coupon must have a unique identifier. Since coupons may carry monetary value, Erply keeps track of issued coupons and allows to validate (verify) a coupon when customer comes to redeem it.

    See also verifyIssuedCoupon, redeemIssuedCoupon, and getIssuedCoupons.

    A coupon may have a "printing cost" — if the coupon is issued, a certain amount of reward points is subtracted from customer's point balance. This is done automatically by the API. However, if customer does not have a sufficient amount of points, the coupon does not get issued and API returns error 1042 instead.
  • saveMatrixDimension() - Create a matrix dimension, or add values to an existing dimension.

    If you want to remove any values from the dimension, use the removeItemsFromMatrixDimension API call.
  • saveObject() - Create or update an object.

    ERPLY has an object storage where you can store custom data for plug-ins, integrations etc.

    For other object storage functions, see getObjects, saveObject, deleteObject (which allow to manipulate whole objects), and incrementAttributeValue, decrementAttributeValue — which provide a way to atomically increment or decrement one numeric field of a specific object (eg. to implement a counter).
  • savePayment() - Create or update a payment.

    In ERPLY, a payment is associated with a customer, and optionally an invoice (or some other sales document, eg. a sales order). One invoice can have many payments. Payment, on the other hand, can only be associated with one invoice at a time. If customer makes an aggregate payment towards several invoices, it needs to be split up into parts.

    A payment may not always be associated with a specific invoice (eg. deposits, store credit).

    To list payments, see getPayments.

    A typical use case for the savePayment API call is recording a sale (that has been made in POS or in a web shop). In that case, send a saveSalesDocument API call, followed by savePayment.

    See also calculateShoppingCart. That API call helps you calculate cart total, and also gives instructions regarding other retail features (issuing and redeeming coupons etc.)
  • savePaymentType() - Create or update a payment type.

    To retrieve existing payment types, see getPaymentTypes.
  • savePriceList() - Create a price list, or add prices to an existing price list.

    A price list can contain three types of rules: 1) fixed prices for specified products, 2) fixed prices for specified services, 3) percentage discounts for product groups. You may specify as many rules of each type as necessary.

    If you need to create a very large price list (with thousands of items), we strongly recommend to create it in parts — create the list itself with the first API call, and then add items into the list with each subsequent call, eg. in batches of 1000.

    If needed, you can edit just an existing price list's name, status and validity dates. In that case, API will not modify price list contents. However, you can also use this call for adding or updating prices in an existing price list. If you send any price list rules, API will check if the specified product or product group already exists in price list. If yes, that price list item will be updated. If not, a new one will be added.

    If you want to remove any items from the price list, use the removeItemsFromPriceList API call.

    If you have the Quantity Discounts module enabled, please note that each product may have multiple entries in the price list. If you want to address and update one specific rule, you also need to pass along the "amount" parameter.
  • saveProduct() - Create or update a product.
  • saveProductCategory() - Create or update a product category.
  • saveProductFile() - Attach a new file (manual, brochure, price list, spec sheet) to product card, or replace an existing file.

    To retrieve a list of files attached to a product, call getProducts and see the element "relatedFiles".
  • saveProductGroup() - Create or update a product group.
  • saveProductPicture() - Attach a new picture to a product, or replace an existing picture.

    To retrieve a list of images attached to a product, call getProducts and see the element "images". To remove a picture, use deleteProductPicture.
  • saveProductPriorityGroup() - Create or update priority group.
  • saveProductUnit() - Create or update product unit.
  • saveProject() - Create or update a project.
  • savePurchaseDocument() - Create a new purchase invoice, purchase order or purchase return, or update an existing one.
  • saveSalesDocument() - Create a new sales document (invoice, sales order, etc.) or update an existing one.

    Sales documents in Erply have a header with general information (customer, date etc.) and one or more lines that list the items, quantities and prices.

    Every sales document in Erply needs to be confirmed. When confirmed, a sales invoice, for example, 1) receives a number, 2) generates sales revenue and VAT / tax obligation and 3) removes sold items from inventory. A confirmed sales order places a reservation on ordered items. A confirmed document may not be fully editable any more, or you might need special user rights for some kinds of changes.

    Possible sales document types are listed below. Most common ones that you'll probably need, are:
    • INVWAYBILL (this is an ordinary sales invoice),
    • CASHINVOICE (basically the same, but the printout is formatted as a POS receipt),
    • ORDER (a sales order).
    List of sales documents can be retrieved with getSalesDocuments. If you are making a sale, but you first need to know up-to-date prices and correct tax (VAT) rates for the items customer has selected, and get invoice total, see calculateShoppingCart. To apply a payment to the sale, use savePayment.
  • saveService() - Create or update a service.
  • saveStocktaking() - Create or update a physical stocktaking act.

    Creating the act is the first step in physical stocktaking. Next, it must be filled with quantities counted in the warehouse. After all quantities have been recorded and verified, the act must be confirmed. Finally, surplus quantities should be taken into stock with an Inventory Registration and missing quantites written off with an Inventory Write-off. Note that just confirming the act will not update your inventory yet!

    Inventory Registrations and Write-offs can be created manually in Erply back-end.

    For related API calls, see getStocktakings, getStocktakingReadings, saveStocktakingReadings and incrementStocktakingReading.
  • saveStocktakingReadings() - Update product count on a physical stocktaking sheet.

    Note! This API call should be used only in single-client mode (if your API script or application is the only one updating the quantities). If you have several applications that need to update quantities simultaneously, use incrementStocktakingReading instead.

    For related API calls, see getStocktakings, getStocktakingReadings and saveStocktaking.
  • saveSupplier() - Create or update a supplier.
  • saveSupplierGroup() - Create or update a supplier group.
  • saveSupplierPriceList() - Create supplier price list, or add prices to an existing price list.

    Contact ERPLY Helpdesk to enable Supplier Price Lists module on your account. (If not enabled, API returns error 1006.)

    If you need to create a very large price list (with thousands of items), we strongly recommend to create it in parts — create the list itself with the first API call, and then add items into the list with each subsequent call, eg. in batches of 1000.

    If needed, you can edit just an existing price list's name, status and validity dates. In that case, API will not modify price list contents. However, you can also use this call for adding or updating prices in an existing price list. If you send any price list rules, API will check if the specified product already exists in price list. If yes, that price list item will be updated. If not, a new one will be added.

    If you want to remove any items from the price list, use the removeItemsFromSupplierPriceList API call.

    If you have the Quantity Discounts module enabled, please note that each product may have multiple entries in the price list. If you want to address and update one specific rule, you also need to pass along the "amount" parameter.
  • saveUser() - Create or update a user.
  • saveUserOperationsLog() - Write a custom log entry in user activity log.

    User activity log is displayed in ERPLY backend, in Settings » Log of deleted items. As the name suggests, the log is mostly used for tracking deleted records. We strongly recommend to check with ERPLY development team before using the log for custom purposes.

    Logs can be queried with getUserOperationsLog, but functionality is currently limited.
  • saveWarehouse() - Create or update a warehouse.
  • saveVatRate() - Create or update a VAT (tax) rate.
  • sendByEmail() NEW - A request for sending a document or report by email. This API call is synchronous (returns when email is sent) and can take a few seconds to complete. Sending will be handled by the server. Email subject, sender's address, message content and attachment format (HTML/PDF) will be decided serverside and are configurable from ERPLY settings.
  • sendInvoiceVerification() - Sends a verification code for an invoice, provided by fiscal printer.
  • sendToPrint() NEW - THIS API CALL IS DEPRECATED.
  • subtractCustomerRewardPoints() - Subtract, or "redeem", customer's reward points.

    Reward points accrue automatically from customer's purchases. But whenever you perform an action that needs reward points to be redeemed — eg. apply a sales promotion where customer trades points for discount — you need to subtract the point amount manually, by calling subtractCustomerRewardPoints.

    Use getCustomerRewardPoints to query for customer's current amount of points.

    To add points manually (although you typically do not need to do that), see addCustomerRewardPoints. If you are building a custom loyalty program, you may also take a look at getEarnedRewardPointRecords and getUsedRewardPointRecords — to retrieve a detailed list of all transactions where customer has earned or spent points.

    Points are also subtracted from customer's balance when you issue a coupon that "costs" reward points (see saveIssuedCoupon). However, this is done automatically by the API, and you do not need to call subtractCustomerRewardPoints for that.
  • switchUser() - This is an authentication function. When called, it provides you a "session key" that you can use in subsequent API calls as a token of authentication.

    switchUser allows you to log in with user PIN (no user name / password needed); however, this function can only be used for "user switching". It means that for calling switchUser, you need to already have a valid session key (or one that has just expired, no more than 2 hours old).

    For a more general authentication function (that you should be using in most cases!), see verifyUser. It requires a user name and password. In verifyUser documentation, you will also find a general introduction to API authentication and sessions.

    Successful user switch will give you a NEW session key, with the user rights of the PIN holder.

    If authentication does not succeed, switchUser returns error 1051 or 1052. If the supplied session key is invalid, API returns error 1054 or 1055. If the session key is too old, API returns error 1056. In case of a success, API returns the information described below.
  • updatePrices() - Update price on product card, for many products simultaneously.

    This API call is specifically for updating product card price, but any other mass updates can be done by making API calls in bulk.

    For editing product card in general, see saveProduct.
  • validateCustomerUsername() - Validate customer's web shop user name. API checks that the provided user name is unique — no other customer has such user name yet. If user name is not unique, API returns error 1012, otherwise error code 0 (success).

    Use this function before you assign a web shop user name and password to a customer (API call saveCustomer, fields username and password).
  • verifyCustomerUser() - Validate customer's web shop user name and password.

    This API call is for building a web shop that has a log-in (members-only) area. In Erply Customer module, you can assign a user name and password for each of your customers. (These user names / passwords DO NOT grant the customer any access into your ERPLY account, and cannot be used for that purpose. They can only be used in your web shop.)

    Use API verifyCustomerUser to validate the user name and password and retrieve the customer record that these credentials belong to. Calling this function will not create any "session" or make the customer somehow logged into API; it just serves a verification purpose.

    Instead, if you want to learn how to generally authenticate yourself when connecting to Erply API — to be able to issue any API calls at all — see verifyUser.
  • verifyIssuedCoupon() - Validate a coupon identifier. The function verifies that the coupon has indeed been issued previously (using saveIssuedCoupon), that it has not expired, and that it has not been redeemed yet (using redeemIssuedCoupon).

    If coupon has not been issued, returns error 1040. If coupon has been redeemed already, returns error 1041. If coupon has expired, returns error 1045. If coupon is valid, returns error 0.
  • verifyUser() - Log into ERPLY API: authenticate yourself with a user name and password.

    Each communication session with Erply API must begin with a call to verifyUser. Successful log-in will give you a session key; include it with every subsequent API call. (Send it as input parameter "sessionKey").

    By default, session will last for one hour. When session expires, all API calls will start returning a 1054 or 1055 error; this is an indication that you should call verifyUser again to receive a fresh session key.

    We recommend that you build authentication and session keep-alive into your API wrapper class — so that it automatically refreshes session key when it is about to expire, and is able to re-authenticate and re-issue an API call if it receives error 1054/1055. For an example, see our sample PHP wrapper class.

    If logging in does not succeed, verifyUser returns error 1050, 1051 or 1052.
  • createInstallation() - Create a new ERPLY account.
 
Ask your question and we will contact you
*
*
*
*
Erply is a service of Erply Ltd © 2010 Erply.
9th floor 107 Cheapside London
Company No. 07043823