OUR customers

Trusted by
Industry Leaders

CHALLENGES

Avoid leaving money on the table

Leaving money on the table

Without invoices, business customers cannot reclaim VAT / GST on their transactions. This leads to unnecessary costs for your customers and a competitive disadvantage for your business.

Local rules are complicated

Issuing locally-compliant invoices and credit notes can be complicated - there are country-specific requirements on what information and format to use.

Customers can’t expense their transactions

Without invoices, your customers won’t be able to expense their business transactions. They will contact your support more often and churn at a greater rate.

Self-billing is complex

Merchants re-selling from different sellers don't get invoices for these transactions and struggle with streamlining their accounting and compliance processes.

Automate your invoicing processes instantly

Invoicing made simple

Automatically generate invoices for all relevant transactions

Local compliance

Make sure you follow all the local rules as you transact globally

Flexible

Fonoa supports issuing invoices, credit notes, 3rd party billing, and self-billing

Operational improvement

Allow your customers to claim back 100% of the VAT/GST on your transactions

HOW IT WORKS

Access Fonoa Invoicing via our REST API

1

What we receive from you

Our API receives relevant transaction data and any additional country-specific inputs.

2

Our API does the work

We automatically generate an invoice that contains all the data points mandated by relevant local tax authorities, and follows the format and language that is required.

3

What you get from Fonoa Invoicing

As a result, we will issue locally compliant invoices for all of your transactions across the world.

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
Invoicing

‚Äć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