Vergi API
Vergi modülünün tüm işlemleri (7) ve veri modelleri (4): adresler, izinler, girdiler, ön koşullar, olaylar ve örnekler.
Ülkeye ve ürün tipine göre vergi oranları; her satışa uygulanır.
Modül kodu tax · 7 işlem · 4 veri modeli · 4 olay. Bir anahtar ya da token, arkasındaki kişinin bu modülde yapabildiğinden fazlasını asla yapamaz; satır düzeyindeki güvenlik uygulamadakiyle birebir aynıdır. Yetki kapsamları: tax (hepsi), tax:read (yalnız okuma) ya da tax:<yetenek>.
Kaynaklar
| Kaynak | Tablo | Listeleme ve okuma | POST | PATCH | DELETE |
|---|---|---|---|---|---|
tax_classes | tax_class | /api/v1/tax_classes | |||
tax_configuration_countries | tax_configuration_country | /api/v1/tax_configuration_countries | |||
tax_configurations | tax_configuration | /api/v1/tax_configurations | |||
tax_rates | tax_rate | /api/v1/tax_rates |
Listeler limit (en çok 200), cursor, order (ör. -created_at), fields ve q alır; diğer her sorgu parametresi bir sütun süzgecidir: ?status=paid, ?total[gte]=100, ?id[in]=a,b, ?x=null.
İşlemler
| İşlem | Gereken izin | Ne yapar |
|---|---|---|
tax.archive_class | tax:manage | Vergi sınıfını arşivle |
tax.remove_country_exception | tax:manage | Ülke istisnasını kaldır |
tax.remove_rate | tax:manage | Vergi oranını kaldır |
tax.save_class | tax:manage | Vergi sınıfını kaydet |
tax.save_configuration | tax:manage | Vergi yapılandırmasını kaydet |
tax.set_country_exception | tax:manage | Ülke istisnası belirle |
tax.set_rate | tax:manage | Vergi oranı belirle |
tax.archive_class
Vergi sınıfını arşivle — Bir sınıfı, fiyatlandırdığı belgeleri değiştirmeden kullanımdan kaldırır.
Gereken izin tax:manage · veriyi değiştirir
https://app.getera.io/api/v1/tax_classes/{id}/actions/archive_class- Asıl adres:
POST /api/v1/actions/tax.archive_class
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Vergi sınıfı · kimliği: tax_class |
archived | boolean | evet | Arşivlendi |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
tax_class_not_found | Sınıf bulunmalı. |
Yayımladığı olaylar: tax.class_archived
Neye yazar: tax_class (update) — Archives or restores it
curl -X POST https://app.getera.io/api/v1/tax_classes/TAX_CLASSE_ID/actions/archive_class \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"archived":true}'{
"ok": true,
"result": "…",
"events": [
"tax.class_archived"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.taxClasses.archiveClass("TAX_CLASSE_ID", {
archived: true
})era tax_classes archive_class TAX_CLASSE_ID \
--archived true{
"name": "era__tax__archive_class",
"arguments": {
"id": "TAX_CLASSE_ID",
"archived": true
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde tax:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 tax_class_not_found · 429 çok sık istek
tax.remove_country_exception
Ülke istisnasını kaldır — Ülke ait olduğu yapılandırmaya geri döner.
Gereken izin tax:manage · siler ya da geri alınamaz · Era çalıştırırken bir kişiye onaylatır
https://app.getera.io/api/v1/tax_configuration_countries/{id}/actions/remove_country_exception- Asıl adres:
POST /api/v1/actions/tax.remove_country_exception
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · İstisna · kimliği: tax_configuration_country |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
tax_exception_not_found | İstisna bulunmalı. |
Yayımladığı olaylar: tax.configuration_changed
Neye yazar: tax_configuration_country (delete) — Removes the exception
curl -X POST https://app.getera.io/api/v1/tax_configuration_countries/TAX_CONFIGURATION_COUNTRY_ID/actions/remove_country_exception \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"tax.configuration_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.taxConfigurationCountries.removeCountryException("TAX_CONFIGURATION_COUNTRY_ID")era tax_configuration_countries remove_country_exception TAX_CONFIGURATION_COUNTRY_ID{
"name": "era__tax__remove_country_exception",
"arguments": {
"id": "TAX_CONFIGURATION_COUNTRY_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde tax:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 tax_exception_not_found · 429 çok sık istek
tax.remove_rate
Vergi oranını kaldır — Bir ülke oranını kaldırır. Fiyatlandırılmış belgeler kopyalarını korur.
Gereken izin tax:manage · siler ya da geri alınamaz · Era çalıştırırken bir kişiye onaylatır
https://app.getera.io/api/v1/tax_rates/{id}/actions/remove_rate- Asıl adres:
POST /api/v1/actions/tax.remove_rate
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Oran · kimliği: tax_rate |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
tax_rate_not_found | Oran bulunmalı. |
Yayımladığı olaylar: tax.rate_changed
Neye yazar: tax_rate (delete) — Removes the rate
curl -X POST https://app.getera.io/api/v1/tax_rates/TAX_RATE_ID/actions/remove_rate \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"tax.rate_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.taxRates.removeRate("TAX_RATE_ID")era tax_rates remove_rate TAX_RATE_ID{
"name": "era__tax__remove_rate",
"arguments": {
"id": "TAX_RATE_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde tax:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 tax_rate_not_found · 429 çok sık istek
tax.save_class
Vergi sınıfını kaydet — Bir vergi sınıfı oluşturur veya yeniden adlandırır — bir fiyatın hangi kategoride vergilendirildiği.
Gereken izin tax:manage · veriyi değiştirir
https://app.getera.io/api/v1/tax_classes/{id}/actions/save_class- Asıl adres:
POST /api/v1/actions/tax.save_class
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | Doldurulduğu yer: adresteki {id} · Vergi sınıfı · kimliği: tax_class | |
name | string | evet | Ad · en çok 255 |
description | string | Açıklama · en çok 2000 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
tax_class_not_found | Yeniden adlandırılan sınıf bulunmalı. |
tax_class_name_taken | İki vergi sınıfı aynı adı paylaşamaz. |
Yayımladığı olaylar: tax.class_saved
Neye yazar: tax_class (upsert) — Writes the class
curl -X POST https://app.getera.io/api/v1/tax_classes/TAX_CLASSE_ID/actions/save_class \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"Name"}'{
"ok": true,
"result": "…",
"events": [
"tax.class_saved"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.taxClasses.saveClass("TAX_CLASSE_ID", {
name: "Name"
})era tax_classes save_class TAX_CLASSE_ID \
--name "Name"{
"name": "era__tax__save_class",
"arguments": {
"id": "TAX_CLASSE_ID",
"name": "Name"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde tax:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 tax_class_not_found, tax_class_name_taken · 429 çok sık istek
tax.save_configuration
Vergi yapılandırmasını kaydet — Verginin alınıp alınmayacağı ve nasıl alınacağı — çalışma alanı için ya da tek bir satış kanalı için.
Gereken izin tax:manage · veriyi değiştirir
https://app.getera.io/api/v1/tax_configurations/actions/save_configuration- Asıl adres:
POST /api/v1/actions/tax.save_configuration
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
channelId | uuid | Kanal | |
chargeTaxes | boolean | evet | Vergi uygula |
calculationStrategy | string (enum) | Hesaplama yöntemi · İzin verilen değerler: flat_rates, tax_app | |
displayGrossPrices | boolean | Fiyatları vergi dâhil göster | |
pricesEnteredWithTax | boolean | Fiyatlar vergi dâhil girilir | |
taxAppId | string | Vergi uygulaması · en çok 256 | |
useWeightedTaxForShipping | boolean | Kargo için ağırlıklı vergi |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
tax_app_id_required | Vergi uygulaması stratejisi, vergiyi hesaplayan uygulamayı gerektirir. |
Yayımladığı olaylar: tax.configuration_changed
Neye yazar: tax_configuration (upsert) — Writes the configuration
curl -X POST https://app.getera.io/api/v1/tax_configurations/actions/save_configuration \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"chargeTaxes":true}'{
"ok": true,
"result": "…",
"events": [
"tax.configuration_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.taxConfigurations.saveConfiguration({
chargeTaxes: true
})era tax_configurations save_configuration \
--charge-taxes true{
"name": "era__tax__save_configuration",
"arguments": {
"chargeTaxes": true
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde tax:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 tax_app_id_required · 429 çok sık istek
tax.set_country_exception
Ülke istisnası belirle — Tek bir ülke için yapılandırmayı geçersiz kılar.
Gereken izin tax:manage · veriyi değiştirir
https://app.getera.io/api/v1/tax_configuration_countries/actions/set_country_exception- Asıl adres:
POST /api/v1/actions/tax.set_country_exception
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
configurationId | uuid | evet | Yapılandırma · kimliği: tax_configuration |
country | string | evet | Ülke · en çok 2 |
chargeTaxes | boolean | evet | Vergi uygula |
calculationStrategy | string (enum) | Hesaplama yöntemi · İzin verilen değerler: flat_rates, tax_app | |
displayGrossPrices | boolean | Fiyatları vergi dâhil göster | |
taxAppId | string | Vergi uygulaması · en çok 256 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
invalid_country | Ülke, iki harfli bir ISO-3166 kodu olmalı. |
tax_configuration_not_found | Yapılandırma bulunmalı. |
Yayımladığı olaylar: tax.configuration_changed
Neye yazar: tax_configuration_country (upsert) — Writes the exception
curl -X POST https://app.getera.io/api/v1/tax_configuration_countries/actions/set_country_exception \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"configurationId":"TAX_CONFIGURATION_ID","country":"Country","chargeTaxes":true}'{
"ok": true,
"result": "…",
"events": [
"tax.configuration_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.taxConfigurationCountries.setCountryException({
configurationId: "TAX_CONFIGURATION_ID",
country: "Country",
chargeTaxes: true
})era tax_configuration_countries set_country_exception \
--configuration-id "TAX_CONFIGURATION_ID" \
--country "Country" \
--charge-taxes true{
"name": "era__tax__set_country_exception",
"arguments": {
"configurationId": "TAX_CONFIGURATION_ID",
"country": "Country",
"chargeTaxes": true
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde tax:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invalid_country, tax_configuration_not_found · 429 çok sık istek
tax.set_rate
Vergi oranı belirle — Bir ülkenin oranı — bir sınıf için ya da sınıf verilmezse ülke varsayılanı.
Gereken izin tax:manage · veriyi değiştirir
https://app.getera.io/api/v1/tax_rates/actions/set_rate- Asıl adres:
POST /api/v1/actions/tax.set_rate
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
taxClassId | uuid | Vergi sınıfı · kimliği: tax_class | |
country | string | evet | Ülke · en çok 2 |
rate | number | evet | Oran (%) · en az 0 · en çok 100 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
invalid_country | Ülke, iki harfli bir ISO-3166 kodu olmalı. |
tax_class_not_found | Sınıf bulunmalı. |
Yayımladığı olaylar: tax.rate_changed
Neye yazar: tax_rate (upsert) — Writes the rate
curl -X POST https://app.getera.io/api/v1/tax_rates/actions/set_rate \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"country":"Country","rate":1}'{
"ok": true,
"result": "…",
"events": [
"tax.rate_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.taxRates.setRate({
country: "Country",
rate: 1
})era tax_rates set_rate \
--country "Country" \
--rate 1{
"name": "era__tax__set_rate",
"arguments": {
"country": "Country",
"rate": 1
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde tax:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invalid_country, tax_class_not_found · 429 çok sık istek
Veri modelleri
TaxClass
Tablo tax_class · Kaynak tax_classes
GET /api/v1/tax_classesGET /api/v1/tax_classes/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
name | string · text | |||
description | string · text | evet | ||
archived_at | string (date-time) · timestamptz | evet | ||
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Denetimler:
CHECK ((length(TRIM(BOTH FROM name)) > 0))
TaxConfigurationCountry
Tablo tax_configuration_country · Kaynak tax_configuration_countries
GET /api/v1/tax_configuration_countriesGET /api/v1/tax_configuration_countries/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
tax_configuration_id | string (uuid) · uuid | tax_configuration | ||
country | string · bpchar | en çok 2 | ||
charge_taxes | boolean · bool | |||
calculation_strategy | string · text | evet | ||
display_gross_prices | boolean · bool | |||
tax_app_id | string · text | evet | ||
use_weighted_tax_for_shipping | boolean · bool | |||
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Tekil: tax_configuration_id, country
Denetimler:
CHECK (((calculation_strategy IS NULL) OR (calculation_strategy = ANY (ARRAY['flat_rates'::text, 'tax_app'::text]))))CHECK ((country ~ '^[A-Z]{2}$'::text))
TaxConfiguration
Tablo tax_configuration · Kaynak tax_configurations
GET /api/v1/tax_configurationsGET /api/v1/tax_configurations/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
channel_id | string (uuid) · uuid | evet | ||
charge_taxes | boolean · bool | |||
calculation_strategy | string · text | flat_rates, tax_app | ||
display_gross_prices | boolean · bool | |||
prices_entered_with_tax | boolean · bool | |||
tax_app_id | string · text | evet | ||
use_weighted_tax_for_shipping | boolean · bool | |||
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Denetimler:
CHECK (((calculation_strategy <> 'tax_app'::text) OR (tax_app_id IS NOT NULL)))
TaxRate
Tablo tax_rate · Kaynak tax_rates
GET /api/v1/tax_ratesGET /api/v1/tax_rates/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
tax_class_id | string (uuid) · uuid | evet | tax_class | |
country | string · bpchar | en çok 2 | ||
rate | string (decimal) · numeric | |||
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Denetimler:
CHECK ((country ~ '^[A-Z]{2}$'::text))CHECK (((rate >= (0)::numeric) AND (rate <= (100)::numeric)))
Olaylar
İş akışları ve webhook'lar bu olaylara tepki verir.
| Olay | Ne olur | Taşıdığı alanlar |
|---|---|---|
tax.class_archived | Bir vergi sınıfı arşivlendi ya da geri getirildi. | id, archived |
tax.class_saved | Bir vergi sınıfı oluşturuldu ya da yeniden adlandırıldı. | id, name |
tax.configuration_changed | Vergi hesaplama ayarları değişti. | id, channelId, country |
tax.rate_changed | Bir ülke oranı değişti. | id, country, taxClassId, rate |