Build smart with Articles

Articles represent what a company offers and sells to its customers, such as physical goods, billable hours, daily allowances, and these are used to populate quotes and invoices.
Instead of manually typing descriptions, prices, and VAT rates every time a sale is made, companies define their offerings as articles in advance. When an order is placed or a quote or invoice is created, the article data is pulled in automatically, minimising manual data entry, reducing the risk of errors, and ensuring bookkeeping details are correct.

If a company manages a warehouse, physical articles can also be tracked through the Stock feature to keep inventory balanced.

This guide covers the key concepts, business logic behind Articles, how to handle physical inventory when the Stock feature is enabled, how Articles connect to the API, and key rules to keep in mind when building your integration.


Key concepts

These are key concepts covered in this guide:

Article:
The core offering defining what a company offers, carrying standard prices and descriptions.

Article labels: Tags for grouping and organising articles, making them easier to find and filter.

Sales categories: Define the accounting rules and VAT settings applied to each article, and is a basis for bookkeeping later.

Units: Measurement standards used on invoices, such as hours, pieces, or litres.

Sales price lists: Customer-specific price lists that override an article's standard price for selected customers, often used during promotions and similar.

Stock: A feature for tracking physical inventory, including inbound and outbound deliveries and stocktaking.


Business rules & logic

To guarantee that the financials are always correct, every article must be connected to a Sales category (VAT and bookkeeping rule). This means it’s not possible to create a valid article without telling the platform how to account for it.

Articles have standard price (excluding VAT), but if a company has specific agreements with certain customers or during promotion, sales or similar, this standard price can be overridden by adding the article to a Sales price list with a custom price.

Finally, to protect accounting history, if an article that’s already been used on a sent sales document is no longer to be used, it shouldn’t be deleted. Instead, it should be deactivated.

Managing inventory (Stock)
When the Stock feature is activated, a company can enter a starting stock balance for their physical articles. Any changes in inventory, such as receiving goods from a supplier (inbound) or sending goods to a customer (outbound), are handled through Stock adjustments. These stock adjustments can then be posted directly to the general ledger to keep the accounting in sync. Companies can also perform Stocktaking to verify their actual inventory against the recorded data.


Common workflows

From a user's perspective, managing offerings usually follows this step-by-step flow:

  1. Set the foundation: The user ensures that the correct measurement units and accounting rules exist in their bookkeeping.
  2. Create the article: The user creates a new article, gives it a standard price, and links it to the appropriate unit and accounting rule.
  3. Organise: The user applies labels to keep the register tidy.
  4. Track inventory (Optional): If the item is physical, the user enters the stock balance. Over time, they register inbound/outbound deliveries and perform stocktaking.
  5. Customise pricing (Optional): The user imports the article into a Sales Price List to set up special pricing.
  6. Use in sales: The article is picked up and added to a quote, order or invoice.
  7. Deactivate: If a company stops selling the item, they update its status to inactive instead of deleting it, preserving historical data.

Connection to the API

Your integration handles these workflows via the API. Here is the conceptual mapping:

  • Before you POST a new article to /articles, you must perform a GET request on /articleaccountcodings and /units to retrieve the mandatory IDs needed for creation.
  • You use the /articles resource for your basic CRUD operations (Create, Read, Update).
  • To help users keep their data categorised, use the /articlelabels endpoint.
    If you are syncing external pricing data, use /salespricelists to mass-update customer-specific prices.

Warning Stock management (including deliveries, adjustments, and stocktaking) is handled in the platform UI and isn't available via the API. The one exception is StockBalance, which can be set directly as a property on the /articles endpoint, but only when the stock module is inactive. If the stock module is active, StockBalance becomes read-only. Note that /inventoryitems is unrelated to warehouse stock; it's used for Fixed Assets such as machines or vehicles.


Relations to other domains

Articles don’t exist in a vacuum, but are deeply connected to other parts of the platform:

  • Sales documents: Articles are the primary line items added to Quotes (/quotes), Orders (/orders), and Sales invoices (/customerinvoices).
  • Accounting: Thanks to Sales categories, every time an article is sold, it directly impacts the general ledger accounts (/accounts) and VAT reports (/vatreport).

Important things to consider

Keep these things in mind to build a robust integration:

  • No API delete: Notice that there is no DELETE method available for articles in the API. To remove an item from the active offerings, use a PUT request to update its status (deactivate it). This protects the traceability of past invoices.
  • Read-only rules: Sales categories (/articleaccountcodings) and Units (/units) are read-only via the API. Your integration cannot create new financial rules; it can only fetch what the user has already configured and attach them to the articles you create.
  • Check the subscription: Basic article functionality works across almost all subscriptions. However, Sales price lists (/salespricelists) are a premium feature that requires the user to have the Bookkeeping & Invoicing+ variant. In Sweden all features are available over the different packages.

Good luck with the coding!



Did this page help you?