# ALTERNATIVE_ID_VAT_INVALID_FORMAT

'‹value›' is not a valid EU VAT number for that country: it must be the prefix '‹value›' followed by the country's VAT number, in capital letters and without spaces. If it is the recipient of an invoice already issued, correct its data with an R4 corrective invoice

<Callout type="info">
**Category:** [Customers](/errors/category/cliente)
</Callout>

| | |
|---|---|
| HTTP status | `422` Unprocessable Content |
| Retry | After fixing the cause |

## When it happens

An `alternative_id` of type `NIF_IVA` has a `number` without the EU VAT structure AEAT defines for its country: the country prefix (`EL` for Greece) followed by the national number, without spaces.

## How to fix it

Send the full EU VAT number with its prefix, e.g. `FR40303265045` for France or `EL094014201` for Greece, and make `country_code` the country of that prefix. Lowercase letters are accepted and stored in uppercase. A well-formed number can still be refused after the invoice is issued if it is not in the VIES census: check it there first.

## Retry

Not as is: the same request fails the same way. Fix the cause described above, then send the request again, under a new `Idempotency-Key` if the body changed.

## Returned by

The operations where this code is most likely. The list is not exhaustive.

- [`POST /v1/companies/{company_id}/customers`](/customers/createCompanyCustomer)
- [`PATCH /v1/companies/{company_id}/customers/{customer_id}`](/customers/patchCompanyCustomer)
- [`POST /v1/companies/{company_id}/invoices`](/invoices/createCompanyInvoice)
- [`POST /v1/companies/{company_id}/invoices/{invoice_id}/issue`](/invoices/issueCompanyInvoice)
- [`POST /v1/companies/{company_id}/recurring-invoices`](/recurring-invoices/createCompanyRecurringInvoice)

## Rules that cite this code

- [CNT-021 · A recipient without a Spanish NIF is identified by an alternative id](/rules/contents#cnt-021)

## Example response

When this error occurs, the API answers `422` Unprocessable Content with a JSON body of this shape:

```json
{
  "type": "https://docs.beel.es/errors/ALTERNATIVE_ID_VAT_INVALID_FORMAT",
  "title": "ALTERNATIVE_ID_VAT_INVALID_FORMAT",
  "detail": "'‹value›' is not a valid EU VAT number for that country: it must be the prefix '‹value›' followed by the country's VAT number, in capital letters and without spaces. If it is the recipient of an invoice already issued, correct its data with an R4 corrective invoice",
  "instance": "/v1/<resource>",
  "errors": [],
  "success": false,
  "error": {
    "code": "ALTERNATIVE_ID_VAT_INVALID_FORMAT",
    "message": "'‹value›' is not a valid EU VAT number for that country: it must be the prefix '‹value›' followed by the country's VAT number, in capital letters and without spaces. If it is the recipient of an invoice already issued, correct its data with an R4 corrective invoice",
    "details": {}
  },
  "meta": {
    "timestamp": "2026-05-21T10:00:00Z",
    "request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
  }
}
```

The `type` URI is stable and always resolves to this page.

## Message

<Tabs items={["English", "Spanish", "Catalan"]}>
  <Tab value="English">{"'‹value›' is not a valid EU VAT number for that country: it must be the prefix '‹value›' followed by the country's VAT number, in capital letters and without spaces. If it is the recipient of an invoice already issued, correct its data with an R4 corrective invoice"}</Tab>
  <Tab value="Spanish">{"'‹value›' no es un NIF-IVA válido de ese país: tiene que ser el prefijo '‹value›' seguido del número de IVA del país, en mayúsculas y sin espacios. Si es el destinatario de una factura ya expedida, rectifica sus datos con una R4"}</Tab>
  <Tab value="Catalan">{"'‹value›' no és un NIF-IVA vàlid d'aquest país: ha de ser el prefix '‹value›' seguit del número d'IVA del país, en majúscules i sense espais. Si és el destinatari d'una factura ja expedida, rectifica'n les dades amb una R4"}</Tab>
</Tabs>

Send the request with `Accept-Language: <es|en|ca>` to receive the message in your preferred language.

> Placeholders like `‹value›` are filled in at runtime with the actual values of your request.

## Other errors in this category

<div className="grid grid-cols-2 gap-3 not-prose">
  <Card title="ALTERNATIVE_ID_AND_NIF_EXCLUSIVE" description="The customer cannot carry both a NIF and an alternative identifier. Use only one" href="/errors/ALTERNATIVE_ID_AND_NIF_EXCLUSIVE" />
  <Card title="ALTERNATIVE_ID_COUNTRY_REQUIRED" description="The country of the alternative identifier is missing (alternative_id.country_code). It is required except for the PASSPORT and NOT_REGISTERED types, which are taken as Spanish when it is omitted." href="/errors/ALTERNATIVE_ID_COUNTRY_REQUIRED" />
  <Card title="ALTERNATIVE_ID_INVALID" description="The alternative identifier is not valid" href="/errors/ALTERNATIVE_ID_INVALID" />
  <Card title="ALTERNATIVE_ID_REQUIRES_SPAIN" description="Type NOT_REGISTERED (07) is only valid for Spain; received country: '‹value›'" href="/errors/ALTERNATIVE_ID_REQUIRES_SPAIN" />
  <Card title="ALTERNATIVE_ID_SPAIN_INVALID_TYPE" description="For customers with country ES only types PASSPORT (03) or NOT_REGISTERED (07) are allowed" href="/errors/ALTERNATIVE_ID_SPAIN_INVALID_TYPE" />
</div>

## Keep exploring

<div className="grid grid-cols-2 gap-3 not-prose">
  <Card title="All Customers errors" description="Every code in this category in one table." href="/errors/category/cliente" />
  <Card title="Error reference home" description="Browse every category or jump to the handling guide." href="/errors" />
</div>

---

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