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).

Download our guide

The Essential Guide to Tax Number Validation

Validating tax ID numbers (or TINs) is an increasingly important step for digital businesses looking to stay compliant, ensuring companies collect and remit the right amount of tax.

Unfortunately, businesses that do not validate TINs are often overcharging or undercharging their clients, leading to non-compliance – and unhappy customers.
This must-read guide for tax teams outlines the:

- Many reasons companies are choosing to validate TINs
- Challenges and critical limitations that make validation difficult
- Steps tax teams can take to properly validate their customers’ TINs
Download guide
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

Know when your customers are taxable and when not

Improve your margins

By validating your business customers' Tax IDs, you are ensuring that you are dealing with tax registered business customers (B2B) and know when not to charge indirect taxes on your cross-border transactions. This leads both to cost-savings and gross margin increase vs approaching every transaction as taxable (B2C) and charging unnecessary taxes like VAT and GST that you have to remit to the tax authorities once you charge it.

B2B complexities

Any business that sells to business customers cross-border, will need to collect their Tax IDs to determine if the transaction is taxable and for invoicing purposes.

Not charging for VAT or GST

If tax IDs are not valid for various reasons, or have expired, merchants will not be able to properly invoice these customers and will wrongfully not charge sales tax, VAT or GST.

Merchants are held liable for taxes

Tax authorities across the world hold merchants liable for under-declared and unpaid taxes, along with late interest fees and penalties.

Automated solution for your online business

B2B / B2C

Automatically determine if a transaction is B2B or B2C

Tax rate determination

Understand whether the transaction is subject to sales tax, VAT or GST

Tax ID validation

Check if your customers’ or sellers’ Tax ID is valid

Fraud prevention

Avoid fraudulent activities and tax liabilities for your business

HOW IT WORKS

Access Fonoa Lookup via our REST API

1

What we receive from you

Our API receives data on your customer/seller location and tax ID.

2

Our API does the work

We are directly linked with government databases across the globe and automatically verify the format and the syntax of a given tax ID, as well as check if the company is live in the local government database.

3

What you get from Fonoa Lookup

As a result, we validate whether the structure of any tax ID is valid and live in the country’s company registry, and whether it matches the info of the seller you are verifying.

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
Lookup

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"
}

Military grade security

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.

Contact Sales
Starts at:
15¢
Per successful API call