Agent Wranglers

USG-27Recommended EU law

Decide when prepaid credits carry VAT

For each credit product, record whether VAT is due when the credits are sold or when they are spent. Keep the reason and your accountant's sign-off. Charge and report VAT at that point only.

Region

European Union (EU). The duty comes from the law there. The rule applies only when the project serves people there, and its Applies when also holds.

How to do it

EU VAT law treats a voucher by what is known at sale. Credits that buy one service at one VAT rate in a known country are close to a single-purpose voucher. VAT is then due at sale. Credits spendable on goods or services at different rates, or in several countries, are multi-purpose, and VAT is due when they are spent. Some tax offices treat SaaS credits as a plain advance payment, which is also taxed when paid. The voucher rules are in Sell gift cards as vouchers with the right VAT and expiry. Store the VAT point on the credit product, and let the invoice code read it. Credits that expire unspent still leave VAT and accounting questions, so ask your accountant how to book them.

Examples

JavaScript example

export function vatLinesFor(event, product) {
  if (product.vatPoint === 'sale' && event.kind === 'credit-purchase') return [vatLine(event.amountMinor, product)]
  if (product.vatPoint === 'spend' && event.kind === 'credit-use') return [vatLine(event.amountMinor, product)]
  return []
}

Python example

def vat_lines_for(event, product):
    taxed_kind = {"sale": "credit-purchase", "spend": "credit-use"}[product.vat_point]
    return [vat_line(event.amount_minor, product)] if event.kind == taxed_kind else []

How to check

Every credit product in the catalogue has a VAT point of "sale" or "spend" and a sign-off date. A test buys and spends credits of each kind, and VAT appears on the invoice at the recorded point only.

Sources

For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/usage-billing/credits-and-prepaid-balances/credit-vat-point">Agent Wranglers usage-based billing playbook</a>. In code you write, add a comment next to it with the same link.