WHY USE FONOA LOOKUP?

Instant, accurate tax ID validation

Ensuring the accuracy of your customers' tax IDs is crucial to managing compliance. Without verification, you may be charging the wrong amount of tax, providing a poor customer experience, and be liable for any missing taxes. With Fonoa Lookup you can:

Recover indirect taxes charged on domestic purchases
Confirm if your platform sellers charged tax correctly.
Confirm your customer’s tax status
To calculate tax on cross-border sales, you must know if your buyer is a business or a consumer - and that they've got a valid/active tax ID.
Know the right tax treatment of your transactions, any time
If you’re a marketplace, you must know if your sellers are registered for taxes before making calculations on their behalf.
Ensure your Data Sharing report contains valid tax IDs
Affected platforms must confirm tax ID numbers before fulfilling their reporting obligations (e.g. DAC7).
THE FULL PACKAGE

Key benefits

Access accurate data
Use VIES and national databases worldwide to get the most accurate tax data on the market.
Easy batch processing
Submit batch tax ID checks and get instant responses.
Reduce stress from audit requests
Keep a record of the numbers you've validated in the past and access your full audit trail.
Run transactions with confidence
Automatically validate tax ID numbers at your checkout page for instant and accurate tax treatment on your digital transactions.
Receive support when you need it
Get world-class support for tax calculations in any country you trade in.
API integration
Integrate quickly and easily with your existing systems with API access.
Clean-up tax IDs automatically
Automate the collection and clean up of your customers' tax IDs with a single integration into your sign-up flow or checkout page.
Global coverage
Validate tax IDs in every market you operate in - available in 96+ countries with additional jurisdictions available upon request.
PLUG & PLAY

Automated, streamlined tax ID validations in one centralized location

Validate tax numbers one-by-one or in a batch.
Access your validation history and respond to audit requests through our easy-to-use interface.
Validate over 50,000 numbers at once for periodic and
ad-hoc checks.
WHAT OUR CUSTOMERS ARE SAYING
Fonoa allows Uber to be able to validate taxpayer status both in VIES, and in the national databases across the EU, allowing us to have a complete picture over the taxpayer status of our supplier base.
Tax Tech & Operations Manager, Uber
OUR CUSTOMERS

Who is Fonoa Lookup for?

Any business which trades outside of their country will know the pain of working out with consumption taxes. It’s a burden which usually falls on the tax team, but you shouldn’t have to face it alone. Whether you work for a SaaS business, SME or a global enterprise - choose automation and take the hassle out of tax compliance.
CHALLENGES

What can go wrong if I don’t validate tax ID numbers?

Charging the wrong amount of tax.
You’re at risk of reducing your profit margins. And it may cause issues with local tax authorities.
Poor customer experience.
Approving tax incorrectly can result in customer complaints and time spent on unwinding transactions (and correcting invoices)
Liable for missing taxes.
You’re expected to carry out a base level of due diligence. In many cases, this includes tax identification numbers validation. Failing to do so can make you liable for any missing taxes.

Learn more about how you can automate tax ID validation and ensure the correct tax rate for every transaction.

Learn more about how you can automate tax ID validation and ensure the correct tax rate for every transaction.

Contact Sales

OUR customers

Trusted by
Industry Leaders

CHALLENGES

Avoid manual tax calculations

Cross-border trade is growing faster than your tax headcount

Keeping up with manual tax calculations and tracking of changes to sales tax, VAT or GST laws across the world is hard.

Determining taxability is complicated

With your customers and sellers located in a growing number of regions or countries, understanding what taxes you need to charge and remit in each country is hard. What’s more, in case you are operating a marketplace, you might become liable for transactions taking place through the marketplace in a number of countries.

With scale, taxes get even more complex

Determining the correct tax rate depends on multiple ever changing variables: customer’s location, B2B/B2C nature, type of product/service sold, whether seller has surpassed local revenue thresholds making it liable to charge local tax, and many more.

With international expansion, your risk of tax fines goes up

When B2C merchants selling globally do not add sales tax, VAT or GST based on customers’ country and revenue threshold, they risk fines from local tax authorities.

Apply taxes where and when needed, seamlessly

Tax status

Know when and if your customers / sellers are taxable

Tax registrations

Know when and where you need to register and charge local taxes

Tax rate determination

Know what tax rates you need to apply to your transactions

Marketplace rules

Make sure you know when the marketplace is liable for underlying transactions

HOW IT WORKS

Access Fonoa Tax via our REST API

1

What we receive from you

Our API receives data about your customers, sellers and transactions.

2

Our API does the work

Our tax engine takes into account all the relevant inputs and automatically determines whether a transaction is taxable, at what rate, and what is the type of tax that needs to be applied.

3

What you get from Fonoa Tax

Accurate tax rates are automatically assigned to all taxable 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
Tax

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

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

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

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

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.fonoa.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\"}"

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

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

import requests

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

payload = {
   "country_iso": "au",
   "tin": "30616935623"
}
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.fonoa.com/Lookup/v1/Validations/ \
 --header 'Accept: application/json'

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

let url = 'https://api-demo.fonoa.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.fonoa.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.fonoa.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.fonoa.com/Lookup/v1/Validations/"

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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.com/Tax/v1/RevenueChecks/ \
 --header 'Accept: application/json'

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

let url = 'https://api-demo.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.com/Tax/v1/Calculations/ \
 --header 'Accept: application/json'

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

let url = 'https://api-demo.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.com/Invoicing/v1/Invoices/ \
 --header 'Accept: application/json'

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

let url = 'https://api-demo.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.com/Onboarding/v1/Companies/id \
 --header 'Accept: application/json'

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

let url = 'https://api-demo.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.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.fonoa.com/Reporting/v1/Transactions/id \
 --header 'Accept: application/json'

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

let url = 'https://api-demo.fonoa.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.fonoa.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.fonoa.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.fonoa.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.

SOC 2 and ISO certified

SOC 2 Type 1 for Service Organizations.

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