b2c_not_supported
The /decide endpoint only handles B2B transactions. B2C is not supported in v1.
HTTP 400 · Bad Request
Example response
{
"error": {
"code": "b2c_not_supported",
"message": "B2C transactions are not supported. /decide handles B2B only."
},
"meta": {
"request_id": "a1b2c3d4-...",
"latency_ms": 0
}
}What happened
POST /v1/decide is designed for B2B transactions, where both parties are VAT-registered businesses. B2C (business-to-consumer) involves different rules in each country that are out of scope for v1.
How to fix
For B2C transactions, apply your seller country's standard VAT rate to the sale. You can retrieve this from GET /v1/rates/:country:
curl https://api.vatverify.dev/v1/rates/de
# Returns standard_rate: 19 for GermanyThe buyer's location determines the rate for digital services (OSS rules), but for most physical goods, the seller's country rate applies.
Why /decide is B2B-only
/v1/decide answers "should I charge VAT, and which country's?" by combining the EU VAT Directive's reverse-charge logic with the buyer-side validity check. The reverse-charge mechanism is fundamentally a B2B concept under Articles 138 and 196 of the Directive: it triggers on a valid VAT-registered counterparty.
B2C falls outside that mechanism and into a different decision tree:
- Distance sales of goods route through OSS once the EU-wide €10,000 threshold is crossed.
- Digital services to EU consumers use the destination-country rate under place-of-supply rules and report through OSS.
- Local B2C sales apply the seller's domestic rate.
Each of those branches has different evidence requirements (location proofs, threshold tracking, OSS registration status) that v1 does not model. Folding them into /decide would change the contract substantially.
How to detect B2C client-side
If you call /v1/decide without a buyer VAT number, the API treats the transaction as B2C and returns this error. The check on your side is simple: if buyer_vat is empty, do not call /decide. Use /v1/rates/:country instead and apply the seller-country logic.
See the reverse charge glossary for the rule that drives the B2B-only design, and the OSS glossary for the B2C path.
Common mistakes
- Calling
/decidewhen the buyer has no VAT number: if there is nobuyer_vat, the transaction is B2C. Use the rates endpoint instead. - Expecting
/decideto handle all transaction types: it is intentionally scoped to EU B2B only in v1.
Related errors
seller_country_unsupported: seller country is outside EU-27buyer_vat_not_registered: buyer has a VAT number but it is not registeredcountry_unknown: country code not in the rates dataset