İçeriğe geç

Araç tanımını key ile getir

GET
/v1/public/tools/by-key/{key}
curl --request GET \
--url 'https://api.mirac-ozdemir.com/v1/public/tools/by-key/kdv?locale=tr'

Aracın canlı (yayındaki) sürümünü döndürür: inputSchema (girdiler, türleri, sınırları), outputSchema (sonuç alanları), uiSchema (form düzeni ipuçları), content.labels (seçilen dildeki etiketler), güncel oranlar (rates, ratesAsOf) ve versionNumber. Kendi formunuzu bu tanımdan üretebilirsiniz. Araç yoksa, yayında değilse veya bu dilde içeriği yoksa 404 döner (başka dile geri düşülmez).

key
required
string
>= 2 characters <= 64 characters /^[a-z0-9]+(-[a-z0-9]+)*$/

Example

kdv

Aracın kalıcı anahtarı (ör. kdv): küçük harf, rakam ve tire, 2–64 karakter (^[a-z0-9]+(-[a-z0-9]+)*$).

locale
required
string
Allowed values: tr en

İçerik dili: tr veya en. Zorunludur; araç o dilde yoksa 404 döner.

Araç tanımı ve sayfa verisi

Media typeapplication/json
object
data
required
object
id
required

Veritabanı kimliği (UUID). Ortamdan ortama değişir; entegrasyonlarda key kullanın.

string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
key
required

Kalıcı araç anahtarı (ör. kdv); tüm ortamlarda aynıdır.

string
versionNumber
required
Any of:
integer
>= -9007199254740991 <= 9007199254740991
contentHash
required

Yayınlanmış sürümün içerik özeti; önbellek anahtarı olarak kullanılabilir.

string | null
publishedAt
required
string | null
updatedAt
required
string
category
required

Primary category key

string
availability
required

MAINTENANCE: the page shows a maintenance notice (503) and calculations are refused

string
Allowed values: ONLINE MAINTENANCE
categoryPath
required

Breadcrumb trail of the primary category, main category first

Array<object>
object
key
required
string
slug
required
string
name
required
string
path
required
string
categories
required

Every category the tool is listed in, primary first

Array<object>
object
key
required
string
slug
required
string
name
required
string
path
required
string
disclaimer
required

Gösterilmesi gereken uyarı türü (TAX, FINANCIAL, LEGAL, HEALTH veya NONE).

string
Allowed values: NONE TAX FINANCIAL LEGAL HEALTH
indexable
required

Arama motorlarına açık mı (yalnızca web sitesi için anlamlı).

boolean
locale
required
string
Allowed values: tr en
slug
required
string
path
required

