Amounts and rounding

Fonoa uses high precision amounts

Fonoa’s transaction api utilizes high precision numbers, supporting up to nine decimal places, across all invoice value fields. High precision ensures the accuracy of all calculations related to totals, taxes, and discounts. Even minor discrepancies in these values can result in significant errors when dealing with large volumes of transactions. Furthermore, numerous industries and financial regulations mandate precise pricing to accurately reflect the true cost of goods and services. Employing high precision numbers facilitates compliance with these standards. Additionally, in financial transactions, rounding errors can accumulate and cause discrepancies. By utilizing high precision numbers, we minimize the impact of rounding, thereby ensuring that all invoice amounts are correct and reliable.

Fonoa’s transactions API for invoicing and real-time invoice reporting supports up to 9 decimal places to ensure high precision in financial transactions. However, some real-time tax reporting formats support decimals with lower precision, for example 2. To comply with the technical requirements set by the relevant tax authority, we perform rounding to the required decimal places for all taxable and invoice amounts.

⚠️ Warning

Please be aware that our calculated rounding might differ from your totals if the amounts provided in your API request are not already rounded to the relevant decimal places. This ensures that our reports are accurate and fully compliant with the regulatory standards in the relevant country. If you have any questions or need further clarification, please do not hesitate to contact our support team.

Legacy

Before adapting to decimals, Fonoa API used integer amounts representing the smallest unit of a currency. If you are still using integer amounts and want to migrate to decimals, please read the next section.

Migrate from integer to decimal amounts

To enable smooth transition to usage of decimal amounts, Fonoa introduced a new boolean field called "decimal_amounts". Set it to true once ready to pass decimal amounts (for example "unit_price": 130.13152). If you are polling for a result using the Get Transaction endpoint, you can pass the query parameter decimal_amounts=true.