Release Notes

Information about future and past API releases

Version releases

We are constantly adding new features to Procountor API. This page has the planned changes in future releases as well as release notes for the current ones. For anyone interested, we recommend subscribing to our mailing list to get notifications about API changes as soon as they become available.

Subscribe to our mailing list

Currently available API versions

Procountor API version diagram

API Path Version Release Date Support Ends
/latest Monthly release with no extended support. However, if new API version isn't released, it will continue to have the previous release
/supported 24.08 Updated to the latest numbered version every three months
/v2408 24.08 2024-08-17 mid-May 2025
/v2405 24.05 2024-05-18 mid-Feb 2025
/v2402 24.02 2024-02-17 mid-Nov 2024

You can find the version update schedule from Procountor news and announcements site.

Release notes

Changes highlighted in red are not backwards compatible

Reminders

  • Authorisation endpoints expect request with Content-Type: application/x-www-form-urlencoded as mentioned in API authentication and M2M authentication. Please ensure charset parameter isn't sent in Content-Type.
  • GET /users/rights/old endpoint released in Procountor version 89 (June 2024) to return the old schema for user rights will be removed in Procountor version 93 (October 2024) as communicated before. Please ensure you have made necessary changes to adapt to the new schema returned by GET /users/rights by then.

Planned changes ahead

  • Payroll API: Our team is working on the Payroll API, which is scheduled for release by the end of Q1 2025. Some of the endpoints for Employees (employment information) from Employees register will be released in the next October release.
  • PUT /dimensions is deprecated and will be removed in Procountor release version 94 in November. Please use PUT /dimensions/{dimensionId} instead.
  • In the future we will deprecate Persons from Business Partners. This change will be communicated in advance.

Changes in version 24.09

Endpoints

  • As part of the Payroll API we are introducing new endpoints regarding Person’s default dimensions:
    • GET /persons/{id}/defaults/dimensions
      • Fetches the basic information on default dimensions and their items for a particular person.
    • GET /persons/{id}/defaults/dimensions/{dimensionId}
      • Fetches the detailed information on default dimensions items for a particular person.
    • PUT /persons/{id}/defaults/dimensions/{dimensionId}
      • Updates the dimension items percents for a particular person. The number of items in a dimension is unlimited but the total percent must equal to 100.Since only percent can be updated, new endpoint GET /persons/{id}/defaults/dimensions/{dimensionId} can be called first to fetch the item's other details.
    • GET /persons/{id}/defaults/products
      • Fetches the default products for a particular person.
  • In POST /payments endpoint a new restriction has been added for Danish environments: payments cannot be made after 31.12.2024. If the payment date is on 1.1.2025 or later, status code 400 is returned with the error PAYMENT_DATE_IS_AFTER_ENDING_SUPPORT_FOR_DANISH_ENVIRONMENTS
  • In GET /invoices/{invoiceId}/comments endpoint inactive users are no longer listed as tagged users under taggedUsersInfo.
  • PUT /invoices/{invoiceId}/comments/{commentId}/{userTagId}/read endpoint has been renamed to PUT /invoices/{invoiceId}/comments/{commentId}/read so that user who is tagged multiple times in the same comment can mark the comment as read in the single request. Additionally, from now on only the tagged user is able to mark the comment as read. Otherwise, API sends 400 error.
  • In GET /dimensions endpoint dimensions can now be filtered by name and codeName. Also partial search is supported. Filtering result is returned in an array.
  • In GET /invoices/{invoiceId} endpoint invoice row with null quantity is no longer returned in invoiceRows.

Changes in version 24.08

Endpoints

