fonoa
Reporting

Report transactions to tax authorities in real-time

Automate the process of reporting transactions to local tax authorities in real-time and stay compliant with reporting regulations across the world.

fonoa
Reporting

Report transactions to tax authorities in real-time

Automate the process of reporting transactions to local tax authorities in real-time and stay compliant with reporting regulations across the world.

CHALLENGES

Avoid fines from local tax authorities

Understanding real-time reporting

Various countries around the world require sales transactions between sellers and customers to be reported electronically to the local tax authorities either instantly or shortly after they take place.

Requirements are very country-specific

For transaction reporting purposes, companies need to provide mandatory data in a specific format and deliver it via a specific communication protocol, for each country.

Dealing with local IT service providers is hard

If companies choose a different provider in each country, their scaling, security and pricing pains keep mounting.

Risk of fines and business closure

Not real-time reporting transactions when mandatory carries risks of fines and closure of your business by local tax authorities.

The easiest way to report transactions in real-time globally

Report transactions

Report sales transactions to tax authorities seamlessly

Simplify the complex

We collect all relevant data points required in the reporting process to the tax authorities

Single integration

Integrate with us once, and have direct access to tax authorities across the world

Avoid non-compliance

Eliminate the risk of fines / closure from local tax authorities for non-compliance

HOW IT WORKS

Access Fonoa Reporting via our REST API

1

What we receive from you

Our API receives data about your transaction, and any additional country-specific datapoints.

2

Our API does the work

We are linked with tax authorities across the world and report them transaction information in real-time.

3

What you get from Fonoa Reporting

As a result, you get a validation that your transactions are reported to relevant tax authorities in real-time, and that you are ready to issue an invoice for those transactions.

PLUG & PLAY

Connect to our API in minutes

Create your own custom use case with
Fonoa REST API - our rich prebuilt set of functions, tailored specifically to solve complex tax challenges  businesses face when transacting online.

See documentation
fonoa
Reporting

curl --request POST \
 --url https://api-demo.fonoatech.com/Lookup/v1/Validations \
 --header 'Accept: application/json' \
 --header 'Content-Type: application/json' \
 --data '{"country_iso":"au","tin":"30616935623","check_online":true}'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Lookup/v1/Validations';

let options = {
 method: 'POST',
 headers: {Accept: 'application/json', 'Content-Type': 'application/json'},
 body: JSON.stringify({country_iso: 'au', tin: '30616935623', check_online: true})
};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Lookup/v1/Validations")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Accept"] = 'application/json'
request["Content-Type"] = 'application/json'
request.body = "{\"country_iso\":\"au\",\"tin\":\"30616935623\",\"check_online\":true}"

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Lookup/v1/Validations", {
 "method": "POST",
 "headers": {
   "Accept": "application/json",
   "Content-Type": "application/json"
 },
 "body": "{\"country_iso\":\"au\",\"tin\":\"30616935623\",\"check_online\":true}"
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Lookup/v1/Validations"

