# 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.type` | Tax | Territory | AEAT `impuesto` code |
|---|---|---|---|
| **`IVA`** | Value added tax (*Impuesto sobre el Valor Añadido*) | Peninsula + Balearic Islands | `01` |
| **`IPSI`** | Production, services and import tax (*Impuesto sobre la Producción, Servicios e Importación*) | Ceuta & Melilla | `02` |
| **`IGIC`** | Canary Islands general indirect tax (*Impuesto General Indirecto Canario*) | Canary Islands | `03` |
| **`OTHER`** | Other taxes | Rare — reserved for non-Spanish taxes carried on the invoice | `05` |

`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:

```bash
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.percentage` | Use |
|---|---|
| `0` | Zero rate (essentials, intra-canary exports) |
| `3` | Reduced rate (some food, transport) |
| `5` | Special reduced rate (temporary energy/utility measures) |
| `7` | General rate |
| `9.5` | Increased rate (vehicles, mid-tier goods) |
| `15` | Special increased rate (luxury) |
| `20` | Tobacco 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.percentage` | Typical use |
|---|---|
| `0.5` | Super-reduced (social housing, games, advertising) |
| `1` | Reduced (taxis, bars, electricity) |
| `2` | Intermediate (restaurants, hospitality) |
| `4` | Medium (renovations, real estate) |
| `8` | High (telecommunications, electronic services) |
| `10` | General (construction) |

```json
{
  "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.percentage` | Use |
|---|---|
| `0` | Exempt or out-of-scope (set `exemption_reason` — see [Tax classification](/verifactu/tax-classification)) |
| `4` | Super-reduced rate — basic foodstuffs, books |
| `5` | Temporary: only on operations dated 2022-07-01 to 2024-09-30 |
| `2`, `7.5` | Temporary: only on operations dated 2024-10-01 to 2024-12-31 |
| `10` | Reduced rate — hospitality, transport |
| `21` | General rate |

A temporary rate outside its period answers `422` [`VAT_RATE_NOT_ACCEPTED_ON_DATE`](/errors/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):

```json
{
  "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.

<Callout type="info">
  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.
</Callout>

## 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`](/errors/REGIME_KEY_CLASSIFICATION_NOT_ACCEPTED). See [Regime keys](/verifactu/regime-keys).

## Related

<Related>

- [Tax classification](/verifactu/tax-classification) — applies the same way regardless of IVA / IGIC / IPSI (SSoT)
- [Regime keys](/verifactu/regime-keys) — `"08"` and what AEAT requires with each key (SSoT)
- [Create an invoice](/invoices/createCompanyInvoice) — full line schema

</Related>

---

Full OpenAPI spec: https://docs.beel.es/api/openapi