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.
Currently available API versions
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 ensurecharset
parameter isn't sent inContent-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 byGET /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 usePUT /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.
- 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/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 code400
is returned with the errorPAYMENT_DATE_IS_AFTER_ENDING_SUPPORT_FOR_DANISH_ENVIRONMENTS
- In
GET /invoices/{invoiceId}/comments
endpoint inactive users are no longer listed as tagged users undertaggedUsersInfo
. PUT /invoices/{invoiceId}/comments/{commentId}/{userTagId}/read
endpoint has been renamed toPUT /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 sends400
error.- In
GET /dimensions
endpoint dimensions can now be filtered byname
andcodeName
. Also partial search is supported. Filtering result is returned in an array. - In
GET /invoices/{invoiceId}
endpoint invoice row with nullquantity
is no longer returned ininvoiceRows
.
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'spartnerId
for typePERSON
. - 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
andidentifier
in header.personNumber
,mainPersonGroup
,personGroupId
andincludeInactive
in url.
- Also pagination and sorting by id are supported.
- Partial search is supported for
name
,identifier
andpersonNumber
.
- Returns the list of persons with basic information:
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
andidentifierType
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 thetaggedUsers
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.
- In case a comment does not contain any tagged user, the response will not include the
- 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 sends400
error response when the same request is sent next time. - We have added
taggedUsersInfo
optional object in existing endpointGET /invoices/{invoiceId}/comments
to fetch information about the tagged users.taggedUsersInfo
containsnumTaggedUsers
andreadByAllTaggedUsers
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 therights
property. This change is applicable only to the latest API version. TheGET /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 acceptString
will accept one of these enum valuesNO_ACCESS
,VIEWING_RIGHTS
,ALL_RIGHTS
,NOT_ENABLED
. Please noteNO_RIGHTS
has been replaced byNO_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
andGET /invoices/{invoiceId}
endpoints we have now added an optional fieldinvoiceSumInfo
to return invoice's total sum. This is supported for all receipt types exceptPERIODIC_TAX_RETURN
, which doesn't support invoice rows. To get additional information onexcludingVatTotal
andvatSumTotal
, please useGET /invoices/{invoiceId}
endpoint.
If the invoice has currency other than the one set for the environment (when fieldinAccountingCurrency
isfalse
), it returns sum in both the accounting and invoice currency.
Updated API reference documentation
- Documentation for
GET /invoices/personalapprovals
andGET /invoices/personalverifications
endpoints now correctly specifies that thetypes
field is required (nottype
), and that it accepts multiple receipt types separated by a comma. Available values fortypes
includePURCHASE_INVOICE
,TRAVEL_INVOICE
, andBILL_OF_CHARGES
. - Unnecessary mandatory fields
uriParams
and/oruriInfo
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, thefield
will provide the full JSON path to the invalid value.POST /payments
for invoice paymentPOST /payments/directsalarypayments
for direct salary paymentPOST /payments/directbanktransfers
for direct bank transfer
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.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 forPOST /invoices
endpoint. Please note thatversion
is still required forPUT /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
anddocumentation
fields fromGET /status
have been removed from all API versions.- We have added a new field
procountorVersion
that returns Procountor version in use inGET /status
endpoint. e.g. "88.0.0". GET /invoices/{invoiceId}
,PUT /invoices/{invoiceId}
andPOST /invoices
endpoints now supportPURCHASE_ORDER
incounterparty.email
. Support has been added in all API versions.POST/reports/generalledger/{id}
now returns the proper response with defaultvatStatus
when VAT status is empty. It no longer returns the400
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
orPUT /invoices/{invoiceId}
endpoints, respectively.
- Approve the invoice via
- To fetch invoices waiting for personal approvals via
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} |
|
In GET /businesspartners endpoint's response |
|
In GET /businesspartners​/personaldetails endpoint's response |
|
GET /invoices/{invoiceId} |
|
In POST /payments/directbanktransfers and POST /payments endpoints request body |
|
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 fromGET /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
anduseForTravelAndExpenseInvoices
arefalse
inGET /company/invoicecirculation/settings
) - If the user doesn't have "All rights" to verify (
verification
inPurchasesRights
inGET 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 fromGET /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
anduseForTravelAndExpenseInvoices
arefalse
inGET /company/invoicecirculation/settings
) - If the user doesn't have "All rights" to approve (
approval
inPaymentTransactionsRights
inGET 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
andformat
multi
- Endpoints that accept
integer
parameters,format
of those parameters have been changed fromint64
toint32
- Endpoints that support batch requests, their ID parameter is now of
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 withcashDiscount
. This affects all API versions.POST /businesspartners
PUT /businesspartners/{id}
PATCH /businesspartners/{id}
-
GET/businesspartners/{id}
andGET/invoices/{id}
endpoints from now onwards do not returncashDiscount
inBusinessPartnerPaymentInfo
andPaymentInfo
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
andGET /ledgerreceipts/{receiptId}
endpoints now return optionalserialNumber
, if it exists.SerialNumber
object consists ofseries
andnumber
.
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 callingPUT /invoices/{invoiceId}
endpoint. UseGET /invoices
orGET /invoices/{invoiceId}
to obtain the latest invoice version. When trying to update invoice with an older invoice version, API now returns error code400
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.