billing
POST /v1/pricing/tax-quote
What these net prices look like to this customer, after VAT.
ማረጋገጫ
የኤፒአይ ቁልፍ (API key) እንደ ቢረር ቶከን (bearer token) ይላኩ። ይህ የመጨረሻ ነጥብ (endpoint) በመግለጫው ውስጥ የተወሰነ ፈቃድ አልገለጸም፣ ስለዚህ ከማሰብ ይልቅ ለቁልፍዎ የሚያስፈልገውን አነስተኛ ፈቃድ ይስጡት እና ምላሹን ያረጋግጡ።
ይህ ኤንድፖይ መክፈቻ (endpoint) የድርጅት መታወቂያ (organisation id) አይወስድም። የእርስዎ ቁልፍ (key) እሱ የሚመለከተውን ድርጅት አስቀድሞ ይለያል፣ እና ምላሹም ለዚሁ የተወሰነ ነው።
ሞክሩት
በቅንፍ ውስጥ ያለውን ማንኛውንም ነገር በራስዎ እሴቶች ይተኩ፣ እና ቁልፍ ቦታ ያዢውን ከዳሽቦርድዎ በመጣ ቁልፍ ይተኩ።
curl -X POST https://api.zinndigital.com/v1/pricing/tax-quote \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "items": <object[]> }'ገብተዋል? የመቆጣጠሪያ ማዕከልዎ ውስጥ ያለው የኤፒአይ ኮንሶል ትክክለኛውን የድርጅት መታወቂያዎን እና የራስዎን ቁልፍ ይሞላል፣ እና ትክክለኛውን ምላሽ ማየት እንዲችሉ ጥያቄውን በቀጥታ ከሚሰራው ኤፒአይ ጋር ያካሂደዋል። ይህን ኤንድፖይንት በAPI ኮንሶል ውስጥ ይክፈቱ
ዝርዝሮች
⚖️ **Net-constant pricing** (owner ruling 2026-08-04, `docs/34` §2.1a ruling 3, #1482). The advertised figure is **net** and VAT is added on top at the destination rate, so our revenue per sale is identical everywhere: a €10 plan nets €10 whether the buyer is in Germany or Hungary, and their total differs (€11.90, €12.70) because their own rate does. **A consumer is shown the VAT-inclusive figure; a business with a VIES-validated VAT number is shown net.** `display_mode` says which — read it, never derive it. The discriminator is **validation state**, not "has typed a VAT number": an unvalidated number is charged VAT (§2.3), so treating it as a business would understate what the customer pays. ⛔ **This endpoint rates; it never prices.** The caller passes amounts it already holds from the catalogue, so this cannot become a second source of prices that drifts from the first. ⭐ **Both figures always come back**, whichever one leads, so a frontend picks a field rather than multiplying by a rate. A rate applied in TypeScript is a float applied to money (§2.8) *and* a second implementation of the tax rules — one rounding rule away from the invoice, for ever. ⛔ **`indeterminate: true` means the supply could not be rated** (usually a member state with no `TaxRate` row) and the net figure is being returned with `notice: vat_at_checkout`. It is not an error to surface: the charge path refuses in that situation, correctly, but a pricing page that refused would go **blank for a whole country**. In the fallback `gross_total_minor` equals net and is never `0`, so a caller rendering the gross field unconditionally shows the price rather than a free product.
የጥያቄ አካል
| ስም | ዓይነት | የሚያስፈልግ | ምንነቱ |
|---|---|---|---|
country | string | አይ | ISO 3166-1 alpha-2 destination. On the signed-in route this overrides the stored billing country (the customer may be pricing an address they have not saved). Omitted on the pub… |
currency | string | አይ | ISO 4217. Defaults to the `docs/29` §3.1 resolution for the request. |
items | object[] | አዎ | — |
ምላሽ
| ስም | ዓይነት | የሚያስፈልግ | ምንነቱ |
|---|---|---|---|
currency | string | አዎ | — |
country | string | አዎ | The destination the figures were rated for, or `""` if none was known. |
display_mode | string<gross, net> | አዎ | Which figure leads. `gross` for a consumer (with the VAT shown separately), `net` for a validated business and for any supply carrying no VAT. ⛔ Read it; do not re-derive it — t… |
notice | string<vat_included, reverse_charge, no_vat, vat_at_checkout> | አዎ | A **key**, never rendered prose — every user-facing string goes through the frontend i18n layer in all 58 locales (§2.7, §2.19), so a wording change is a translation change rath… |
rate_bps | integer | አዎ | The single rate behind `notice`, or `0` where the basket carries more than one. A mixed basket (hosting at the buyer's rate, a website build at UK 20%) genuinely has no single r… |
estimated | boolean | አዎ | The figures ran on weak evidence (a geo hint, no billing address) and are indicative. The charge is rated again at checkout against full place-of-supply evidence, and **that** i… |
indeterminate | boolean | አዎ | The supply could not be rated and the **net** figure is being shown with `notice: vat_at_checkout`. Never true alongside a non-zero `tax_total_minor`. |
net_total_minor | integer | አዎ | — |
tax_total_minor | integer | አዎ | — |
gross_total_minor | integer | አዎ | ⛔ Equal to net in the `indeterminate` fallback, **never 0** — a caller rendering this field unconditionally must show the price rather than a free product. |
lines | object[] | አዎ | — |
ይህ ማብቂያ ሊመልሳቸው የሚችሉ ስህተቶች
401 · 422