Skip to main content

Tax Compliance

Invoica automatically calculates taxes based on jurisdiction, supporting EU VAT and other country-specific tax rates across 15 countries.

How Tax Calculation Works

Tax in Invoica is calculated as a percentage of the payment amount and added on top. The original payment amount becomes the subtotal, and the total includes the tax:
Subtotal (payment amount): 00.00
Tax Rate (Germany, 19%):     9.00
Total:                      19.00
The middleware does not modify the original payment amount from the server. Instead, when creating an invoice, if a country code is provided, Invoica looks up the applicable VAT rate and adds tax on top of the subtotal.

Tax Calculation API

Calculate tax for any amount and jurisdiction:
curl -X POST https://igspopoejhsxvwvxyhbh.supabase.co/functions/v1/api/v1/tax/calculate   -H "Content-Type: application/json"   -d '{
    "amount": 1000,
    "countryCode": "DE",
    "currency": "EUR"
  }'

Response

{
  "success": true,
  "data": {
    "subtotal": 1000,
    "taxRate": 19,
    "taxAmount": 190,
    "totalAmount": 1190,
    "currency": "EUR",
    "countryCode": "DE",
    "country": "Germany",
    "rateType": "standard",
    "breakdown": [
      {
        "description": "Germany VAT (19%)",
        "rate": 19,
        "amount": 190
      }
    ]
  }
}

Automatic Tax on Invoice Creation

When creating an invoice with a taxCountry or country field, tax is automatically calculated:
curl -X POST https://igspopoejhsxvwvxyhbh.supabase.co/functions/v1/api/v1/invoices   -H "Content-Type: application/json"   -d '{
    "amount": 5000,
    "currency": "EUR",
    "customerName": "Berlin AI GmbH",
    "customerEmail": "billing@berlin-ai.de",
    "sellerName": "My Platform",
    "taxCountry": "DE",
    "serviceDescription": "AI compute services"
  }'
The invoice will automatically include:
  • subtotal: 5000 (original amount)
  • taxRate: 19 (Germany standard VAT)
  • taxAmount: 950 (19% of 5000)
  • total: 5950 (subtotal + tax)

How Location is Determined

In the current implementation, the buyer/seller location must be provided explicitly when creating an invoice or calculating tax. The API caller (AI agent or integration) provides:
FieldPurpose
taxCountry / countryISO country code for tax rate lookup
buyerVatBuyer VAT registration number
sellerVatSeller VAT registration number
buyerAddressFull buyer business address
sellerAddressFull seller business address
If no country code is provided, tax defaults to 0 (no tax applied).
Future versions will support automatic location detection via VAT number validation (VIES API), billing address parsing, and IP geolocation as fallbacks.

Supported Tax Rates

Invoica includes built-in tax rates for 15 countries:
CountryStandard RateReduced Rate
Germany (DE)19%7%
France (FR)20%5.5%
Italy (IT)22%10%
Spain (ES)21%10%
Netherlands (NL)21%9%
Belgium (BE)21%6%
Austria (AT)20%10%
Portugal (PT)23%6%
Ireland (IE)23%13.5%
Sweden (SE)25%12%
Finland (FI)25.5%14%
Denmark (DK)25%0%
Poland (PL)23%8%
United Kingdom (GB)20%5%
United States (US)0%0%

Tax Rates Lookup API

Get tax rates for a specific country:
curl https://igspopoejhsxvwvxyhbh.supabase.co/functions/v1/api/v1/tax/rates?country=FR
Or list all available rates:
curl https://igspopoejhsxvwvxyhbh.supabase.co/functions/v1/api/v1/tax/rates

Tax Summary (Dashboard)

Access cumulative tax summaries grouped by country:
curl https://igspopoejhsxvwvxyhbh.supabase.co/functions/v1/api/v1/dashboard/tax-summary   -H "Authorization: Bearer YOUR_JWT_TOKEN"
Returns total subtotal, total tax, total with tax, invoice count, and breakdown by country.

Reduced Rates

To use the reduced VAT rate instead of standard, pass rateType: "reduced" in the tax calculation request:
{
  "amount": 1000,
  "countryCode": "DE",
  "rateType": "reduced"
}
This returns 7% instead of 19% for Germany.
US tax rates are currently set to 0%. State-level sales tax is not yet implemented. For US-based transactions, you should handle tax calculation externally.