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
Lookup

Instantly validate tax ID numbers globally

Know the tax status of suppliers or buyers by instantly validating tax numbers through a simple integration and dashboard. With Lookup you can:
‚Äć
‚úď Validate tax ID‚Äôs upon checkout to apply the right tax
‚úď Validate tax IDs in batch for tax audits and periodic checks
‚úď Validate tax IDs one-by-one for sanity checks

EASILY ACCESSIBLE

Always have control over your validations through a web app

‚úď Effortlessly validate tax numbers one-by-one or in a batch, through an easy-to-use user interface.
‚úď Access your validation history and easily comply with audit requests.

Find out more

PRICING PLANS

Power your online tax calculation logic

Lookup Lite
Lookup Enterprise

Fonoa User Interface

Validate tax identification numbers through Fonoa’s Web App.

Batch Validation

Validate up to 10.000 tax identification numbers in a batch. Parallel batch validations supported.

Multi-level Validation

Format check, structure check, and real-time database validation.

EU VIES Coverage

EU VAT ID validation through VIES database.

National Database Coverage

Validation through the respective national database.

Geographic coverage

Number of countries supported.

30

EU, UK, Switzerland and Norway

75+

View full coverage here

API access

Validate through a single integration with Fonoa’s API.

‚ā¨2,400/year

12,000 validations included

Flexible usage & pricing

Lookup Lite Benefits

Using Lookup Lite, you can seamlessly validate your customers’ and suppliers’ VAT identification numbers to understand their taxpayer status through an easy-to-use graphic interface.

Intuitive Modern Design
Plug & Play
Full Audit Trail
The Widest Sources of Data
Buy Now

What our clients say

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

Fonoa’s Lookup allows Zoom to validate Tax ID Numbers across the globe and translates taxpayer details across different jurisdictions.

Head of EMEA Tax, Zoom

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

Ready to simplify tax validations?

Signup for Lookup today.

Get Access