Endpoints for new resource Persons

  • We are introducing new endpoints for Persons resource for adding, editing and fetching person information from the Person register. In the future, we will be deprecating Persons from the Business Partners. This will be informed later well ahead of the change.
  • Person's id is same as business partner's partnerId for type PERSON.
  • New endpoints for Person:
    • GET /persons
      • Returns the list of persons with basic information: id, lastName, firstName, jobTitle, deliveryAddress, invoicingInfo, registryInfo.
      • It is possible to filter persons by the following parameters:
        • name and identifier in header.
        • personNumber, mainPersonGroup, personGroupId and includeInactive in url.
      • Also pagination and sorting by id are supported.
      • Partial search is supported for name, identifier and personNumber.
    • GET /persons/{id}
      • Returns person's detailed information.
      • To get more information on Person group, please use GET /businesspartners/groups/{id}.
    • POST /persons
      • New endpoint to add a new person to the Person register.
      • Note in Swedish environments, personNumber is required.
    • PUT /persons/{id}
      • New endpoint to modify details of an existing person in the Person register.
      • Note if the person is already in Employee register,
        • identifier and identifierType can't be updated
        • if salary channel is e-salary, accountNumber must support e-salary
        • accountNumber can be changed but it can't be removed
        • Otherwise, in the above 3 cases, API sends 400 error

Endpoints related to invoice comments

  • We have added a new endpoint GET /invoices/{invoiceId}/comments/{commentId} to get more detailed information about the tagged users in the comment.
    • In case a comment does not contain any tagged user, the response will not include the taggedUsers array.
    • The read property within the taggedUsers array indicates the timestamp when the comment was read.
    • If a tagged user has not read the comment, the read property will not be included in the response for that user.
  • We have added a new endpoint PUT /invoices/{invoiceId}/comments/{commentId}/{userTagId}/read to indicate that the tagged user has read the specified comment.
    If the comment has been marked as read for the tagged user already, API sends 400 error response when the same request is sent next time.
  • We have added taggedUsersInfo optional object in existing endpoint GET /invoices/{invoiceId}/comments to fetch information about the tagged users.
    • taggedUsersInfo contains numTaggedUsers and readByAllTaggedUsers fields.
    • taggedUsersInfo is returned only if the comment has at least 1 tagged user.
    • Comments can be also filtered by optional query parameter readByAllTaggedUsers. Only those comments that have been read by all tagged users are returned. Comments without tagged users aren't returned.

Endpoints related to Dimensions

  • We have added a new endpoint PUT /dimensions/{dimensionId} to update specific dimension's name. PUT /dimensions, which is currently used for this will be removed in future. This will be communicated later in advance.

Other endpoints

  • Earlier when user had "No access" right to Sales or Purchases Product register, API returned 500 error when trying to add a new bank account via POST /bankaccounts. This has now been fixed and error isn't returned anymore.

Updates in API developers documentation

  • Validation Error Codes page has been simplified. Model and Name columns have been removed from the table. Error description is now easier to find.

Changes in version 24.07

Endpoints

  • From this version onwards GET /users/rights endpoint will return a new schema aligned with Procountor UI (Management > Users and user rights) for the rights property. This change is applicable only to the latest API version. The GET /users/rights/old endpoint released in Procountor version 89 (June 2024) will continue to return the old schema until version 93 (October 2024). At this point, the endpoint will be removed.
    • Even though the endpoint will return a new schema, underlying rights will not change. For example, earlier if a user had no rights to accounting reports, this will remain the same also after the change.
    • All the properties under rights that accept String will accept one of these enum values NO_ACCESS, VIEWING_RIGHTS, ALL_RIGHTS, NOT_ENABLED. Please note NO_RIGHTS has been replaced by NO_ACCESS.
    • In the following table you can see how the fields in the new schema are mapped to the old one (currently returned by the GET /users/rights/old endpoint):
