Exact Online quirks
These facts come from live write tests on a Belgian test administration. The reference documentation does not state them. Exact can change its behaviour, so treat each item as "seen on the date of the test", not as a contract.
General
Section titled “General”- A line of a document can only be created together with its header. A POST on
GoodsDeliveryLines,GoodsReceiptLines,DropShipmentLinesorPurchaseInvoiceLinesalone answers 403. A PUT and a DELETE on a line that exists work. - A POST answer can echo
nullfor fields that Exact did store, for exampleCodeon a new warehouse orQuantityon a time entry. Read the record back to check it. - Exact blocks an endpoint for one hour after ten errors in one hour. Fix the body before you send it again.
- A 403 on a write can come from the user rights (a role in "My Exact Online > Rights") or from the licence. When every role is ticked and the 403 stays, the licence lacks the module.
- Some resources exist only in the beta namespace, for example
cashflow/AllocationRule. Use--beta.
Sales and purchase orders
Section titled “Sales and purchase orders”- The warehouse of a sales order is
WarehouseID, notWarehouse. - Drop shipment needs
DropShipment = 1on the supplier item (logistics/SupplierItem), else the sales order answers "not allowed: drop shipment". A sales order line takesUseDropShipment = 1. - A purchase order POST ignores
DropShipmentand the link to the sales order line. Create the drop shipment purchase order in the web interface (on-demand replenishment).salesorder/DropShipmentsthen works through the API. - A planned sales return takes no decimal quantity for an item without fractions, and two return lines on the same delivery line are refused.
Projects and time
Section titled “Projects and time”- An hour type is an item with
IsTime = trueand the unithour. - A subscription line needs an item whose unit is a period (
month,quarter,halfyear,year).IsTimedoes not work there: it forces the unit to hours. - A time entry goes to "submitted" with
HourStatus = 10on a PUT. The approval is in the web interface. project/TimeCorrectionsrefused a correction on an approved entry (status 20) with "Only allowed to correct finalized time entry".ProjectHourBudgetsneeds a project withBudgetType = 1(hours per hour type).InvoiceTermsneeds a fixed price project (Type = 2), and a fixed price project needsFixedPriceItem.ProjectPlanningandProjectPlanningRecurringneedAccount. The recurring planning refusesEndDateOrAfter.ProjectAccountMutationsneeds an account other than the project account and a start date after the project start. A PUT ignoresStartDate.- A rebilling restriction cannot be moved to a fixed price project.
- A stock item needs a stock account on its item group. Without it, the item POST answers "mandatory: item group - G/L account: stock / costs".
- A warehouse transfer needs
EntryDateand anItemWarehouseslink between the item and the target warehouse. - A stock count takes
StockCountDateand nestedStockCountLineswithQuantityNew. A count line POST alone was refused; a PUT and a DELETE on a nested line work. - An assembly bill of material is created with its materials in one POST on
AssemblyBillOfMaterialHeader(the item ID is the key). A material POST alone answers "Assembly bill of material not found". Assembly orders are read-only in the API. - Batch and serial numbers:
DraftStockTransactionIDis a GUID that you choose. The POST worked withStockTransactionType = 130(goods receipt). A PUT is accepted only for a batch linked to a stock count line (type 195) or a warehouse transfer line (124, 125), and for a serial number of a shop order issue (150).
Manufacturing
Section titled “Manufacturing”- Material issues and shop order receipts need two accounts in the division settings: "work in progress" and "work in progress change" (a cost account).
- A work center needs a production area.
- A bill of material routing needs
OperationResourceandRoutingStepType = 10. - A by-product is a shop order material plan with
Type = 2and a negative planned quantity.
Accounting and payments
Section titled “Accounting and payments”- A G/L classification mapping takes a classification of the same scheme, and a PUT
must send
GLSchemeIDagain. - A processed sales invoice refuses a PUT.
- Payment processing needs a
PaymentReferenceon each payment and a valid own bank account.BankExportDocumentsUrlcomes back with a double slash after the host. cashflow/BankStatementUploadAttachmentsanswered a generic 500 for files that the web interface imports fine. Import bank statements in the web interface.financial/ProcessReturnneeds theRequestof a return. Exact creates one only when an accountant sends the return to the client for approval.
Quotations and webhooks
Section titled “Quotations and webhooks”crm/PrintQuotationanswered 500 through the API, also for a quotation that the web interface prints. Review, reopen, reject and accept work after a print.- Exact ignores the webhook
Descriptionon POST and PUT. - Exact signs a webhook with the secret of the app that the division signs in with, and sends a refused notification again later.