Web sitesindeki sayfa yolu (https://mirac-ozdemir.com ile birleştirin).

string
title
required
string
content
required

Seçilen dildeki metinler; form etiketleri content.labels içindedir.

object
shortDescription
required
string
0 <= 300 characters
longDescription
required
string
<= 20000 characters
instructions
required
string
<= 10000 characters
notes
required
string
<= 10000 characters
warnings
required
Array<string>
<= 10 items
faq
required
Array<object>
<= 30 items
object
question
required
string
>= 1 characters <= 300 characters
answer
required
string
<= 5000 characters
keywords
required
Array<string>
<= 30 items
references
Array<object>
<= 8 items
object
title
required
string
>= 3 characters <= 200 characters
publisher
string
>= 2 characters <= 120 characters
url
required
string format: uri
<= 500 characters
labels
required

Form ve sonuç etiketleri.

object
inputs
required

Girdi alanı adı → etiketler. options, enum değerinin görünen adıdır.

object
key
additional properties
object
label
required
string
description
string
placeholder
string
help
string
options
object
key
additional properties
string
outputs
required

Sonuç anahtarı → etiket.

object
key
additional properties
object
label
required
string
description
string
sections
required

Bölüm anahtarı → başlık.

object
key
additional properties
object
title
required
string
description
string
seo
required
object
metaTitle
required
string
0 <= 120 characters
metaDescription
required
string
0 <= 300 characters
ogTitle
string
0 <= 120 characters
ogDescription
string
0 <= 300 characters
ogImage
required
string
Allowed values: default tax finance math conversion date health
robotsIndex
required
boolean
robotsFollow
required
boolean
inputSchema
required

Girdi tanımı: hangi alanlar, türleri, sınırları ve varsayılanları.

object
fields
required

Alan adı → alan tanımı.

object
<= 50 properties
key
additional properties
One of: discriminator: type

Ondalık sayı. Değer string olarak gönderilir (ör. "1234.56"): nokta ondalık ayırıcıdır, binlik ayırıcı yoktur. JSON number reddedilir (TYPE_MISMATCH).

object
type
required
Allowed value: decimal
required
required

true ise değer gönderilmelidir. false ise gönderilmeyen alan için default kullanılır.

boolean
scale
required

İzin verilen azami ondalık hane sayısı; fazlası SCALE_EXCEEDED hatası verir.

integer
<= 10
min

Alt sınır (dahil), ondalık string. Dışındaki değerler OUT_OF_RANGE.

string
max

Üst sınır (dahil), ondalık string.

string
default

Değer gönderilmezse kullanılan varsayılan.

string
outputSchema
required

Sonuç alanları ve biçimleri.

object
fields
required
Array<object>

Bir sonuç alanı. Değer her zaman string döner: ondalıklar tam scale haneyle (ör. "1200.00"), tarihler YYYY-MM-DD.

object
key
required

Sonuç anahtarı (data.result içindeki ad).

string
/^[a-z][A-Za-z0-9_]{0,63}$/
type
required
string
Allowed values: decimal date
format
required

Gösterim biçimi: money (para; currency dolu), percent (yüzde değeri; "20" = %20), number, date.

string
Allowed values: money percent number date
scale
required

Sonuçtaki ondalık hane sayısı (tarihlerde 0).

integer
<= 10
currency

ISO 4217 para birimi (ör. TRY); money biçiminde bulunur.

string
/^[A-Z]{3}$/
unit

Varsa birim (ör. gün, ay).

string
uiSchema
required

Form düzeni ve bileşen ipuçları (yalnızca sunum).

object
sections
required

Form bölümleri, gösterim sırasıyla. Bölüm başlıkları content.labels.sections.<key> içindedir.

Array<object>
object
key
required
string
/^[a-z][A-Za-z0-9_]{0,63}$/
fields
required

Bu bölümdeki girdi alanları, sırasıyla.

Array<string>
fields
required

Girdi alanı adı → sunum ipucu.

object
key
additional properties
object
widget
required

Önerilen form bileşeni.

string
Allowed values: number money percent date select radio checkbox switch
currency

money bileşeni için para birimi.

string
/^[A-Z]{3}$/
showRateValues

Oran seçimine bağlı enum alanlarında her seçeneğin yanında güncel oranı (rates[]) gösterin.

boolean
visibleWhen

Alan yalnızca belirtilen girdi bu değere eşitken gösterilir. Gizli alan için değer göndermeyin (varsayılan kullanılır).

object
input
required
string
/^[a-z][A-Za-z0-9_]{0,63}$/
equals
required
string | boolean
width
string
Allowed values: full half
result
object
highlight

Öne çıkarılacak sonuç anahtarları.

Array<string>
alternates
required
Array<object>
object
locale
required
string
Allowed values: tr en
slug
required
string
path
required
string
related
required
Array<object>
object
locale
required
string
Allowed values: tr en
slug
required
string
path
required
string
key
required
string
title
required
string
shortDescription
required
string
ratesAsOf
required

Gösterilen oranların geçerli olduğu tarih (bugün, Europe/Istanbul).

string
rates
required

Aracın kullandığı güncel oranlar ve kaynakları (gösterim amaçlı; hesaplama sunucuda yapılır).

Array<object>
object
binding
required
string
option
required
string | null
key
required
string
name
string
description
string | null
value
required
string
unit
required
string
effectiveFrom
required
string
effectiveTo
required
string | null
source
required
string
sourceUrl
required
string | null
lastReviewedAt
required
string | null

Example

{
"data": {
"id": "0b9f3c2e-8f56-4b43-9a7c-3c1b1f5e9d10",
"key": "kdv",
"versionNumber": 1,
"contentHash": "c0ffee00c0ffee00c0ffee00c0ffee00c0ffee00c0ffee00c0ffee00c0ffee00",
"publishedAt": "2026-09-30T08:00:00.000Z",
"updatedAt": "2026-09-30T08:00:00.000Z",
"category": "kdv",
"categoryPath": [
{
"key": "tax",
"slug": "vergi",
"name": "Vergi",
"path": "/tr/kategori/vergi"
},
{
"key": "kdv",
"slug": "kdv",
"name": "KDV Araçları",
"path": "/tr/kategori/kdv"
}
],
"categories": [
{
"key": "kdv",
"slug": "kdv",
"name": "KDV Araçları",
"path": "/tr/kategori/kdv"
}
],
"disclaimer": "TAX",
"indexable": true,
"locale": "tr",
"slug": "kdv-hesaplama",
"path": "/tr/araclar/kdv-hesaplama",
"title": "KDV Hesaplama",
"content": {
"shortDescription": "KDV dahil ve KDV hariç tutarları güncel KDV oranlarıyla hesaplayın.",
"longDescription": "…",
"instructions": "…",
"notes": "",
"warnings": [],
"faq": [],
"keywords": [
"kdv",
"katma değer vergisi"
],
"labels": {
"inputs": {
"amount": {
"label": "Tutar",
"placeholder": "0,00",
"help": "Hesaplamak istediğiniz tutarı Türk lirası olarak girin."
},
"mode": {
"label": "Girilen tutar",
"options": {
"exclusive": "KDV hariç",
"inclusive": "KDV dahil"
}
},
"vatRateOption": {
"label": "KDV oranı",
"options": {
"standard": "Genel oran",
"reduced10": "İndirimli oran",
"reduced1": "İndirimli oran (temel gıda vb.)"
}
}
},
"outputs": {
"net": {
"label": "KDV hariç tutar"
},
"vat": {
"label": "KDV tutarı"
},
"gross": {
"label": "KDV dahil tutar"
}
},
"sections": {
"main": {
"title": "Hesaplama bilgileri"
}
}
}
},
"seo": {
"metaTitle": "KDV Hesaplama — KDV Dahil ve Hariç Tutar Hesaplama",
"metaDescription": "KDV dahil ve KDV hariç tutarları güncel %20, %10 ve %1 KDV oranlarıyla anında hesaplayın.",
"ogImage": "tax",
"robotsIndex": true,
"robotsFollow": true
},
"inputSchema": {
"fields": {
"amount": {
"type": "decimal",
"required": true,
"scale": 2,
"min": "0",
"max": "999999999999.99"
},
"mode": {
"type": "enum",
"required": true,
"values": [
"exclusive",
"inclusive"
],
"default": "exclusive"
},
"vatRateOption": {
"type": "enum",
"required": true,
"values": [
"standard",
"reduced10",
"reduced1"
],
"default": "standard"
}
}
},
"outputSchema": {
"fields": [
{
"key": "net",
"type": "decimal",
"format": "money",
"currency": "TRY",
"scale": 2
},
{
"key": "vat",
"type": "decimal",
"format": "money",
"currency": "TRY",
"scale": 2
},
{
"key": "gross",
"type": "decimal",
"format": "money",
"currency": "TRY",
"scale": 2
}
]
},
"uiSchema": {
"sections": [
{
"key": "main",
"fields": [
"amount",
"mode",
"vatRateOption"
]
}
],
"fields": {
"amount": {
"widget": "money",
"currency": "TRY"
},
"mode": {
"widget": "radio"
},
"vatRateOption": {
"widget": "select",
"showRateValues": true
}
},
"result": {
"highlight": [
"net",
"vat",
"gross"
]
}
},
"alternates": [
{
"locale": "tr",
"slug": "kdv-hesaplama",
"path": "/tr/araclar/kdv-hesaplama"
},
{
"locale": "en",
"slug": "vat-calculator",
"path": "/en/tools/vat-calculator"
}
],
"related": [],
"ratesAsOf": "2026-10-01",
"rates": [
{
"binding": "vatRate",
"option": "standard",
"key": "tr.vat.standard",
"name": "KDV genel oran",
"description": null,
"value": "20",
"unit": "PERCENT",
"effectiveFrom": "2023-07-10",
"effectiveTo": null,
"source": "Cumhurbaşkanı Kararı No. 7346 (Resmî Gazete, 07.07.2023, Sayı 32241)",
"sourceUrl": null,
"lastReviewedAt": "2026-10-01T09:00:00.000Z"
},
{
"binding": "vatRate",
"option": "reduced10",
"key": "tr.vat.reduced-10",
"name": "KDV indirimli oran (%10)",
"description": null,
"value": "10",
"unit": "PERCENT",
"effectiveFrom": "2023-07-10",
"effectiveTo": null,
"source": "Cumhurbaşkanı Kararı No. 7346 (Resmî Gazete, 07.07.2023, Sayı 32241)",
"sourceUrl": null,
"lastReviewedAt": "2026-10-01T09:00:00.000Z"
},
{
"binding": "vatRate",
"option": "reduced1",
"key": "tr.vat.reduced-1",
"name": "KDV indirimli oran (%1)",
"description": null,
"value": "1",
"unit": "PERCENT",
"effectiveFrom": "2023-07-10",
"effectiveTo": null,
"source": "Cumhurbaşkanı Kararı No. 7346 (Resmî Gazete, 07.07.2023, Sayı 32241)",
"sourceUrl": null,
"lastReviewedAt": "2026-10-01T09:00:00.000Z"
}
]
}
}
X-Request-Id
string

İstek kimliği; destek taleplerinde iletin.

Bulunamadı

Media typeapplication/json

Tüm hatalarda aynı zarf. details yapısı koda göre değişir (bkz. API açıklamasındaki tablo).

object
error
required
object
code
required

Makine tarafından okunacak sabit kod; mantığınızı buna göre kurun.

string
Allowed values: VALIDATION_ERROR NOT_FOUND CONFLICT CALCULATION_ERROR RATE_UNAVAILABLE PAYLOAD_TOO_LARGE RATE_LIMITED TIMEOUT SERVICE_UNAVAILABLE MAINTENANCE INTERNAL_ERROR
message
required

İngilizce, insan tarafından okunacak açıklama; değişebilir.

string
details

fields[] (girdi hataları), issues[] (istek şeması), reason, currentVersion, retryAfterSeconds, rates, asOf.

object
key
additional properties
requestId
required

X-Request-Id yanıt başlığıyla aynı değer.

string | null

Examples

ExamplenotFound

Araç yok, yayında değil veya bu dilde yok

{
"error": {
"code": "NOT_FOUND",
"message": "Tool not found"
},
"requestId": "5f0c6a5e-2b7e-4a7b-9a51-0d9f0c1f7e21"
}
X-Request-Id
string

İstek kimliği; destek taleplerinde iletin.

Doğrulama, hesaplama veya oran hatası

Media typeapplication/json

Tüm hatalarda aynı zarf. details yapısı koda göre değişir (bkz. API açıklamasındaki tablo).

object
error
required
object
code
required

Makine tarafından okunacak sabit kod; mantığınızı buna göre kurun.

string
Allowed values: VALIDATION_ERROR NOT_FOUND CONFLICT CALCULATION_ERROR RATE_UNAVAILABLE PAYLOAD_TOO_LARGE RATE_LIMITED TIMEOUT SERVICE_UNAVAILABLE MAINTENANCE INTERNAL_ERROR
message
required

İngilizce, insan tarafından okunacak açıklama; değişebilir.

string
details

fields[] (girdi hataları), issues[] (istek şeması), reason, currentVersion, retryAfterSeconds, rates, asOf.

object
key
additional properties
requestId
required

X-Request-Id yanıt başlığıyla aynı değer.

string | null

Examples

ExampleinvalidParameter

Geçersiz parametre

{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request",
"details": {
"issues": [
{
"path": "locale",
"message": "Invalid option: expected one of \"tr\"|\"en\"",
"code": "invalid_value"
}
]
}
},
"requestId": "5f0c6a5e-2b7e-4a7b-9a51-0d9f0c1f7e21"
}
X-Request-Id
string

İstek kimliği; destek taleplerinde iletin.

Beklenmeyen sunucu hatası

Media typeapplication/json

Tüm hatalarda aynı zarf. details yapısı koda göre değişir (bkz. API açıklamasındaki tablo).

object
error
required
object
code
required

Makine tarafından okunacak sabit kod; mantığınızı buna göre kurun.

string
Allowed values: VALIDATION_ERROR NOT_FOUND CONFLICT CALCULATION_ERROR RATE_UNAVAILABLE PAYLOAD_TOO_LARGE RATE_LIMITED TIMEOUT SERVICE_UNAVAILABLE MAINTENANCE INTERNAL_ERROR
message
required

İngilizce, insan tarafından okunacak açıklama; değişebilir.

string
details

fields[] (girdi hataları), issues[] (istek şeması), reason, currentVersion, retryAfterSeconds, rates, asOf.

object
key
additional properties
requestId
required

X-Request-Id yanıt başlığıyla aynı değer.

string | null

Example

{
"error": {
"code": "NOT_FOUND",
"message": "Tool not found"
},
"requestId": "5f0c6a5e-2b7e-4a7b-9a51-0d9f0c1f7e21"
}
X-Request-Id
string

İstek kimliği; destek taleplerinde iletin.