Fields in New Schema Fields in Old Schema Type of change
management management No change
basicCompanyInfo basicCompanyInfo No change
basicAccountingInfo basicAccountingInfo No change
chartOfAccountsAndDefaultReports ---didn't exist--- New field
usersAndUserRights companyUserManagement Renamed
setUpACompany setUpACompany No change
importData financialManagement/importData Moved from financialManagement
notifications financialManagement/notifications Moved from financialManagement
incomesRegisterCertificate financialManagement/incomesRegisterCertificate Moved from financialManagement
groupLetter sales/groupLetter Moved from sales
auditLog ---didn't exist--- New field
user ---didn't exist--- New
editPersonalInfo management/editPersonalInfo Moved from management
limitedDimensions limitations/limitedDimensions Moved from limitations
blockSoloLoginToProcountor limitations/login Moved from limitations. Earlier called login
sales sales No change
salesOrGroupInvoices newSalesInvoice Renamed
salesInvoiceSearch salesInvoiceSearch No change
personalSalesInvoicesOnly limitations/personalSalesInvoicesOnly Moved from limitations
customerRegister customerRegister No change
productRegister productRegister No change
purchases purchases No change
purchaseInvoices newPurchaseInvoice Renamed
purchaseInvoiceSearch searchInvoices Renamed
personalPurchaseInvoicesOnly limitations/personalPurchaseInvoicesOnly Moved from limitations
supplierRegister supplierRegister No change
productRegister productRegister No change
fixedAssetsRegister fixedAssetsRegister No change
travelAndExpenses ---didn't exist--- New
travelAndExpenseInvoices purchases/newTravelAndExpenseInvoice Moved from purchases. Earlier called newTravelAndExpenseInvoice
travelAndExpenseInvoiceSearch purchases/searchInvoices Moved from purchases. Earlier called searchInvoices
personalTravelAndExpenseInvoiceOnly limitations/personalTravelAndExpenseInvoiceOnly Moved from limitations
invoiceCirculation ---didn't exist--- New
verification purchases/verification Moved from purchases
approval paymentTransactions/approval Moved from paymentTransactions
personalApprovalsOrVerificationsOnly limitations/searchForPersonalApprovalsOnly Moved from limitations
salaries salaries No change
payroll payrollAccounting Renamed
personalSalariesOnly limitations/personalSalariesOnly Moved from limitations
personRegister personRegister No change
workingTimeTracking workingTimeTracking No change
personalWorkHourTrackingOnly limitations/personalWorkHourTrackingOnly Moved from limitations
payments paymentTransactions Renamed
payment payment No change
salaryPayments salaryPayments No change
markAsPaid markPaidElsewhere Renamed
directBankTransfer directBankTransfer No change
bankStatementAndReferencePayment bankStatementAndReferencePayment No change
paymentAllocation paymentAllocation No change
accounting ---didn't exist--- New
journalReceipts purchases/newJournalReceipt Moved from purchases. Earlier called newJournalReceipt
journalReceiptSearch purchases/searchInvoices Moved from purchases. Earlier called searchInvoices
personalJournalReceiptsOnly limitations/personalJournalReceiptsOnly Moved from limitations
closingOfAccountTools financialManagement/closingOfAccountsTool Moved from financialManagement
preventCreatingEditingInvoices limitations/onlyAllowAccountingViewing Moved from limitations. Earlier called onlyAllowAccountingViewing
accountingReports financialManagement/accountReporting Moved from financialManagement. Earlier called accountReporting
archive financialManagement/archive Moved from financialManagement
--doesn't exist--- financialManagement Removed
--doesn't exist--- limitations Removed



  • In GET /invoices and GET /invoices/{invoiceId} endpoints we have now added an optional field invoiceSumInfo to return invoice's total sum. This is supported for all receipt types except PERIODIC_TAX_RETURN, which doesn't support invoice rows. To get additional information on excludingVatTotal and vatSumTotal, please use GET /invoices/{invoiceId} endpoint.

    If the invoice has currency other than the one set for the environment (when field inAccountingCurrency is false), it returns sum in both the accounting and invoice currency.

Updated API reference documentation

  • Documentation for GET /invoices/personalapprovals and GET /invoices/personalverifications endpoints now correctly specifies that the types field is required (not type), and that it accepts multiple receipt types separated by a comma. Available values for types include PURCHASE_INVOICE, TRAVEL_INVOICE, and BILL_OF_CHARGES.
  • Unnecessary mandatory fields uriParams and/or uriInfo have been removed from several endpoints, which were added lately. NOTE only documentation was incorrect.
    • GET /attachments
    • GET /payments/directsalarypayments
    • GET /bankaccounts
    • GET /products/{productId}
    • GET /bankstatements
    • GET /referencepayments
    • GET /currencies/exchangerate
    • GET /webhooks
    • GET /factoringcontracts
    • GET /products
    • GET /invoices
    • GET /products/groups
    • GET /ledgerreceipts
    • GET /payments/errormessages
    • GET /payments
  • Some enum values were listed incorrectly lately – they either had Finnish translations or had duplicates or didn’t list the enum values. They have been corrected. NOTE only documentation was incorrect.
    • GET /products/{productId}
    • POST /products
    • PUT /products/{productId}
    • GET /company
    • GET /businesspartners/personaldetails
    • POST /payments/directbanktransfers
    • GET /payments
    • POST /payments
    • GET /payments/errormessages
    • GET /payments/{paymentId}
    • GET /users
  • In Examples page, extra information has been added in Calculating invoice sum section

