Aller au contenu

Rapports fiscaux

Le registre, la déduction des remboursements, l'exportation et les éléments absents.

Chaque paiement encaissé produit une ligne et chaque remboursement une ligne négative. Le rapport additionne ce registre sur une période. Aucun calcul n'est refait lors de la lecture. Le rapport du trimestre précédent présente donc les taux alors appliqués, pas les taux actuels.

Ce qui entre dans le registre

Une ligne est créée lorsque le paiement est crédité, pas lors de sa création ou d'une tentative. Quatre situations l'empêchent.

ConditionRésultat
Tax est désactivé sur votre compteAucune ligne et aucun rattrapage après son activation
Le paiement est effectué dans la sandboxAucune ligne
Le paiement approvisionne votre propre soldeAucune ligne
La taxe calculée est nulleAucune ligne. Un pays au taux nul ne laisse donc aucune trace

Une seule ligne est écrite par paiement. Une deuxième tentative sur le même paiement ou la répétition de l'événement ne la duplique jamais.

Un remboursement écrit une ligne négative

Lors du remboursement d'un paiement, le registre annule la taxe dans la même proportion. Le remboursement d'un tiers du montant annule un tiers de la taxe, selon le taux et le pays d'origine, avec les deux montants négatifs.

Cette proportion ne peut pas dépasser la totalité. Le remboursement d'un montant supérieur à la base enregistrée annule au maximum 100 % de la taxe. Lorsque le paiement d'origine ne possède aucune ligne parce que Tax était alors désactivé, l'annulation est calculée avec le taux actuel du pays au lieu d'être ignorée.

Le résultat attendu est disponible au moment de la déclaration : le rapport calcule automatiquement le montant net des encaissements et des annulations. Vous ne soustrayez rien vous-même.

Le rapport

GEThttps://api.wajub.com/tax/reports

Cinq paramètres d'URL facultatifs sont disponibles. Les deux filtres limitent tout le payload au lieu de lui ajouter une section.

periodenumfacultatifdéfaut : 30d
7d, 30d, 90d, month, year ou custom. month désigne le mois civil en cours et year l'année civile en cours.
start_datedatefacultatif
Lu uniquement lorsque period vaut custom. En son absence, la période commence trente jours auparavant.
end_datedatefacultatif
Fin de la période, quelle que soit sa valeur. Par défaut, la fin de la journée en cours.
countrystringfacultatif
Code à deux lettres. Limite tout le rapport à un seul pays.
currencystringfacultatif
Code à trois lettres. Limite tout le rapport à une seule devise.

La réponse place toutes les données sous report et présente trois fois les mêmes chiffres : sous forme de total, par pays et par devise.

Réponse · 200 OK
{
"code": 200,
"status": "OK",
"report": {
"period": "30d",
"start_date": "2026-08-13",
"end_date": "2026-09-12",
"summary": {
"total_tax_collected": 808500,
"total_taxable_amount": 4200000,
"total_reversals": -12300,
"net_tax": 796200,
"currency": "XAF"
},
"by_country": [
{
"country_code": "CM",
"tax_collected": 808500,
"tax_reversed": -12300,
"taxable_amount": 4200000,
"transactions": 312
}
],
"by_currency": [
{
"currency": "XAF",
"tax_collected": 808500,
"tax_reversed": -12300,
"taxable_amount": 4200000,
"transactions": 312
}
]
}
}

Trois détails sont importants pour le rapprochement avec vos propres comptes. tax_collected compte uniquement les lignes positives et tax_reversed les lignes négatives. net_tax est leur somme et représente le montant à déclarer. transactions compte toutes les lignes du groupe, y compris les annulations. Un pays avec trois cents paiements et douze remboursements indique donc 312. Enfin, summary.currency contient la devise filtrée ou la première trouvée. Pour un compte qui utilise plusieurs devises, le résumé additionne les montants sans conversion. Il n'a de sens qu'après un filtrage sur une devise.

Déclarez pays par pays et une devise à la fois

Vous devez la taxe à une juridiction dans sa propre devise. Utilisez donc un rapport dont les paramètres country et currency sont tous deux définis. La section by_country d'un rapport non filtré permet de repérer les pays où vous avez des obligations, pas de remplir une déclaration.

Le rapport du Dashboard n'est pas le même objet

La section Tax du Dashboard répond à la même question avec un payload différent. Ne vous attendez pas à une correspondance exacte entre leurs champs.

APIDashboard
Périodestart_date et end_dateUn objet period avec start et end
Totalsummary.total_tax_collectedtotal_tax
Par lignetax_collected et transactionstax_amount et count
Encaissements et annulationsSéparés dans deux champsAdditionnés dans un seul
Plusieurs devisesAucune conversionConversion dans votre devise de base sous global_total
TauxAbsentsLe tableau des taux est inclus

Le Dashboard additionne les encaissements et les annulations dans un seul chiffre par ligne. Un mois avec des remboursements y affiche donc un résultat inférieur à tax_collected dans l'API. Les deux sont corrects, car ils répondent à des questions légèrement différentes.

L'exportation CSV

Sous Tax, la commande export télécharge la vue actuelle au format CSV séparé par des points-virgules, avec un marqueur UTF-8. Excel l'ouvre donc correctement dans les paramètres régionaux français et portugais, sans étape d'importation. Le fichier contient la période, les totaux, la conversion dans la devise de base lorsque vous en utilisez plusieurs, puis un bloc par pays et par devise.

Les exportations sont comptabilisées dans le quota mensuel de votre plan : dix par mois avec Pay as you go, puis un nombre illimité à partir de Growth. L'API ne propose aucune exportation.

Seuils d'immatriculation

De nombreuses juridictions imposent une immatriculation uniquement après le dépassement d'un seuil de chiffre d'affaires local. GET /tax/thresholds répertorie les seuils suivis par Wajub, avec leur montant, leur devise et leur période de mesure.

GET /tax/thresholds/alerts les compare à votre propre chiffre d'affaires enregistré pour l'année civile en cours. Il renvoie uniquement les éléments qui nécessitent votre attention : approaching à partir de 80 % du seuil et exceeded à 100 %. Un tableau vide signifie qu'aucun seuil n'est proche. Il est également renvoyé avant l'enregistrement de toute taxe.

Ce que le registre ne contient pas

Connaître ces limites vous évite de chercher des exportations inexistantes.

Aucun détail par juridiction. Lorsque plusieurs taux infranationaux s'appliquent, la ligne contient leur total, pas leur répartition. Le détail existe dans le calcul, mais n'est pas conservé.

Aucun prélèvement Mobile Money ni aucune taxe sur les services numériques. Ces deux éléments sont calculés à certains endroits, mais ne sont ni enregistrés, ni affichés sur un paiement, ni ajoutés à un montant. Lorsqu'un pays les prélève, ils ne figurent pas dans vos chiffres Wajub.

Aucune information dans l'objet paiement. GET /payments/{id} ne renvoie aucun champ fiscal. Le registre est uniquement consultable par l'endpoint des rapports et le Dashboard.

Aucun webhook. Aucun événement n'est émis lors de l'écriture ou de l'annulation d'une ligne.

Que pensez-vous de ce contenu ?