OMP tax rate API
Allow Marketplaces and facilitators real time tax determination for 111 countries. A Marketplace can retrieve their tax obligations, exemptions, tax points, check tax numbers of buyers.
We recommend storing all merchant business location addresses in your system to pass in when calculating tax.
In addition to helping you calculate VAT for your merchants, we also make it very easy to help them file and remit their sales tax to the Tax authorities. Lovat’s transaction endpoints allow you to send completed order information to a merchant’s Lovat account. Simply include the merchant’s Lovat API token when posting, and those orders will show up in the merchant’s account with a return-ready report breaking out tax owed by jurisdiction. Merchants who choose to use Lovat will simply pay us based on the number of transactions we’re processing for them on a monthly basis.
Method
JSON Params
Parameter | Type | Description | Required |
merchant_id | String | Unique identifier of the merchant | Optional |
merchant_establishment_country_id | String | Merchant establishment country. Three-letter uppercase country code per ISO 3166-1 alpha-3 | Required |
merchant_VAT_numbers | – | Tax number of merchant | Optional |
transaction_id | String | Maximum 255 characters. | Optional |
сurrency | String | Transaction currency. Three-letter currency code per ISO 4217. | Required |
transaction_datetime | – | Date and time of the transaction in accordance with ISO 8601 GMT | Optional |
transaction_sum | Float | Total amount of the order, excluding shipping | Required |
delivery_fee | Float | Total amount of shipping for the order | Optional |
arrival_country | String | A country where the order shipped to. Three-letter uppercase country code per ISO 3166-1 alpha-3 | Required |
arrival_zip | String | Required for US orders: Postal code where the order shipped to | Optional |
arrival_state | – | For US, Canada, UK: Two-letter ISO state code where the order shipped to | Optional |
departure_country | String | Three-letter ISO country code of the country where the order shipped from. All countries are specified as strings according to ISO 3166- 1 alpha-3 | Required |
departure_zip | String | For US orders: Postal code where the order shipped from | Optional |
departure_state | String |
For US, Canada: Two-letter ISO state code where the order shipped from |
– |
service_code | String | Required for digitally supplied services. Tax categories of digital services | Optional |
good_code | String | Code of a good according to EU’s eight-digit coding system The Combined Nomenclature (CN) | Optional |
vat_number_of_buyer | String | Tax number of buyer | Optional |
buyer_name | String | – | Optional |
exemption_type | Enum | For US orders only. Types used: wholesale, government, educational, marketplace, other, or non_exempt | Optional |
nexus_state | String | Merchant nexus states. Two-letter ISO state code where the merchant has nexus | Optional |
Requests and Responses
sent over HTTPS,
use TLS 1.2 or higher,
contain authentication parameters,
Request Example
Command Line
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json'
-d '{
"transaction_id": "ttt4565-85546",
"merchant_id": "678345101",
"merchant_establishment_country_id": "DEU",
"merchant_VAT_numbers": "DE9875234",
"transaction_datetime": "2022-01-09T08:27:22 +00:00",
"transaction_sum": 43.04,
"delivery_fee": 2.3,
"currency": "EUR",
"arrival_country" : "LVA",
"good_code": "62160000",
"departure_country" : "AUS"
}'
'https://omp.vatcompliance.co/api/omp/tax_rate/6cec387781a94425b401206d1710801a'
Command line
require 'net/http'
require 'json'
post_fields = [
{
"transaction_id" => "0099990099",
"merchant_id" => "678345104",
"merchant_establishment_country_id" => "POL",
"merchant_VAT_numbers" => "DE9875234",
"transaction_sum" => 12.50,
"currency" => "EUR",
"arrival_country" => "LVA",
"good_code" => "62160000",
"departure_country" => "POL"
}
]
token = '6cec387781a94425b401206d1710801a'
uri = URI('https://omp.vatcompliance.co/api/omp/tax_rate/')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.path)
request['Content-Type'] = 'application/json'
request['Authorization'] = "Bearer #{token}"
request.body = post_fields.to_json
response = http.request(request)
puts response.body
import requests
import json
post_fields = [
{
"transaction_id": "0099990099",
"merchant_id": "678345104",
"merchant_establishment_country_id": "POL",
"merchant_VAT_numbers": "DE9875234",
"transaction_sum": 12.50,
"currency": "EUR",
"arrival_country": "LVA",
"good_code": "62160000",
"departure_country": "POL"
}
]
token = '6cec387781a94425b401206d1710801a'
url = 'https://omp.vatcompliance.co/api/omp/tax_rate/'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token
}
response = requests.post(url, data=json.dumps(post_fields), headers=headers)
print(response.text)
Command line
$postFields = [
[
"transaction_id" => "0099990099",
"merchant_id" => "678345104",
"merchant_establishment_country_id" => "POL",
"merchant_VAT_numbers" => "DE9875234",
"transaction_sum" => 12.50,
"currency" => "EUR",
"arrival_country" => "LVA",
"good_code" => "62160000",
"departure_country" => "POL"
],
];
$token = '6cec387781a94425b401206d1710801a';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://omp.vatcompliance.co/api/omp/tax_rate/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode($postFields),
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Command line
const axios = require('axios');
const postFields = [
{
transaction_id: '0099990099',
merchant_id: '678345104',
merchant_establishment_country_id: 'POL',
merchant_VAT_numbers: 'DE9875234',
transaction_sum: 12.50,
currency: 'EUR',
arrival_country: 'LVA',
good_code: '62160000',
departure_country: 'POL'
}
];
const token = '6cec387781a94425b401206d1710801a';
const url = 'https://omp.vatcompliance.co/api/omp/tax_rate/';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer ' + token
};
axios
.post(url, postFields, { headers: headers })
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.error(error.message);
});
Command line
/* Your code... */
Command line
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class Main {
public static void main(String[] args) {
String token = "6cec387781a94425b401206d1710801a";
String url = "https://omp.vatcompliance.co/api/omp/tax_rate/";
try {
URL apiUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Bearer " + token);
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoOutput(true);
String postData = "[{\"transaction_id\":\"0099990099\",\"merchant_id\":\"678345104\",\"merchant_establishment_country_id\":\"POL\",\"merchant_VAT_numbers\":\"DE9875234\",\"transaction_sum\":12.50,\"currency\":\"EUR\",\"arrival_country\":\"LVA\",\"good_code\":\"62160000\",\"departure_country\":\"POL\"}]";
try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) {
outputStream.writeBytes(postData);
outputStream.flush();
}
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} else {
System.out.println("Request failed. Status code: " + responseCode);
}
connection.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Command line
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
token := "6cec387781a94425b401206d1710801a"
url := "https://omp.vatcompliance.co/api/omp/tax_rate/"
postData := []map[string]interface{}{
{
"transaction_id": "0099990099",
"merchant_id": "678345104",
"merchant_establishment_country_id": "POL",
"merchant_VAT_numbers": "DE9875234",
"transaction_sum": 12.50,
"currency": "EUR",
"arrival_country": "LVA",
"good_code": "62160000",
"departure_country": "POL",
},
}
jsonData, err := json.Marshal(postData)
if err != nil {
fmt.Println("Error marshaling JSON:", err)
return
}
request, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
request.Header.Set("Authorization", "Bearer "+token)
request.Header.Set("Content-Type", "application/json")
client := &http.Client{}
response, err := client.Do(request)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println("Error reading response body:", err)
return
}
fmt.Println(string(body))
}
Example Success Response
{
"transaction_id": "ttt4565-85546",
"transaction_type": "lvg_deemed_import",
"deemed": true,
"taxable_jurisdiction": "LVA",
"tax_rate": 21,
"export_country": "AUS",
"import_country": "LVA"
}
{
"transaction_id": "0099990100",
"transaction_type": "lvg_deemed_import",
"deemed": true,
"taxable_jurisdiction": "DEU",
"tax_rate": 19,
"export_country": "GBR",
"import_country": "DEU"
}
{
"transaction_id": "0099990099",
"transaction_type": "b2c_distance_sales",
"deemed": false,
"taxable_jurisdiction": "LVA",
"tax_rate": 21
}
Tax categories of digital services
Audio/visual content | 1 |
Live streaming | 2 |
Telephone services | 3 |
Internet telephone services | 4 |
Call management services | 5 |
Paging services | 6 |
Internet access | 7 |
Images | 8 |
Music | 9 |
Games | 10 |
E-newspapers | 11 |
Web hosting | 12 |
Distance maintenance of programmes | 13 |
Advertising space on a website | 14 |
E-books | 15 |
Licenses | 16 |
Dating | 17 |
Distance education (pre-recorded) | 18 |
Gambling | 19 |
SaaS | 20 |
Online education live (live webinars, one-to ones) |
21 |