Changes in version 24.06

Endpoints

  • From now on during error situations, following endpoints will no longer include the model field in their error responses. Instead, the field will provide the full JSON path to the invalid value.
    • POST /payments for invoice payment
    • POST /payments/directsalarypayments for direct salary payment
    • POST /payments/directbanktransfers for direct bank transfer
  • We have added a new endpoint GET /users/rights/old that will continue to return the old schema (similar to the current behavior of GET /users/rights). This endpoint will be available for three months until Procountor release version 93 (October 2024). This grace period allows integrators to adapt their systems and migrate to the new schema that will be returned by GET /users/rights in Procountor release version 90 (July 2024). Please check "Upcoming API breaking changes" section above.
  • If you do not have time to adjust to the breaking change that will be releaed in July, you can use this new endpoint GET /users/rights/old until it is removed in Procountor release version 93.
  • Updated API reference documentation

    • In API reference documentation version is no longer mentioned as required for POST /invoices endpoint. Please note that version is still required for PUT /invoices/{invoiceId} endpoint.
    • At the top of the API reference page, there is a new section on "Batch endpoints". This is only a reminder to the batch endpoints we already support.
    • At the end of the API reference page, Schemas are now sorted in alphabetical order A -> Z.

    Changes in version 24.05

    Endpoints

    • base_url and documentationfields from GET /status have been removed from all API versions.
    • We have added a new field procountorVersion that returns Procountor version in use in GET /status endpoint. e.g. "88.0.0".
    • GET /invoices/{invoiceId}, PUT /invoices/{invoiceId} and POST /invoices endpoints now support PURCHASE_ORDER in counterparty.email . Support has been added in all API versions.
    • POST/reports/generalledger/{id} now returns the proper response with default vatStatus when VAT status is empty. It no longer returns the 400 error.
    • Fixes to required user rights
      • To fetch invoices waiting for personal approvals via GET /invoices/personalapprovals endpoint, logged in user must have "All rights" to Approval in “Invoice circulation” in Management > Users and user rights. If not, API sends empty list in response.
      • To fetch invoices waiting for personal verifications via GET /invoices/personalverifications endpoint, logged in user must have "All rights" to Verification in “Invoice circulation” in Management > Users and user rights. If not, API sends empty list in response.
      • Even if the "Prevent creating new invoices and editing invoices page" limitation is in use in Management > Users and user rights, it's now possible to
        • Approve the invoice via PUT /invoices/{invoiceId}/approve, and
        • Mark invoice as paid via PUT /invoices/{invoiceId}/paymentevents/markpaid.
        • However, please note that adding or editing invoices is still not possible using the POST /invoices or PUT /invoices/{invoiceId} endpoints, respectively.

    Updates in API reference documentation

    • We have updated our API reference documentation by replacing the references to EXPENSE_INVOICE with BILL_OF_CHARGES.
    • In addition, the address field now correctly maps to the appropriate model and includes its own description in the following endpoints:
    Endpoints Description
    GET /businesspartners/{id}
    PUT /businesspartners/{id}
    PATCH /businesspartners/{id}
    POST /businesspartners
    • addressis mapped to BusinessPartnerAddress instead of Address
    • billingAddress is mapped to BusinessPartnerBillingAddress instead of Address
    • deliveryAddress is mapped to BusinessPartnerDeliveryAddress instead of Address
    In GET /businesspartners endpoint's response
    • billingAddress is mapped to BusinessPartnerBillingAddress instead of Address
    In GET /businesspartners​/personaldetails endpoint's response
    • address is mapped to PersonAddress instead of Address
    GET /invoices/{invoiceId}
    PUT /invoices/{invoiceId}
    POST /invoices
    • billingAddress is mapped to BusinessPartnerBillingAddress instead of Address
    • deliveryAddress is mapped to BusinessPartnerDeliveryAddress instead of Address
    • `counterParty.counterPartyAddress` is mapped to InvoiceCounterpartyAddress instead of Address
    In POST /payments/directbanktransfers
    and POST /payments endpoints request body
    • recipientNameAndAddress is mapped to PaymentRecipientNameAndAddress instead of Address
    • receiverBankNameAndAddress is mapped to PaymentReceiverBankNameAndAddress instead of Address
    • intermediaryBankNameAndAddress is mapped to PaymentIntermediaryBankNameAndAddressDTO instead of Address

    Changes in version 24.04

    Endpoints

    • We have added a new endpoint GET /invoices/personalverifications to fetch invoice ids waiting for verification from the currently logged in user, including those invoices where the user has been assigned as a substitute. Details of the returned invoice can be fetched from GET /invoices/{invoiceId}. This endpoint returns empty list
      • If the user doesn’t have any invoice to verify
      • Invoice circulation is disabled for all the supported invoice types (useForPurchaseInvoices and useForTravelAndExpenseInvoices are false in GET /company/invoicecirculation/settings)
      • If the user doesn't have "All rights" to verify (verification in PurchasesRights in GET users/rights)

    This endpoint supports required query parameter types, which accepts more than one type, separated by comma. Available values are PURCHASE_INVOICE,TRAVEL_INVOICE, BILL_OF_CHARGES. If the user doesn’t have required permission to the given invoice types, 403 error is returned.

    • We have also added a new endpoint GET /invoices/personalapprovals to fetch invoice ids waiting for approval from the currently logged in user, including those invoices where the user has been assigned as a substitute. Details of the returned invoice can be fetched from GET /invoices/{invoiceId}. This endpoint returns empty list
      • If the user doesn’t have any invoice to approve
      • Invoice circulation is disabled for all the supported invoice types (useForPurchaseInvoices and useForTravelAndExpenseInvoices are false in GET /company/invoicecirculation/settings)
      • If the user doesn't have "All rights" to approve (approval in PaymentTransactionsRights in GET users/rights)

    This endpoint supports required query parameter types, which accepts more than one type, separated by comma. Available values are PURCHASE_INVOICE,TRAVEL_INVOICE, BILL_OF_CHARGES. If the user doesn’t have required permission to the given invoice types, 403 error is returned.

    Others

    • API reference documentation has been updated
      • Endpoints that support batch requests, their ID parameter is now of type string and format multi
      • Endpoints that accept integer parameters, format of those parameters have been changed from int64 to int32

    This has been fixed for all API versions.

    Changes in version 24.03

    Endpoints

    • From now onwards following endpoints check whether usage settings (in Procountor UI: Management > Company info > Usage settings) to use cash discount is in use or not. If cash discount is not in use, API returns 400 error code when request is sent with cashDiscount. This affects all API versions.

      • POST /businesspartners
      • PUT /businesspartners/{id}
      • PATCH /businesspartners/{id}
    • GET/businesspartners/{id} and GET/invoices/{id} endpoints from now onwards do not return cashDiscount in BusinessPartnerPaymentInfo and PaymentInfo object respectively, when there is no cash discount or cash discount is not in use (in Usage settings). This affects all API versions.

    • In Swedish and Danish environments, GET /ledgerreceipts and GET /ledgerreceipts/{receiptId} endpoints now return optional serialNumber, if it exists. SerialNumber object consists of series and number.

    Others

    API Developers portal has been updated with own links for Sweden (e.g. Swedish Procountor API Terms of Use, General use and customer agreement terms, Partner program for Swedish software companies, Support and consultancy, Procountor customer service).

    Changes in version 24.02

    Endpoints

    • To ensure that only the latest invoice is updated and there are no multiple accounting pages for the same invoice, it is now mandatory to send the latest invoice version in version when calling PUT /invoices/{invoiceId} endpoint. Use GET /invoices or GET /invoices/{invoiceId} to obtain the latest invoice version. When trying to update invoice with an older invoice version, API now returns error code 400 with proper error message. Note this change applies only to the latest API version.

    Older release notes

    Older release notes can be found from their own page.

    Old release notes