Documentation Index
Fetch the complete documentation index at: https://docs.chift.eu/llms.txt
Use this file to discover all available pages before exploring further.
Reverse VAT Overview
The Reverse VAT (reverse charge) shifts VAT reporting from the seller to the buyer.Common scenarios:
- Cross-border B2B sales within the EU
- Domestic transactions for specific goods/services
- Imported services from non-EU suppliers
- Seller does not charge VAT
- Buyer self-assesses VAT, creating both input and output VAT entries
- Net VAT to pay is usually 0, but declaration is ensured
1. Reverse VAT with create invoice
When using the invoice endpoints, Chift handles the reverse VAT accounting automatically.
1.1 Purchase invoices (supplier_invoice)
For invoices subject to reverse VAT:
- No VAT is charged on the invoice (
tax_amount = 0) - Assign the appropriate reverse VAT tax code with
reversed = true tax_rateis the applicable VAT rate (used for self-assessment)
- Output VAT (as if the buyer had issued the invoice)
- Input VAT (as if the buyer had paid it)
Example — Purchase Invoice
1.2 Seller Side (Sales Invoice)
For sales invoices under reverse charge, the treatment is simpler:- Do not charge VAT (
tax_amount = 0,tax_rate = 0) - Use the appropriate 0% tax code corresponding to the reverse-charge scenario (not necessarily marked
reversed) - Total = net amount, no VAT included
Example — Sales Invoice (minimal)
2. Reverse VAT with create journal entry
Journal entries work differently from invoices.
With invoices, Chift derives accounting entries automatically.
With journal entries, you are directly providing the accounting data, so reverse VAT must be explicitly described.
2.1 Purchase-side reverse VAT
For purchase reverse VAT:tax_infomust be attached to the expense linetax_amountshould be calculated as:
amount excl. tax × VAT rate linked to the tax code and must not be zerovat_accountshould typically be the deductible VAT account returned by the Get VAT Codes endpointreversed_vat_accountshould typically be the payable VAT account returned by the Get VAT Codes endpoint
Example
2.2 Sales-side reverse VAT
No specific reverse VAT handling is required. Create the journal entry as a normal VAT-exempt sale.VAT ledger accounts logic in France
VAT ledger accounts logic in France
Some accounting software does not expose VAT codes through their API — or does not use them at all. In these cases, Chift reconstructs VAT codes artificially from the VAT ledger accounts (accounts starting with
Purchases
For reverse charge scenarios (Intracom, Extracom, Autoliquidation), the detection relies on a combination of two ledger accounts being present together on the transaction — one representing the output VAT side and one the input VAT side.
445) in order to keep the data model consistent across all connectors. The behavior is identical for the API consumer regardless of the underlying system.There are two scenarios:- The accounting software supports VAT codes (and exposes them via API) → no special handling required.
- The accounting software does not have VAT codes (or they are not accessible via API) → Chift infers the VAT code from the
445xledger accounts present on the transaction, using the following logic:
| VAT Type | Ledger Account(s) |
|---|---|
| Standard | 44571 or 44572 |
| VAT Type | Ledger Account(s) |
|---|---|
| Standard | 44566 and 445664 |
| Fixed assets (Immo) | 44562 |
| Intracom – Reverse charge | 445662 or 445665+4452 |
| Intracom fixed assets – Reverse charge | 445621 or 445622+4452 |
| Extracom – Reverse charge | 4456698+445798, or 445661+4451, or 445663+4453 |
| Domestic reverse charge (Autoliquidation FR) | 4456699+445799, or 445666+445716 |
✅ Summary
| Role | Tax Treatment | Chift API Handling |
|---|---|---|
Buyer —create invoice | Self-assess VAT | tax_amount = 0, reversed tax code required → API generates offsetting VAT entries |
Buyer —create journal entry | Self-assess VAT | Through tax_info: tax_amount = amount excl. VAT × rate, reversed tax code required, vat_account + reversed_vat_account required |
| Seller | VAT exempt | tax_amount = 0, tax_rate = 0, use appropriate 0% tax code |