Skip to main content

Django VIES: Validate and store VAT Information Exchange System (VIES) data in Django.
Documentation | Issues | Changelog | Funding 💚

Django-VIES

Validate and store VAT Information Exchange System (VIES) data in Django.

Installation

python3 -m pip install django-vies

Usage

VATINField for models

from django.db import models
from vies.models import VATINField


class Company(models.Model):
    name = models.CharField(max_length=100)
    vat = VATINField(blank=True, null=True)

VATIN wrapper class, allows access to result.

>>> from vies.types import VATIN
>>> vat = VATIN('LU', '26375245')
>>> vat.is_valid()
True
>>> vat.data
{
    'countryCode': 'LU',
    'vatNumber': '26375245',
    'requestDate': datetime.date(2020, 4, 13),
    'valid': True,
    'name': 'AMAZON EUROPE CORE S.A R.L.',
    'address': '38, AVENUE JOHN F. KENNEDY\nL-1855  LUXEMBOURG'
}

You can also use the classmethod VATIN.from_str to create VATIN from str.

>>> from vies.types import VATIN
>>> vat = VATIN.from_str('LU26375245')
>>> vat.is_valid()
True

The VIES API endpoint can be very unreliable and seems to have an IP based access limit. Therefore the VATINField does NOT perform API based validation by default. It needs to be explicitly turned on or performed in a separate task.

e.g.

from vies.models import VATINField
from vies.validators import VATINValidator


class Company(models.Model):
    name = models.CharField(max_length=100)
    vat = VATINField(validators=[VATINValidator(verify=True, validate=True)])

validate=True will tell the validator to validate against the VIES API. verify is enabled on by default and will only verify that the VATIN matches the country's specifications.

It is recommended to perform VIES API validation inside an asynchronous task.

e.g. using celery

from celery import shared_task
from vies.models import VATINField
from vies.types import VATIN
from django.core.exceptions import ValidationError


class Company(models.Model):
    name = models.CharField(max_length=100)
    vat = VATINField()
    vat_is_valid = models.BooleanField(default=False)

    def __init__(self, *args, **kwargs):
        super(Company, self).__init__(*args, **kwargs)
        self.__vat = self.vat

    def save(self, *args, **kwargs):
        if self.__vat != self.vat:
            validate_vat_field.delay(self.pk)
        super(Company, self).save(*args, **kwargs)
        self.__vat = self.vat

    def refresh_from_db(self, *args, **kwargs):
        super(Company, self).refresh_from_db(*args, **kwargs)
        self.__vat = self.vat


@shared_task
def validate_vat_field(company_id):
    company = Company.objects.get(pk=company_id)
    vat = VATIN.from_str(company.vat)
    try:
        vat.validate()
    except ValidationError:
        company.vat_is_valid = False
    else:
        company.vat_is_valid = True
    finally:
        company.save(update_fields=["vat_is_valid"])

You can also use celery.current_app.send_task('validate_vat_field', kwargs={"company_id": self.pk}) to call asynchronous task to avoid circular import errors.

Translations

Feel free to contribute translations, it's simple!

cd vies
django-admin makemessages -l $YOUR_COUNTRY_CODE

Just edit the generated PO file. Pull-Requests are welcome!

Metadata

Release files for django-vies 6.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-vies 6.4.0
File Size Uploaded
django_vies-6.4.0.tar.gz 10.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-vies 6.4.0
File Interpreter ABI Platform
django_vies-6.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 30.4 kB

Release files / django_vies-6.4.0.tar.gz

Download URL django_vies-6.4.0.tar.gz
Size 10.7 kB
Tags Source
SHA-256 checksum
How to use checksums
16161ac4e6427ec271ce1cc210ec18e068cf7a084b4e3d856c931572ea4b5a62
BLAKE2b-256 checksum
How to use checksums
cdabb01e27b0ff289a2717eb65c3a2ffe2ebcb0958d2ee8faf4241fcb6b4ad05
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / django_vies-6.4.0-py3-none-any.whl

Download URL django_vies-6.4.0-py3-none-any.whl
Size 19.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5d19f289d808af45b3333cd1b7ba618cdecfd426e6a456519ee7eeb76eaa14b4
BLAKE2b-256 checksum
How to use checksums
41a7e960f5139a99e14732986eb121ef52077d192a0c3f19060de3d2d4bdbd37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

6.4.0 This release

2 release files

6.3.0

2 release files

6.2.2

2 release files

6.2.1

2 release files

6.2.0

2 release files

6.1.0

2 release files

6.0.3

2 release files

6.0.2

2 release files

6.0.1

2 release files

6.0.0

2 release files

5.0.2

1 release file

5.0.1

1 release file

3.5.0

1 release file

3.4.1

1 release file

3.4.0

1 release file

3.3.0

2 release files

3.2.0

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

3.0.2

1 release file

3.0.1

2 release files

3.0.0

1 release file

2.2.2

1 release file

2.2.1

1 release file

2.2.0

1 release file

2.1.3

1 release file

2.1.2

1 release file

2.1.1

1 release file

2.1.0

1 release file

2.0.2

1 release file

2.0.1

1 release file

2.0.0

1 release file

1.0.2

1 release file

1.0.1

2 release files

1.0.0

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page