On this page

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.

POST

Method

The request type: POST
https://omp.vatcompliance.co/api/omp/tax_rate/{access_token}

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 String For US orders only 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
Command line

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

Command Line

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