Automatically generate locally compliant invoices, credit notes, and seamlessly invoice on behalf of 3rd party merchants across the World.
Automatically generate locally compliant invoices, credit notes, and seamlessly invoice on behalf of 3rd party merchants across the World.
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.
Issuing locally-compliant invoices and credit notes can be complicated - there are country-specific requirements on what information and format to use.
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.
Merchants re-selling from different sellers don't get invoices for these transactions and struggle with streamlining their accounting and compliance processes.
Automatically generate invoices for all relevant transactions
Make sure you follow all the local rules as you transact globally
Fonoa supports issuing invoices, credit notes, 3rd party billing, and self-billing
Allow your customers to claim back 100% of the VAT/GST on your transactions
Our API receives relevant transaction data and any additional country-specific inputs.
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.
As a result, we will issue locally compliant invoices for all of your transactions across the world.
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.
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)
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)
{
"id": "2e0f83abcf22c8767cac7ae100f4bf40"
"statusQueryGetUri": "https://api.fonoatech.com/Lookup/v1/Validations/2e0f83abcf22c8767cac7ae100f4bf40"
}
{
"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": [...]
}
}
{
"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)
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)
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)
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)
{
"id": "2e0f83ae100f4bf4bcf22c8767cac7a0"
"statusQueryGetUri": "https://api.fonoatech.com/Tax/v1/RevenueCheck/2e0f83ae100f4bf4bcf22c8767cac7a0"
}
{
"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"
}
}
{
"id":"2e0f83ae100f4bf4bcf22c8767cac7a0"
"statusQueryGetUri":"https://api.fonoatech.com/Tax/v1/Calculations/2e0f83ae100f4bf4bcf22c8767cac7a0"
}
{
"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)
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)
{
"id":
"khu434agqxt4nt3s0oymhcnrdbdgh27i1603725131876xhs8j8jh9thdx0mhgyvz06g2rjfntgd9"
"statusQueryGetUri":
"https://api.fonoatech.com/Invoicing/v1/Invoices/khu434agqxt4nt3s0oymhcnrdbdgh27i1603725131876xhs8j8jh9thdx0mhgyvz06g2rjfntgd9"
}
{
"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)
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)
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)
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)
{
"id":"c27485a2ec3d4dc2b53ccf838ac396f9"
"statusQueryGetUri":"https://api.fonoatech.com/Onboarding/v1/Companies/c27485a2ec3d4dc2b53ccf838ac396f9"
}
{
"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"
}
{
"id":"c27485a2ec3d4dc2b53ccf838ac396f9"
"statusQueryGetUri":"https://api.fonoatech.com/Reporting/v1/Transactions/c27485a2ec3d4dc2b53ccf838ac396f9"
}
{
"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"
}
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.
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 Type 1 for Service Organizations.
ISO security certification 27001 and 27017.
ISO/IEC data management policies.
GDPR compliant.
With our per-API-call pricing model, we make sure that you never pay any overhead for using our tax automation products.
Get in touchSchedule a demo to test our products, or just create an account and start automating taxes. You can also contact us to discuss any specifics around your business.
Lookup is an intuitive and simple way of managing indirect tax status validation.
Fonoa has developed an easy-to-use tool designed specifically for tax and finance professionals to validate any Tax Identification Number.
Effortlessly validate tax numbers in an easy-to-use user interface or using our API.
No integrations or engineering teams needed to start- it’s plug & play.
See all your transactions in one place and provide evidence of processing.
We sync with government databases across the globe, including national databases.
Ensuring that the tax identification number your customer (or supplier) has given you is correct, is a prerequisite when invoicing cross-border goods transactions and filling in the EC Sales listing. Using an incorrect number could lead to fines and audits.
Ensure that you fully understand the status of your customer before you apply any indirect taxes to the sale of goods or services using Lookup.
Validate tax identification numbers given to you by your clients and suppliers in real time.
Validate tax identification numbers against both VIES and domestic tax databases using Lookup.
One single interface enables you to submit individual and batch requests using a simple CSV format.
Lookup keeps a record of the numbers you have validated in the past, which means it is simple to review the history and comply with audit requests.
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.
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.
Fonoa’s Lookup allows Zoom to validate Tax ID Numbers across the globe and translates taxpayer details across different jurisdictions.