Ventes aux particuliers de l'UE
Vendre un service en ligne ou expédier un bien à un particulier d'un autre pays de l'Union ne suit pas les mêmes règles qu'une vente en France. Quatre questions se posent, dans cet ordre, et les confondre produit un taux faux. Cette page les prend une par une, puis explique le suivi annuel sur lequel elles reposent.
1. Êtes-vous concerné ?
Deux familles d'opérations seulement sont concernées :
- les services fournis par voie électronique à un particulier d'un autre pays de l'Union — abonnement logiciel, contenu téléchargeable, hébergement (directive 2006/112/CE art. 58) ;
- les ventes à distance intracommunautaires de biens, c'est-à-dire les biens que vous expédiez vers un autre pays de l'Union (art. 33, a).
Tout le reste est hors sujet. Une prestation de services générale à un particulier — un conseil, une formation en présentiel, une réparation — reste taxée là où le prestataire est établi (art. 45) : rien de ce qui suit ne la concerne. Une vente à une entreprise non plus : elle suit les règles B2B.
Dans l'API, une ligne de biens vendue à un particulier d'un autre pays de
l'Union doit porter goodsMovement : c'est le mouvement physique qui décide si
la vente à distance s'applique, et il n'est jamais supposé.
2. Le seuil de taxation de 10 000 €
Tant que le total de ces ventes ne dépasse pas 10 000 € HT, ni sur l'année en cours ni sur l'année précédente, la TVA reste celle de votre pays. Au-delà, c'est celle du pays du client (art. 59 quater §1 ; CGI art. 259 D II).
Trois précisions font toute la différence :
- le plafond est inclusif : à 10 000 € exactement, la taxation peut encore rester dans votre pays ;
- l'opération qui fait franchir le seuil est elle-même taxée dans le pays du client — le basculement n'attend pas l'opération suivante ;
- le seuil n'est ouvert qu'au vendeur établi dans un seul pays de l'Union. Un établissement dans un second pays le ferme définitivement.
Le total compte toutes ces ventes, quel que soit l'outil qui les a facturées. C'est la raison d'être du suivi annuel décrit plus bas.
3. L'option pour la taxation dans le pays du client
Vous pouvez renoncer au seuil et taxer ces ventes dans le pays du client dès le premier euro (art. 59 quater §3). C'est un choix qui s'exerce auprès de votre administration, et Facturino ne l'exerce jamais à votre place : il enregistre ce que vous déclarez avoir fait, avec sa date d'effet.
Pour un vendeur français, ce choix engage l'année de son exercice plus les deux années
civiles complètes suivantes, puis se reconduit tacitement. Une déclaration qui se
termine plus tôt est refusée plutôt qu'acceptée à moitié :
destination_option_period_invalid. Cette durée est celle fixée par la France ;
pour un vendeur établi dans un autre pays de l'Union, Facturino refuse explicitement plutôt que
de généraliser une règle qu'il ne détient pas
(destination_option_scope_not_sourced).
Pour un vendeur français, une inscription active au guichet unique vaut exercice de cette option : le lieu est alors le pays du client, et le seuil n'a plus rien à décider. L'inscription est datée — une inscription ouverte en octobre ne décide rien pour une vente de septembre.
4. Comment cette TVA est déclarée
Quand la TVA est due dans le pays du client, elle se déclare de deux manières, et il en faut une :
- par le guichet unique (régime de l'Union, art. 369 bis et suivants) : une seule déclaration pour tous les pays, dans un pays où vous êtes établi. Une immatriculation locale n'est pas un établissement ;
- par une immatriculation dans chaque pays concerné, valable à la date de l'opération.
Le guichet unique répond à cette question-ci, et seulement à celle-ci : c'est un mode de
déclaration et de paiement, jamais une règle de lieu. S'y inscrire ne déplace aucun
lieu de taxation — ne pas y être inscrit non plus. Sans mécanisme déclaré, la TVA du pays du
client reste due : la décision la facture exactement comme avec le guichet unique (même
taux, mêmes lignes, mêmes obligations de transmission) et porte l'avis
destination_mechanism_missing. Inscrivez-vous au guichet unique au plus tard le
10 du mois qui suit la première vente soumise au régime : il s'applique alors dès cette
vente (règlement d'exécution (UE) 282/2011 art. 57 quinquies). Cette première vente
n'est pas la même selon ce qui a envoyé la TVA dans le pays du client :
- seuil dépassé — la première vente au-delà du seuil de 10 000 €
(
detailCode: threshold_exceeded) ; - option pour la taxation dans le pays du client, sous le seuil — la première
vente taxée dans ce pays, sans aucun dépassement (
destination_option, etmulti_member_state_establishmentpour un vendeur établi dans plusieurs pays).
À défaut, immatriculez-vous dans le pays du client. La facture n'est pas bloquée.
Sous la source integration, le taux du pays du client est alors le seul
admis : une TVA française déclarée en France répond
422 integration_vat_incoherent.
Un cas voisin est refusé pour une autre raison : si vous déclarez un
établissement dans le pays de destination, l'établissement qui intervient
décide à la fois du lieu et du mécanisme, et aucun fait du contrat ne le nomme
(destination_establishment_in_member_state).
Le suivi de l'année
Le total courant n'est pas un champ de votre profil fiscal, mais un compte tenu par
année civile — /v1/eu-threshold-ledgers, un par société, par mode
(test / production) et par année. La raison est simple : une révision de profil
est une règle figée sur laquelle des factures ont été émises, alors qu'un
chiffre d'affaires bouge à chaque vente et se corrige. Les séparer est ce qui permet de
corriger un total sans réécrire la règle sous laquelle une facture a été émise.
Rien n'y est supposé. Aucune année ne démarre à zéro d'elle-même, et les ventes faites
ailleurs ne sont jamais présumées absentes. Ouvrir une année, c'est déclarer ce que vous aviez
déjà vendu, et dire où ces ventes sont facturées. Tant qu'aucune année n'est ouverte, votre
seuil n'est pas déclaré et n'est jamais supposé nul : la décision reste en attente
(pending_verification, sans montant) avec le motif
eu_threshold_state_missing — déclarez votre position dans
Réglages › Seuil européen, puis reprenez la décision.
$ curl -X POST https://facturino.com/api/v1/eu-threshold-ledgers \
-H "Authorization: Bearer fac_test_..." \
-H "Content-Type: application/json" \
-d '{
"year": "2026",
"previousYearAmount": 250000,
"currentYearOpening": 100000,
"previousYearEvidenceAmount": 150000,
"currentYearEvidenceOpening": 60000,
"coverageMode": "mixed_channels",
"externalCompleteThroughDate": "2026-09-15"
}' coverageMode est une déclaration, pas une hypothèse.
facturino_only dit que toutes ces ventes passent par Facturino ;
mixed_channels dit que d'autres canaux existent, et le suivi ne sert alors une
décision que jusqu'au jour où ces canaux sont déclarés complets
(eu_threshold_external_coverage_incomplete). Le chiffre des autres canaux entre
ensuite par une écriture explicite, même à zéro — zéro veut dire « il ne s'est rien
passé », et il faut le dire.
{
"object": "eu_threshold_ledger",
"year": "2026",
"status": "open",
"capCents": 1000000,
"evidenceCapCents": 10000000,
"acquiredMin": 320000,
"acquiredEvidenceMin": 180000,
"reservedMin": 0,
"remainingMin": 680000,
"evidenceRemainingMin": 9820000,
"externalCompleteThroughDate": "2026-09-15"
}
Les totaux sont publiés en deux chiffres distincts, jamais additionnés :
acquiredMin, ce que l'année a certainement réalisé, et reservedMin,
ce que tiennent à cet instant les ventes encore en cours de décision. Une vente en cours peut
encore disparaître ; un total unique masquerait exactement cette incertitude. Quand le
plafond tombe entre les deux, rien n'est figé
(eu_threshold_concurrent_decision_pending) : la même vente se décide
proprement une fois les autres conclues. Une réservation laissée par une requête interrompue
expire d'elle-même en quinze minutes au plus.
Chaque écriture est définitive. Retirer un montant est possible — un avoir, une annulation, un remboursement réduisent la base d'imposition (art. 90 §1) — mais ce n'est jamais un montant négatif générique : le retrait nomme le mouvement qu'il corrige, sa nature, le justificatif sur lequel il repose et son classement, et il ne rend jamais plus que ce que ce mouvement avait apporté. Ce qui ne peut pas être rattaché à un mouvement n'est pas soustrait : le suivi est signalé et cesse de servir des décisions, plutôt que de continuer sur un total reconnu faux. Il ne se rouvre que sur un rapprochement dont les chiffres concordent, jamais sur un commentaire.
Une vente datée avant une vente déjà comptée est refusée
(eu_threshold_backdated_operation) plutôt que de faire bouger en silence le total
sur lequel d'autres factures ont été figées.
Le seuil de preuve de 100 000 €
Un second seuil, indépendant du premier, décide du nombre de preuves de localisation exigées pour un service en ligne : règlement d'exécution (UE) 282/2011 art. 24 ter, 2e alinéa. En dessous de 100 000 €, une seule preuve non contredite suffit ; au-dessus, il en faut deux, concordantes et non contradictoires.
L'adresse déclarée ne situe jamais le client à elle seule. Il faut deux indices de natures
différentes qui ne se contredisent pas, ou un indice unique fourni par un tiers sous
l'allègement ci-dessus ; sinon la décision reste en attente
(location_evidence_insufficient). Quand des indices se contredisent, Facturino ne
tranche que deux cas. Premier cas : deux indices de natures différentes concordent sur un
seul territoire, qui est retenu même si un autre indice diverge. Un indice national et un
indice régional du même pays concordent : une IP au Portugal et une adresse aux Açores
désignent les Açores, une IP en France et une adresse en Guadeloupe la Guadeloupe — mais deux
régions différentes d'un même pays ne concordent pas. Second cas : tous
les territoires possibles — l'adresse déclarée et chaque territoire désigné par un indice —
mènent au même résultat fiscal complet (TVA, catégorie, mentions, taxe locale facturée,
axes de transmission) ; l'adresse déclarée tient. Un indice qui ne dit que le pays, seul pour
son pays, désigne le territoire du pays — et, pour la France, tous les
territoires français (métropole, Corse, outre-mer, TAAF), jamais la métropole seule. Un pays de l'Union où le seuil
décide est comparé sur l'état réel de votre suivi annuel, lu avant la
comparaison et cette vente comprise ; le pays retenu est réservé sur l'état même où il a
été comparé. Tout autre cas reste en attente
(location_evidence_contradictory) : aucun territoire n'est retenu, la TVA
française la plus élevée n'est jamais choisie à la place du client, et le message liste les
territoires possibles en demandant un indice de plus. Quand l'un des deux cas tranche, la
décision est finale et l'avis location_evidence_contradictory nomme le territoire
retenu et l'indice écarté.
Les deux seuils ne mesurent pas la même chose, et aucun ne borne l'autre :
- le seuil de taxation ne compte que les ventes vers d'autres pays de l'Union — biens expédiés et services confondus ;
- le seuil de preuve ne compte que les services fournis par voie électronique, ventes en France comprises.
Un éditeur qui vend surtout en France déclare donc légitimement bien plus sur le second que sur
le premier, et un vendeur de biens l'inverse. C'est pourquoi chaque montant va par
paire (amount / evidenceAmount,
acquiredMin / acquiredEvidenceMin) plutôt que comme un total et
sa part.
L'allègement à une seule preuve est calculé par le moteur sur ce second
compteur, jamais déclaré : une case à cocher ne peut pas énoncer un montant. Le résultat
est figé sur la décision (euB2cDestination.evidenceRelief) avec les chiffres qui
l'ont établi. Sans données complètes il vaut undeterminable : une seule
preuve fournie par un tiers ne suffit pas, et l'avis de localisation le dit.
Le taux appliqué
Le taux du pays du client vient d'une table locale, datée et versionnée : aucun appel réseau pendant une décision, et une décision rejouée des années plus tard reproduit exactement le même taux. Un changement de taux ouvre une nouvelle période, il ne réécrit jamais l'ancienne.
Seul le taux normal des 27 pays est tabulé : le périmètre des taux réduits
suit une classification nationale que Facturino ne détient pas, et en choisir un serait
arbitraire — en particulier, un service en ligne ordinaire n'est jamais assimilé à une
publication électronique. Un taux autre que le taux normal répond
destination_rate_band_not_available ; une date antérieure à la table,
destination_rate_not_sourced_for_date.
Certains pays appliquent un taux normal différent selon la région. Ce qui gouverne la région décide de la réponse, et un pays entier n'est jamais bloqué par principe :
- le taux suit le lieu de l'opération, et la région est cartographiée. La
région est alors un territoire à part entière et l'adresse décide : Portugal continental
23 %, Madère 22 %, Açores 16 % (CIVA art. 18, plages postales CTT). Une
adresse portugaise sans code postal ne situe aucune région, et le continent n'est jamais
supposé : la décision est refusée (
destination_regional_scope_undetermined) jusqu'à ce que le code postal soit renseigné. De même, une adresse en Espagne, en Italie, en Allemagne, en Finlande ou en Grèce sans code postal, quand ce code sépare le territoire de TVA de l'Union de territoires exclus, n'est rattachée à aucun territoire ; - le taux est réservé aux opérations réalisées dans la zone par un fournisseur qui y est établi. Un vendeur distant ne l'acquiert pas par l'adresse de son client, et le taux national est la réponse — finale, sans qu'aucune cartographie postale soit nécessaire. C'est le cas de Jungholz et du Kleinwalsertal en Autriche (§ 10(4) UStG : 20 %, pas 19 %), et du régime insulaire grec pour les services, que l'AADE réserve au fournisseur établi dans l'île pour une opération réalisée sur place : un service en ligne fourni depuis la France est taxé 24 %, à Athènes comme à Kalymnos ;
- le taux suit la destination, et la zone n'est pas cartographiée ici. Ni le
taux régional ni le taux national ne peuvent alors être affirmés, et l'opération est refusée
plutôt que décidée :
destination_regional_regime_not_sourced. C'est le cas de la Grèce pour les biens — depuis le 1er janvier 2026, les îles de moins de 20 000 habitants appliquent un taux normal réduit aux biens qui y sont livrés, acquisitions intracommunautaires comprises, et la liste de ces îles n'est pas cartographiée par code postal dans cette table. Une vente à distance de biens vers la Grèce est donc refusée, à Athènes comme à Kalymnos, et jamais taxée 24 % par défaut. La réponse est ainsi rendue par famille d'opération : un même pays peut être tranché pour les services et ouvert pour les biens.
Les territoires exclus du territoire TVA de l'Union — Canaries, Ceuta, Melilla, Livigno,
Campione d'Italia, Büsingen, Helgoland, Åland, Mont Athos — sont traités comme des pays
tiers (directive 2006/112/CE art. 6) : la TVA française est hors champ quand
l'opération y est située, et leur propre fiscalité indirecte (IGIC, IPSI…) est signalée par
foreignTaxReviewRequired: true et l'avis
eu_special_territory_not_implemented, jamais calculée.
Ce que la décision fige
Une décision qui traverse cette règle en fige le raisonnement, comme donnée et non comme phrase : le verdict et son fondement, les chiffres du seuil sur lesquels il a été pris, le mécanisme déclaratif daté qui a servi, et l'entrée de taux avec sa version, sa source et sa période.
"euB2cDestination": {
"destinationMemberState": "DE",
"place": "destination",
"basis": "threshold_exceeded",
"threshold": {
"year": "2026",
"cumulativeBeforeMinCents": 980000,
"operationValueMinCents": 30000,
"cumulativeAfterMinCents": 1010000
},
"mechanism": { "kind": "oss_union", "memberStateOfIdentification": "FR" },
"rate": { "memberState": "DE", "centipercent": 1900, "registryVersion": "eu-standard-rates-2026-09-01" },
"evidenceRelief": "not_applicable"
}
Ces mêmes règles s'appliquent à l'identique sous les deux sources fiscales. Avec
taxSource: "integration", votre système fournit le taux et Facturino le
compare au résultat légal au lieu de le produire : égalité, la décision
est finale ; désaccord, elle reste sans montant
(eu_b2c_rate_supplied_mismatch), jamais corrigée en silence.
Si vos prix sont affichés TTC
Le montant hors taxe d'une opération dépend alors du taux — que le seuil doit justement
déterminer. Facturino borne ce montant avec les seuls taux que l'opération peut
légalement porter : celui de votre territoire si elle reste chez vous, celui du pays du
client sinon. Quand les deux bornes tombent du même côté du plafond, le verdict tient. Sinon la
décision répond destination_threshold_price_mode_ambiguous : reprenez le total
déclaré, ou facturez cette opération en prix hors taxe. Aucune base n'est inventée.
Franchise en base
Si vous relevez de la franchise en base (CGI art. 293 B) et qu'une de ces ventes est
taxée dans le pays du client, Facturino refuse :
franchise_destination_taxation_not_modelled. La franchise française ne dit rien de
ce que le régime des petites entreprises de l'autre pays décide, et affirmer soit le taux du
pays du client, soit une exonération française, serait une invention.
Voir aussi
- Décisions fiscales — le cycle complet, de la décision à l'encaissement.
- Codes d'erreur — la liste des réponses non finales et ce qu'elles demandent.
- E-reporting — les obligations de transmission des données de transaction.