NewStripe: a buyer with a NIF always gets a standard invoice, and the simplified threshold is deprecated
BeeL
Get startedMulti-NIFVeriFactuRulesStripeAPI referenceChangelog

Territorial taxes (IVA, IGIC, IPSI)

When to use IVA, IGIC (Canary Islands), or IPSI (Ceuta & Melilla) — and which main_tax.type value to send.


Spain has three territorial IVA-equivalent taxes. The right one depends on where the operation is localised, not on the issuer's address. Most lines run on IVA; switch to IGIC or IPSI when the operation happens in those territories.

This page is the canonical reference for main_tax.type values and the rate menus per tax.

The three taxes

main_tax.typeTaxTerritoryAEAT impuesto code
IVAValue added tax (Impuesto sobre el Valor Añadido)Peninsula + Balearic Islands01
IPSIProduction, services and import tax (Impuesto sobre la Producción, Servicios e Importación)Ceuta & Melilla02
IGICCanary Islands general indirect tax (Impuesto General Indirecto Canario)Canary Islands03
OTHEROther taxesRare — reserved for non-Spanish taxes carried on the invoice05

IVA is what almost every line uses, but it is not implicit: main_tax requires both type and percentage. Only regime_key may be omitted (it falls back to "01").

How you set it in the API

main_tax.type, main_tax.percentage, and main_tax.regime_key are sibling fields on each line:

curl -X POST "https://app.beel.es/api/v1/companies/{company_id}/invoices" \
  -H "Authorization: Bearer $BEEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "STANDARD",
    "recipient": {
      "legal_name": "Importaciones Atlántico SL",
      "nif": "B12345674",
      "address": {
        "street": "Avenida Marítima",
        "number": "200",
        "postal_code": "35001",
        "city": "Las Palmas de Gran Canaria",
        "province": "Las Palmas",
        "country": "España"
      }
    },
    "lines": [
      {
        "description": "Industrial air conditioning systems",
        "quantity": 3,
        "unit": "unit",
        "unit_price": 3500,
        "discount_percentage": 0,
        "main_tax": { "type": "IGIC", "percentage": 7, "regime_key": "01" }
      }
    ]
  }'

Rate menus per tax

IGIC (Canary Islands)

main_tax.percentageUse
0Zero rate (essentials, intra-canary exports)
3Reduced rate (some food, transport)
5Special reduced rate (temporary energy/utility measures)
7General rate
9.5Increased rate (vehicles, mid-tier goods)
15Special increased rate (luxury)
20Tobacco products

IPSI (Ceuta & Melilla)

Rates are set per municipality and per product category. The API accepts 0.5, 1, 2, 4, 8 or 10 % — any other percentage on an IPSI line is rejected. Check the tax bylaw (Ordenanza Fiscal) of the specific city.

main_tax.percentageTypical use
0.5Super-reduced (social housing, games, advertising)
1Reduced (taxis, bars, electricity)
2Intermediate (restaurants, hospitality)
4Medium (renovations, real estate)
8High (telecommunications, electronic services)
10General (construction)
{
  "lines": [
    {
      "description": "Servicio en Ceuta",
      "quantity": 1,
      "unit": "service",
      "unit_price": 200,
      "discount_percentage": 0,
      "main_tax": { "type": "IPSI", "percentage": 4, "regime_key": "01" }
    }
  ]
}

IVA

main_tax.percentageUse
0Exempt or out-of-scope (set exemption_reason — see Tax classification)
4Super-reduced rate — basic foodstuffs, books
5Temporary: only on operations dated 2022-07-01 to 2024-09-30
2, 7.5Temporary: only on operations dated 2024-10-01 to 2024-12-31
10Reduced rate — hospitality, transport
21General rate

A temporary rate outside its period answers 422 VAT_RATE_NOT_ACCEPTED_ON_DATE; the date judged is the invoice's operation_date, or the issue date when there is none.

Mixing taxes on the same invoice

Different lines on the same invoice can carry different taxes — for example, a service partly delivered in the peninsula (IVA) and partly in the Canary Islands (IGIC):

{
  "lines": [
    { "description": "Consultoría en Madrid", "quantity": 1, "unit_price": 1000, "discount_percentage": 0,
      "main_tax": { "type": "IVA", "percentage": 21, "regime_key": "01" } },
    { "description": "Consultoría en Tenerife", "quantity": 1, "unit_price": 1000, "discount_percentage": 0,
      "main_tax": { "type": "IGIC", "percentage": 7, "regime_key": "01" } }
  ]
}

BeeL. groups the totals per main_tax.type in the response and submits each line under the correct AEAT impuesto code.

When to pick which

The decision tracks the place of supply of the operation, not the issuer's tax address:

  • Goods physically delivered or services consumed in the Canary Islands → IGIC
  • Goods or services consumed in Ceuta or Melilla → IPSI
  • Everything else inside Spain → IVA

If you're a self-employed person on the peninsula invoicing a Canary client for a service used in the Canaries, IGIC applies — not IVA. Likewise, a Canary issuer invoicing a peninsular client for a service consumed in the peninsula uses IVA.

BeeL. doesn't auto-detect the place of supply — it trusts what you set. When the customer's address is in the Canaries, IPSI territory, or another EU country, double-check the line classification before issuing.

Mixed-territory regime (main_tax.regime_key: "08")

"08" declares an operation subject to another indirect tax: IPSI or IGIC on an IVA line, IPSI or IVA on an IGIC line. It is rare, and it is not the general regime of IGIC — an ordinary IGIC line uses "01". AEAT only accepts it on a line with exemption_reason: NO_SUJETA_LOCALIZACION at 0 %; otherwise the line is rejected with 422 REGIME_KEY_CLASSIFICATION_NOT_ACCEPTED. See Regime keys.