Sales Tax and VAT

There are several different ways to set the sales_tax_rate or manual_sales_tax amount, depending on what is passed in the request and which resource you are requesting. Depending on what is set, the API will respond with different fields.

Expenses, Bills and Bill items

Normally there is no need to specify the sales_tax_rate or the manual_sales_tax_amount for an expense, bill or bill item yourself. If you leave both of these fields out, the correct sales_tax_rate will be set for the category of the expense or bill. The same will happen if you include "sales_tax_rate": "Auto" in your request body. If you later retrieve an expense or bill set in this manner, the response will include the sales_tax_rate field, as well as the calculated sales_tax_value.

If you include a sales_tax_rate when creating an expense, bill or bill item through the API this is used to calculate a sales_tax_value. This sales_tax_value is calculated from the gross value and the sales_tax_rate percentage supplied. It will be returned in the response and in future requests in addition to the rate.

For example, if you posted the JSON below, the response would include a sales_tax_value of 16.67, 20% of 83.33. These two amounts, when added together, give the gross value of 100.

{ "expense":
    {
        "user": "https://api.freeagent.com/v2/users/1",
        "category": "https://api.freeagent.com/v2/categories/285",
        "dated_on": "2019-10-22",
        "gross_value": "-100.0",
        "sales_tax_rate": "20",
        "description": "Example of setting a sales_tax_rate manually",
        "receipt_reference": "001",
    }
}

If you include a manual_sales_tax_amount when creating an expense, bill or bill item through the API, it will set this and return the manual_sales_tax_amount alongside sales_tax_value in the response and for all other requests for this expense, bill or bill item in the future. No sales_tax_rate will be returned but you can calculate it yourself, as shown below.

If you specify both a manual_sales_tax_amount and a sales_tax_rate, the sales_tax_rate will be ignored and the sales_tax_value will be calculated based only on the manual_sales_tax_amount (both value and amount will be returned in the response).

To calculate the sales_tax_rate from the manual_sales_tax_amount and the gross_value you can use the following formula:

net_value = abs(gross_value) - manual_sales_tax_amount
sales_tax_rate = (manual_sales_tax_amount / net_value) * 100

If you need to manually mark an expense/bill/bill item as sales tax exempt or out of scope, you can use "sales_tax_status": "EXEMPT or "sales_tax_status": "OUT_OF_SCOPE" in your request.

Invoices

Invoices are much simpler than expenses and bills; their sales tax should always be set using the sales_tax_rate parameter for each invoice_item. An example of this is shown below.

{ "invoice":
  {
    "contact":"https://api.freeagent.com/v2/contacts/2",
    "dated_on":"2019-12-12T00:00:00+00:00",
    "due_on":"2019-12-17T00:00:00+00:00",
    "reference":"003",
    "currency":"GBP",
    "exchange_rate":"1.0",
    "net_value":"0.0",
    "status":"Draft",
    "comments":"An example invoice comment.",
    "omit_header":false,
    "payment_terms_in_days":5,
    "ec_status":"EC Goods",
    "invoice_items":[
      {
        "description":"Test InvoiceItem",
        "item_type":"Hours",
        "price":"100.0",
        "quantity":"1.0",
        "sales_tax_rate":"20"
      }
    ]
  }
}

The sales_tax_rate field specifies what percentage of the item's price will be added to the invoice as sales tax. It is recommended that it is included for every new invoice item. If sales_tax_rate isn't included explicitly in the API request body, the invoice's sales tax settings will be determined by the contact's charge_sales_tax attribute which can be set to Always, Never or Auto (which, for a VAT-registered UK-based company, is equivalent to the "Only if contact is also based in the United Kingdom VAT area" option from the FreeAgent web UI).

If you need to manually mark an invoice item as sales tax exempt, you can use "sales_tax_status": "EXEMPT instead of a rate in your request.

The created invoice will include an additional sales_tax_value attribute which is the sum of sales tax from all invoice items. This is a read-only attribute which cannot be set manually.

EC VAT MOSS

Sales can be tagged as VAT MOSS by providing an ec_status of EC VAT MOSS.

When creating a MOSS Invoice or Estimate you must also provide a place_of_supply. When creating a Bank Transaction Explanation, you must provide a place_of_supply and a sales_tax_rate.

The place_of_supply field must be a country name from the following list of EU members:

  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden

You can get the available MOSS rates for the sales_tax_rate field from the following endpoint:

GET https://api.freeagent.com/v2/ec_moss/sales_tax_rates?country=Austria&date=2017-01-01
  • country - The country specified as place_of_supply
  • date - The transaction date in YYYY-MM-DD format

Response

Status: 200 OK
{
  "sales_tax_rates": [
    {
      "percentage": "20.0",
      "band": "Standard"
    },
    {
      "percentage": "13.0",
      "band": "Reduced"
    },
    {
      "percentage": "12.0",
      "band": "Parking"
    }
  ]
}
Show as XML
<?xml version="1.0" encoding="UTF-8"?>
<freeagent>
  <sales-tax-rates type="array">
    <sales-tax-rate>
      <percentage type="decimal">20.0</percentage>
      <band>Standard</band>
    </sales-tax-rate>
    <sales-tax-rate>
      <percentage type="decimal">13.0</percentage>
      <band>Reduced</band>
    </sales-tax-rate>
    <sales-tax-rate>
      <percentage type="decimal">12.0</percentage>
      <band>Parking</band>
    </sales-tax-rate>
  </sales-tax-rates>
</freeagent>
Show as JSON