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, et ne pas s'y inscrire ne fait jamais revenir la TVA française
sur une opération que la loi taxe ailleurs. Sans mécanisme valable, la décision reste sans
montant : destination_mechanism_missing. La facture est bloquée — c'est
volontaire, et c'est le seul comportement honnête.
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
(eu_threshold_state_missing), 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.
$ 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.
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 : deux preuves
sont alors exigées, et location_evidence_relief_undetermined dit quel fait manque.
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). Seule
une adresse portugaise sans code postal ne situe aucune région :
destination_regional_scope_undetermined, avec le fait manquant — jamais le taux du continent par défaut ; - 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 — restent traités à part : ils ne sont ni de l'Union ni un simple pays tiers, et portent leur propre fiscalité indirecte.
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.