payload = {
   "country_iso": "au",
   "tin": "30616935623",
   "check_online": True
}
headers = {
   "Accept": "application/json",
   "Content-Type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)

RUNRUNRUNRUNRUN

curl --request GET \
 --url https://api-demo.fonoatech.com/Lookup/v1/Validations/ \
 --header 'Accept: application/json'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Lookup/v1/Validations/';

let options = {method: 'GET', headers: {Accept: 'application/json'}};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Lookup/v1/Validations/")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Lookup/v1/Validations/", {
 "method": "GET",
 "headers": {
   "Accept": "application/json"
 }
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Lookup/v1/Validations/"

headers = {"Accept": "application/json"}

response = requests.request("GET", url, headers=headers)

print(response.text)

RUN

curl --request GET \
 --url https://api-demo.fonoatech.com/Lookup/v1/Validations/ServiceStatuses \
 --header 'Accept: application/json'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Lookup/v1/Validations/ServiceStatuses';

let options = {method: 'GET', headers: {Accept: 'application/json'}};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Lookup/v1/Validations/ServiceStatuses")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Lookup/v1/Validations/ServiceStatuses", {
 "method": "GET",
 "headers": {
   "Accept": "application/json"
 }
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Lookup/v1/Validations/ServiceStatuses"

headers = {"Accept": "application/json"}

response = requests.request("GET", url, headers=headers)

print(response.text)

RUN
Request a validation response
x

{
 "id": "2e0f83abcf22c8767cac7ae100f4bf40"
 "statusQueryGetUri": "https://api.fonoatech.com/Lookup/v1/Validations/2e0f83abcf22c8767cac7ae100f4bf40"
}

Get a validation response
x

{
  "id": "affa65ba12c34bb99c776ecf665b5b11"
  "status": "completed"
   "response": {
    "tin": "123123"
    "formatted_tin": "123-123"
    "tin_local_name": "ABN"
    "format_valid": true
    "checksum_valid": true
    "tin_exists_online": true
    "tin_active_online": true
    "company_name": "ACME"
    "error_code": 0
    "errors": [...]
  }
}

Check the status of the service response
x

{
 "databases": [
   0: {
    "country_iso": "hr"
    "online": true
    "check_time_unix": 1606911185
  }
 ]
}

curl --request POST \
 --url https://api-demo.fonoatech.com/Tax/v1/RevenueChecks \
 --header 'Accept: application/json' \
 --header 'Content-Type: application/json' \
 --data '{"parameters":{"customer_country":"pt","supplier_tin":"de123456789","action":"write","supplier_revenue_cc":1254.03}}'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Tax/v1/RevenueChecks';

let options = {
 method: 'POST',
 headers: {Accept: 'application/json', 'Content-Type': 'application/json'},
 body: JSON.stringify({
   parameters: {
     customer_country: 'pt',
     supplier_tin: 'de123456789',
     action: 'write',
     supplier_revenue_cc: 1254.03
   }
 })
};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Tax/v1/RevenueChecks")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Accept"] = 'application/json'
request["Content-Type"] = 'application/json'
request.body = "{\"parameters\":{\"customer_country\":\"pt\",\"supplier_tin\":\"de123456789\",\"action\":\"write\",\"supplier_revenue_cc\":1254.03}}"

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Tax/v1/RevenueChecks", {
 "method": "POST",
 "headers": {
   "Accept": "application/json",
   "Content-Type": "application/json"
 },
 "body": "{\"parameters\":{\"customer_country\":\"pt\",\"supplier_tin\":\"de123456789\",\"action\":\"write\",\"supplier_revenue_cc\":1254.03}}"
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Tax/v1/RevenueChecks"

payload = {"parameters": {
       "customer_country": "pt",
       "supplier_tin": "de123456789",
       "action": "write",
       "supplier_revenue_cc": 1254.03
   }}
headers = {
   "Accept": "application/json",
   "Content-Type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)

RUN

curl --request GET \
 --url https://api-demo.fonoatech.com/Tax/v1/RevenueChecks/ \
 --header 'Accept: application/json'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Tax/v1/RevenueChecks/';

let options = {method: 'GET', headers: {Accept: 'application/json'}};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Tax/v1/RevenueChecks/")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Tax/v1/RevenueChecks/", {
 "method": "GET",
 "headers": {
   "Accept": "application/json"
 }
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Tax/v1/RevenueChecks/"

headers = {"Accept": "application/json"}

response = requests.request("GET", url, headers=headers)

print(response.text)

RUN

curl --request POST \
 --url https://api-demo.fonoatech.com/Tax/v1/Calculations \
 --header 'Accept: application/json' \
 --header 'Content-Type: application/json' \
 --data '{"parameters":{"customer_country":"es","supplier_country":"de","supplier_tin":"de123456789","transaction_value":1000,"transaction_service_category":"eservice","transaction_value_includes_tax":true,"increment_supplier_revenue":true}}'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Tax/v1/Calculations';

let options = {
 method: 'POST',
 headers: {Accept: 'application/json', 'Content-Type': 'application/json'},
 body: JSON.stringify({
   parameters: {
     customer_country: 'es',
     supplier_country: 'de',
     supplier_tin: 'de123456789',
     transaction_value: 1000,
     transaction_service_category: 'eservice',
     transaction_value_includes_tax: true,
     increment_supplier_revenue: true
   }
 })
};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Tax/v1/Calculations")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Accept"] = 'application/json'
request["Content-Type"] = 'application/json'
request.body = "{\"parameters\":{\"customer_country\":\"es\",\"supplier_country\":\"de\",\"supplier_tin\":\"de123456789\",\"transaction_value\":1000,\"transaction_service_category\":\"eservice\",\"transaction_value_includes_tax\":true,\"increment_supplier_revenue\":true}}"

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Tax/v1/Calculations", {
 "method": "POST",
 "headers": {
   "Accept": "application/json",
   "Content-Type": "application/json"
 },
 "body": "{\"parameters\":{\"customer_country\":\"es\",\"supplier_country\":\"de\",\"supplier_tin\":\"de123456789\",\"transaction_value\":1000,\"transaction_service_category\":\"eservice\",\"transaction_value_includes_tax\":true,\"increment_supplier_revenue\":true}}"
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Tax/v1/Calculations"

payload = {"parameters": {
       "customer_country": "es",
       "supplier_country": "de",
       "supplier_tin": "de123456789",
       "transaction_value": 1000,
       "transaction_service_category": "eservice",
       "transaction_value_includes_tax": True,
       "increment_supplier_revenue": True
   }}
headers = {
   "Accept": "application/json",
   "Content-Type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)

RUN

curl --request GET \
 --url https://api-demo.fonoatech.com/Tax/v1/Calculations/ \
 --header 'Accept: application/json'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Tax/v1/Calculations/';

let options = {method: 'GET', headers: {Accept: 'application/json'}};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Tax/v1/Calculations/")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Tax/v1/Calculations/", {
 "method": "GET",
 "headers": {
   "Accept": "application/json"
 }
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Tax/v1/Calculations/"

headers = {"Accept": "application/json"}

response = requests.request("GET", url, headers=headers)

print(response.text)

RUN
Request a revenue check response
x

{
 "id": "2e0f83ae100f4bf4bcf22c8767cac7a0"
 "statusQueryGetUri": "https://api.fonoatech.com/Tax/v1/RevenueCheck/2e0f83ae100f4bf4bcf22c8767cac7a0"
}

Get a revenue check response
x

{
   "id": "2e0f83ae100f4bf4bcf22c8767cac7a0",
   "status": "completed",
   "response": {
       "input": {
           "customer_country": "pt",
           "supplier_tin": "de123456789",
           "action": "write",
           "supplier_revenue_cc": 1254.03
       },
       "result": {
           "supplier_revenue_cc": 1254.03
       },
       "errors": [
           0: "string"
        ]
       "uuid": "2e0f83ae100f4bf4bcf22c8767cac7a0"
   }
}

Request a tax calculation response
x

{
 "id":"2e0f83ae100f4bf4bcf22c8767cac7a0"
 "statusQueryGetUri":"https://api.fonoatech.com/Tax/v1/Calculations/2e0f83ae100f4bf4bcf22c8767cac7a0"
}

Get a tax calculation response
x

{
 "id": "2e0f83ae100f4bf4bcf22c8767cac7a0"
 "status": "completed"
  "response": {
   "input": {
    "customer_country": "es"
    "supplier_country": "de"
    "supplier_tin": "de123456789"
    "transaction_value": 1000
    "customer_country_region": "string"
    "transaction_service_category": "eservice"
    "transaction_value_includes_tax": true
    "increment_supplier_revenue": true
  }
   "result": {
    "supplier_revenue_threshold_exceeded": true
    "transaction_tax_rate": 0.23
    "transaction_value_net": 101.71
    "transaction_value_gross": 125.1
    "transaction_tax_amount": 23.39
    "transaction_currency": "eur"
    "tax_local_name": "IVA"
    "tax_type": "VAT"
    "transaction_taxable": true
    "b2c_price_inclusive_tax": true
    "type": "string"
  }
   "errors":[
    0: "string"
  ]
  "uuid": "2e0f83ae100f4bf4bcf22c8767cac7a0"
 }
}

curl --request POST \
 --url https://api-demo.fonoatech.com/Invoicing/v1/Invoices \
 --header 'Accept: application/json' \
 --header 'Content-Type: application/json' \
 --data '{"meta":{"language_code":"en","country_code":"en","business_model":"b2b","tax_type":"vat","currency_code":"eur","invoice_number":"1","pdf_response":true,"html_response":false},"supplier":{"company_name":"Company X","address":"Address in Germany","country":"Germany","tin":"de123456789"},"customer":{"company_name":"Company Y","address":"Address in Belgium","country":"Belgium","tin":"be12345678"},"invoice":{"delivery_date":"2021-01-15T11:59:59+00:00","payment_type":"debit card","items":[{"item_number":1,"product_name":"Delivery service","quantity":1,"unit_of_measure":"pcs","unit_price":10,"tax_rate":19,"net_price":10}],"total_net_amount":10,"discount":0,"total_tax_amount":1.9,"total_amount":11.9}}'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Invoicing/v1/Invoices';

let options = {
 method: 'POST',
 headers: {Accept: 'application/json', 'Content-Type': 'application/json'},
 body: JSON.stringify({
   meta: {
     language_code: 'en',
     country_code: 'en',
     business_model: 'b2b',
     tax_type: 'vat',
     currency_code: 'eur',
     invoice_number: '1',
     pdf_response: true,
     html_response: false
   },
   supplier: {
     company_name: 'Company X',
     address: 'Address in Germany',
     country: 'Germany',
     tin: 'de123456789'
   },
   customer: {
     company_name: 'Company Y',
     address: 'Address in Belgium',
     country: 'Belgium',
     tin: 'be12345678'
   },
   invoice: {
     delivery_date: '2021-01-15T11:59:59+00:00',
     payment_type: 'debit card',
     items: [
       {
         item_number: 1,
         product_name: 'Delivery service',
         quantity: 1,
         unit_of_measure: 'pcs',
         unit_price: 10,
         tax_rate: 19,
         net_price: 10
       }
     ],
     total_net_amount: 10,
     discount: 0,
     total_tax_amount: 1.9,
     total_amount: 11.9
   }
 })
};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Invoicing/v1/Invoices")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Accept"] = 'application/json'
request["Content-Type"] = 'application/json'
request.body = "{\"meta\":{\"language_code\":\"en\",\"country_code\":\"en\",\"business_model\":\"b2b\",\"tax_type\":\"vat\",\"currency_code\":\"eur\",\"invoice_number\":\"1\",\"pdf_response\":true,\"html_response\":false},\"supplier\":{\"company_name\":\"Company X\",\"address\":\"Address in Germany\",\"country\":\"Germany\",\"tin\":\"de123456789\"},\"customer\":{\"company_name\":\"Company Y\",\"address\":\"Address in Belgium\",\"country\":\"Belgium\",\"tin\":\"be12345678\"},\"invoice\":{\"delivery_date\":\"2021-01-15T11:59:59+00:00\",\"payment_type\":\"debit card\",\"items\":[{\"item_number\":1,\"product_name\":\"Delivery service\",\"quantity\":1,\"unit_of_measure\":\"pcs\",\"unit_price\":10,\"tax_rate\":19,\"net_price\":10}],\"total_net_amount\":10,\"discount\":0,\"total_tax_amount\":1.9,\"total_amount\":11.9}}"

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Invoicing/v1/Invoices", {
 "method": "POST",
 "headers": {
   "Accept": "application/json",
   "Content-Type": "application/json"
 },
 "body": "{\"meta\":{\"language_code\":\"en\",\"country_code\":\"en\",\"business_model\":\"b2b\",\"tax_type\":\"vat\",\"currency_code\":\"eur\",\"invoice_number\":\"1\",\"pdf_response\":true,\"html_response\":false},\"supplier\":{\"company_name\":\"Company X\",\"address\":\"Address in Germany\",\"country\":\"Germany\",\"tin\":\"de123456789\"},\"customer\":{\"company_name\":\"Company Y\",\"address\":\"Address in Belgium\",\"country\":\"Belgium\",\"tin\":\"be12345678\"},\"invoice\":{\"delivery_date\":\"2021-01-15T11:59:59+00:00\",\"payment_type\":\"debit card\",\"items\":[{\"item_number\":1,\"product_name\":\"Delivery service\",\"quantity\":1,\"unit_of_measure\":\"pcs\",\"unit_price\":10,\"tax_rate\":19,\"net_price\":10}],\"total_net_amount\":10,\"discount\":0,\"total_tax_amount\":1.9,\"total_amount\":11.9}}"
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Invoicing/v1/Invoices"

payload = {
   "meta": {
       "language_code": "en",
       "country_code": "en",
       "business_model": "b2b",
       "tax_type": "vat",
       "currency_code": "eur",
       "invoice_number": "1",
       "pdf_response": True,
       "html_response": False
   },
   "supplier": {
       "company_name": "Company X",
       "address": "Address in Germany",
       "country": "Germany",
       "tin": "de123456789"
   },
   "customer": {
       "company_name": "Company Y",
       "address": "Address in Belgium",
       "country": "Belgium",
       "tin": "be12345678"
   },
   "invoice": {
       "delivery_date": "2021-01-15T11:59:59+00:00",
       "payment_type": "debit card",
       "items": [
           {
               "item_number": 1,
               "product_name": "Delivery service",
               "quantity": 1,
               "unit_of_measure": "pcs",
               "unit_price": 10,
               "tax_rate": 19,
               "net_price": 10
           }
       ],
       "total_net_amount": 10,
       "discount": 0,
       "total_tax_amount": 1.9,
       "total_amount": 11.9
   }
}
headers = {
   "Accept": "application/json",
   "Content-Type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)

RUN

curl --request GET \
 --url https://api-demo.fonoatech.com/Invoicing/v1/Invoices/ \
 --header 'Accept: application/json'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Invoicing/v1/Invoices/';

let options = {method: 'GET', headers: {Accept: 'application/json'}};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Invoicing/v1/Invoices/")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Invoicing/v1/Invoices/", {
 "method": "GET",
 "headers": {
   "Accept": "application/json"
 }
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Invoicing/v1/Invoices/"

headers = {"Accept": "application/json"}

response = requests.request("GET", url, headers=headers)

print(response.text)

RUN
Request an invoice response
x

{
 "id":
 "khu434agqxt4nt3s0oymhcnrdbdgh27i1603725131876xhs8j8jh9thdx0mhgyvz06g2rjfntgd9"
 "statusQueryGetUri":
 "https://api.fonoatech.com/Invoicing/v1/Invoices/khu434agqxt4nt3s0oymhcnrdbdgh27i1603725131876xhs8j8jh9thdx0mhgyvz06g2rjfntgd9"
}

Get an invoice response
x

 {
  "id": "478dbf7f6aef4ed68d9875ed932a3545"
  "status": "Completed"
  "message": "string"
  "base64_pdf": "JVBERi0xLjQKM...DA3CiUlRU9GCg=="
  "base64_html": "PGh0bWw+CjZW...vZHk+CjwvaHRtbD4K"
  "created": "2020-10-28T10:24:28.2676206+00:00"
}

curl --request POST \
 --url https://api-demo.fonoatech.com/Onboarding/v1/Companies \
 --header 'Accept: application/json' \
 --header 'Content-Type: application/json' \
 --data '{"meta":{"country_code":"de","language_code":"de"},"general":{"company_name":"Company X","company_number":"de123456789","email":"office@companyx.de","website":"www.companyx.de","representative_name":"Klaus D.","representative_email":"klaus@companyx.de"},"specific":{"any_country_specific_field":"1"},"location":{"country_code":"de","province":"Bavaria","city":"Munich","postal_code":"80331","street":"Street in Munich","number":"12"},"ta_info":{"ta_username":"companyx","ta_password":"companyx123!","ta_certificate_base64":"c27485a2ec3d4dc2b53ccf838ac396f9","ta_certificate_password":"Vc?z9\\%Nv5"},"tax_info":{"tin":"de987654321","vat_number":"de123456789"}}'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Onboarding/v1/Companies';

let options = {
 method: 'POST',
 headers: {Accept: 'application/json', 'Content-Type': 'application/json'},
 body: JSON.stringify({
   meta: {country_code: 'de', language_code: 'de'},
   general: {
     company_name: 'Company X',
     company_number: 'de123456789',
     email: 'office@companyx.de',
     website: 'www.companyx.de',
     representative_name: 'Klaus D.',
     representative_email: 'klaus@companyx.de'
   },
   specific: {any_country_specific_field: '1'},
   location: {
     country_code: 'de',
     province: 'Bavaria',
     city: 'Munich',
     postal_code: '80331',
     street: 'Street in Munich',
     number: '12'
   },
   ta_info: {
     ta_username: 'companyx',
     ta_password: 'companyx123!',
     ta_certificate_base64: 'c27485a2ec3d4dc2b53ccf838ac396f9',
     ta_certificate_password: 'Vc?z9\%Nv5'
   },
   tax_info: {tin: 'de987654321', vat_number: 'de123456789'}
 })
};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Onboarding/v1/Companies")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Accept"] = 'application/json'
request["Content-Type"] = 'application/json'
request.body = "{\"meta\":{\"country_code\":\"de\",\"language_code\":\"de\"},\"general\":{\"company_name\":\"Company X\",\"company_number\":\"de123456789\",\"email\":\"office@companyx.de\",\"website\":\"www.companyx.de\",\"representative_name\":\"Klaus D.\",\"representative_email\":\"klaus@companyx.de\"},\"specific\":{\"any_country_specific_field\":\"1\"},\"location\":{\"country_code\":\"de\",\"province\":\"Bavaria\",\"city\":\"Munich\",\"postal_code\":\"80331\",\"street\":\"Street in Munich\",\"number\":\"12\"},\"ta_info\":{\"ta_username\":\"companyx\",\"ta_password\":\"companyx123!\",\"ta_certificate_base64\":\"c27485a2ec3d4dc2b53ccf838ac396f9\",\"ta_certificate_password\":\"Vc?z9\\\\%Nv5\"},\"tax_info\":{\"tin\":\"de987654321\",\"vat_number\":\"de123456789\"}}"

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Onboarding/v1/Companies", {
 "method": "POST",
 "headers": {
   "Accept": "application/json",
   "Content-Type": "application/json"
 },
 "body": "{\"meta\":{\"country_code\":\"de\",\"language_code\":\"de\"},\"general\":{\"company_name\":\"Company X\",\"company_number\":\"de123456789\",\"email\":\"office@companyx.de\",\"website\":\"www.companyx.de\",\"representative_name\":\"Klaus D.\",\"representative_email\":\"klaus@companyx.de\"},\"specific\":{\"any_country_specific_field\":\"1\"},\"location\":{\"country_code\":\"de\",\"province\":\"Bavaria\",\"city\":\"Munich\",\"postal_code\":\"80331\",\"street\":\"Street in Munich\",\"number\":\"12\"},\"ta_info\":{\"ta_username\":\"companyx\",\"ta_password\":\"companyx123!\",\"ta_certificate_base64\":\"c27485a2ec3d4dc2b53ccf838ac396f9\",\"ta_certificate_password\":\"Vc?z9\\\\%Nv5\"},\"tax_info\":{\"tin\":\"de987654321\",\"vat_number\":\"de123456789\"}}"
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Onboarding/v1/Companies"

payload = {
   "meta": {
       "country_code": "de",
       "language_code": "de"
   },
   "general": {
       "company_name": "Company X",
       "company_number": "de123456789",
       "email": "office@companyx.de",
       "website": "www.companyx.de",
       "representative_name": "Klaus D.",
       "representative_email": "klaus@companyx.de"
   },
   "specific": {"any_country_specific_field": "1"},
   "location": {
       "country_code": "de",
       "province": "Bavaria",
       "city": "Munich",
       "postal_code": "80331",
       "street": "Street in Munich",
       "number": "12"
   },
   "ta_info": {
       "ta_username": "companyx",
       "ta_password": "companyx123!",
       "ta_certificate_base64": "c27485a2ec3d4dc2b53ccf838ac396f9",
       "ta_certificate_password": "Vc?z9\%Nv5"
   },
   "tax_info": {
       "tin": "de987654321",
       "vat_number": "de123456789"
   }
}
headers = {
   "Accept": "application/json",
   "Content-Type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)

RUN

curl --request GET \
 --url https://api-demo.fonoatech.com/Onboarding/v1/Companies/id \
 --header 'Accept: application/json'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Onboarding/v1/Companies/id';

let options = {method: 'GET', headers: {Accept: 'application/json'}};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Onboarding/v1/Companies/id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Onboarding/v1/Companies/id", {
 "method": "GET",
 "headers": {
   "Accept": "application/json"
 }
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Onboarding/v1/Companies/id"

headers = {"Accept": "application/json"}

response = requests.request("GET", url, headers=headers)

print(response.text)

RUN

curl --request POST \
 --url https://api-demo.fonoatech.com/Reporting/v1/Transactions \
 --header 'Accept: application/json' \
 --header 'Content-Type: application/json' \
 --data '{"meta":{"language_code":"en","country_code":"de","currency_code":"eur","payment_type":"cash","invoice_type":"debit","reference_invoice_uid":"c27485a2ec3d4dc2b53ccf838ac396f9","reference_invoice_number":"1"},"supplier":{"uid":"vnnslef7f6aef4ed68d9875ed932jlfrp","tin":"de123456789"},"customer":{"uid":"fsopdfafpsfjsldfjslfsmgbmpgpwooir","pin":"87654321","tin":"cz12345678"},"operator":{"uid":"c27485a2ec3d4dc2b53ccf838ac396f9","pin":"001122334","tin":"de123456789"},"terminal":{"uid":"292d6e8862ed4e7584d1a602d074aa71"},"invoice":{"delivery_date":"2021-01-15T01:00:00+00:00","items":[{"item_number":1,"product_name":"Delivery service","quantity":1,"unit_of_measure":"pcs","unit_price":10,"tax_rate":19,"net_price":10}],"total_net_amount":10,"discount":0,"total_tax_amount":1.9,"total_amount":11.9}}'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Reporting/v1/Transactions';

let options = {
 method: 'POST',
 headers: {Accept: 'application/json', 'Content-Type': 'application/json'},
 body: JSON.stringify({
   meta: {
     language_code: 'en',
     country_code: 'de',
     currency_code: 'eur',
     payment_type: 'cash',
     invoice_type: 'debit',
     reference_invoice_uid: 'c27485a2ec3d4dc2b53ccf838ac396f9',
     reference_invoice_number: '1'
   },
   supplier: {uid: 'vnnslef7f6aef4ed68d9875ed932jlfrp', tin: 'de123456789'},
   customer: {uid: 'fsopdfafpsfjsldfjslfsmgbmpgpwooir', pin: '87654321', tin: 'cz12345678'},
   operator: {uid: 'c27485a2ec3d4dc2b53ccf838ac396f9', pin: '001122334', tin: 'de123456789'},
   terminal: {uid: '292d6e8862ed4e7584d1a602d074aa71'},
   invoice: {
     delivery_date: '2021-01-15T01:00:00+00:00',
     items: [
       {
         item_number: 1,
         product_name: 'Delivery service',
         quantity: 1,
         unit_of_measure: 'pcs',
         unit_price: 10,
         tax_rate: 19,
         net_price: 10
       }
     ],
     total_net_amount: 10,
     discount: 0,
     total_tax_amount: 1.9,
     total_amount: 11.9
   }
 })
};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Reporting/v1/Transactions")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Accept"] = 'application/json'
request["Content-Type"] = 'application/json'
request.body = "{\"meta\":{\"language_code\":\"en\",\"country_code\":\"de\",\"currency_code\":\"eur\",\"payment_type\":\"cash\",\"invoice_type\":\"debit\",\"reference_invoice_uid\":\"c27485a2ec3d4dc2b53ccf838ac396f9\",\"reference_invoice_number\":\"1\"},\"supplier\":{\"uid\":\"vnnslef7f6aef4ed68d9875ed932jlfrp\",\"tin\":\"de123456789\"},\"customer\":{\"uid\":\"fsopdfafpsfjsldfjslfsmgbmpgpwooir\",\"pin\":\"87654321\",\"tin\":\"cz12345678\"},\"operator\":{\"uid\":\"c27485a2ec3d4dc2b53ccf838ac396f9\",\"pin\":\"001122334\",\"tin\":\"de123456789\"},\"terminal\":{\"uid\":\"292d6e8862ed4e7584d1a602d074aa71\"},\"invoice\":{\"delivery_date\":\"2021-01-15T01:00:00+00:00\",\"items\":[{\"item_number\":1,\"product_name\":\"Delivery service\",\"quantity\":1,\"unit_of_measure\":\"pcs\",\"unit_price\":10,\"tax_rate\":19,\"net_price\":10}],\"total_net_amount\":10,\"discount\":0,\"total_tax_amount\":1.9,\"total_amount\":11.9}}"

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Reporting/v1/Transactions", {
 "method": "POST",
 "headers": {
   "Accept": "application/json",
   "Content-Type": "application/json"
 },
 "body": "{\"meta\":{\"language_code\":\"en\",\"country_code\":\"de\",\"currency_code\":\"eur\",\"payment_type\":\"cash\",\"invoice_type\":\"debit\",\"reference_invoice_uid\":\"c27485a2ec3d4dc2b53ccf838ac396f9\",\"reference_invoice_number\":\"1\"},\"supplier\":{\"uid\":\"vnnslef7f6aef4ed68d9875ed932jlfrp\",\"tin\":\"de123456789\"},\"customer\":{\"uid\":\"fsopdfafpsfjsldfjslfsmgbmpgpwooir\",\"pin\":\"87654321\",\"tin\":\"cz12345678\"},\"operator\":{\"uid\":\"c27485a2ec3d4dc2b53ccf838ac396f9\",\"pin\":\"001122334\",\"tin\":\"de123456789\"},\"terminal\":{\"uid\":\"292d6e8862ed4e7584d1a602d074aa71\"},\"invoice\":{\"delivery_date\":\"2021-01-15T01:00:00+00:00\",\"items\":[{\"item_number\":1,\"product_name\":\"Delivery service\",\"quantity\":1,\"unit_of_measure\":\"pcs\",\"unit_price\":10,\"tax_rate\":19,\"net_price\":10}],\"total_net_amount\":10,\"discount\":0,\"total_tax_amount\":1.9,\"total_amount\":11.9}}"
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Reporting/v1/Transactions"

payload = {
   "meta": {
       "language_code": "en",
       "country_code": "de",
       "currency_code": "eur",
       "payment_type": "cash",
       "invoice_type": "debit",
       "reference_invoice_uid": "c27485a2ec3d4dc2b53ccf838ac396f9",
       "reference_invoice_number": "1"
   },
   "supplier": {
       "uid": "vnnslef7f6aef4ed68d9875ed932jlfrp",
       "tin": "de123456789"
   },
   "customer": {
       "uid": "fsopdfafpsfjsldfjslfsmgbmpgpwooir",
       "pin": "87654321",
       "tin": "cz12345678"
   },
   "operator": {
       "uid": "c27485a2ec3d4dc2b53ccf838ac396f9",
       "pin": "001122334",
       "tin": "de123456789"
   },
   "terminal": {"uid": "292d6e8862ed4e7584d1a602d074aa71"},
   "invoice": {
       "delivery_date": "2021-01-15T01:00:00+00:00",
       "items": [
           {
               "item_number": 1,
               "product_name": "Delivery service",
               "quantity": 1,
               "unit_of_measure": "pcs",
               "unit_price": 10,
               "tax_rate": 19,
               "net_price": 10
           }
       ],
       "total_net_amount": 10,
       "discount": 0,
       "total_tax_amount": 1.9,
       "total_amount": 11.9
   }
}
headers = {
   "Accept": "application/json",
   "Content-Type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)

RUN

curl --request GET \
 --url https://api-demo.fonoatech.com/Reporting/v1/Transactions/id \
 --header 'Accept: application/json'

const fetch = require('node-fetch');

let url = 'https://api-demo.fonoatech.com/Reporting/v1/Transactions/id';

let options = {method: 'GET', headers: {Accept: 'application/json'}};

fetch(url, options)
 .then(res => res.json())
 .then(json => console.log(json))
 .catch(err => console.error('error:' + err));

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api-demo.fonoatech.com/Reporting/v1/Transactions/id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'

response = http.request(request)
puts response.read_body

fetch("https://api-demo.fonoatech.com/Reporting/v1/Transactions/id", {
 "method": "GET",
 "headers": {
   "Accept": "application/json"
 }
})
.then(response => {
 console.log(response);
})
.catch(err => {
 console.error(err);
});

import requests

url = "https://api-demo.fonoatech.com/Reporting/v1/Transactions/id"

headers = {"Accept": "application/json"}

response = requests.request("GET", url, headers=headers)

print(response.text)

RUN
Onboard a company response
x

{
 "id":"c27485a2ec3d4dc2b53ccf838ac396f9"
 "statusQueryGetUri":"https://api.fonoatech.com/Onboarding/v1/Companies/c27485a2ec3d4dc2b53ccf838ac396f9"
}

Get a company response
x

{
 "id": "478dbf7f6aef4ed68d9875ed932a3545"
 "status": "Completed"
 "message": NULL
 "company_name": "ABC Updated Co."
 "tin": "HR63433918405"
 "has_valid_tin": true
 "company_number": "ABC1234567890"
 "vat_number": "VAT1111111"
 "company_in_vat_regime": true
 "email": "office@abc.com"
 "website": "www.abc.com"
 "representative_name": "Some rep name"
 "representative_email": "some@email.com"
 "country_code": "hr"
 "province": "Province"
 "city": "City"
 "postal_code": "12345"
 "street": "Some street name"
 "number": "75"
 "ta_certificate_verified": true
 "ta_certificate_issuer": "certificate issuer info"
 "ta_certificate_owner": "certificate owner info"
 "ta_certificate_valid_from": "2018-10-28T10:24:28.2676206+00:00"
 "ta_certificate_valid_to": "2020-10-28T10:24:28.2676206+00:00"
 "created": "2020-10-28T10:24:28.2676206+00:00"
}

Report a transaction response
x

{
 "id":"c27485a2ec3d4dc2b53ccf838ac396f9"
 "statusQueryGetUri":"https://api.fonoatech.com/Reporting/v1/Transactions/c27485a2ec3d4dc2b53ccf838ac396f9"
}

Request an invoice response
x

 {
  "id": "478dbf7f6aef4ed68d9875ed932a3545"
  "status": "Completed"
  "message": NULL
  "country_code": "cz"
  "currency_code": "EUR"
  "payment_type": "cash"
  "invoice_type": "credit"
  "reference_invoice_uid": "uniqueidentifierforaninvoice"
  "reference_invoice_number": "000000050"
  "supplier_uid": "supplieruniqueidentifier"
  "customer_uid": "customeruniqueidentifier"
  "operator_uid": "operatoruniqueidentifier"
  "terminal_uid": "terminaluniqueidentifier"
  "invoice_number": "invoicenumber"
  "delivery_date": "2020-10-28T11:53:57+00:00"
   "items":[
    0:{
     "item_number": 1
     "product_name": "Product description"
     "quantity": 1
     "unit_of_measure": "item"
     "unit_price": -100
     "tax_rate": 0
     "net_price": -100
   }
 ]
 "total_net_amount": -100
 "discount": 0
 "total_tax_amount": 0
 "total_amount": -100
 "raw_request": "base64encoded request sent to tax authority (most probably a signed XML)"
 "raw_response": "base64encoded response from tax authority (most probably a signed XML)"
 "created": "2020-10-28T10:24:28.2676206+00:00"
}

CHALLENGES

Military-grade security. Our approach

Security front and center

Sensitive data encrypted and safely stored.

User credentials hashed to ensure the privacy of the highest standard.

Data at rest and in transit encrypted, communication only via secure protocols.

Vulnerability assessments

Regular vulnerability assessments conducted by internal and external experts.

Host, Network, Web Application and Database Assessment, Penetration Testing, and other best practices applied in our everyday security work.

ISO certified

ISO security certification 27001 and 27017.

ISO/IEC data management policies.

GDPR compliant.

PRICING

Pricing designed to help you scale your business efficiently

With our per-API-call pricing model, we make sure that you never pay any overhead for using our tax automation products.

Get in touch
Starts at:
15¢
Per successful API call

See Fonoa in action

Schedule a demo to test our products, or just create an account and start automating taxes. You can also contact us to discuss any specifics around your business.