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.5.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.5.0
File Size Uploaded
django_vies-6.5.0.tar.gz 11.0 kB Details

Built distribution (wheel)

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

Total release size: 30.9 kB

Release files / django_vies-6.5.0.tar.gz

Download URL django_vies-6.5.0.tar.gz
Size 11.0 kB
Tags Source
SHA-256 checksum
How to use checksums
44d29b0462451b5f7fa38b15069bfc5cc470d76f192ee053ef769bcc0ed03eca
BLAKE2b-256 checksum
How to use checksums
d2f051598cf0e589c5295b8e069097492c431dd9a4b5456cda58ffef8ca91f5b
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 15, 2026.

Transparency log

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

Download URL django_vies-6.5.0-py3-none-any.whl
Size 19.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6dd3071851a6228531ac6984773e90c7b4219134de5f42d587b6c3163a7fefa2
BLAKE2b-256 checksum
How to use checksums
692aeb1349967ca0fa99945b81a23ec6a4f250df9708aba28e5fe36cfa86f2a8
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 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

6.5.0 This release

2 release files

6.4.0

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