← Dokümanlar

API

Projelerini, grafiklerini ve haritalarını başka bir uygulamadan okumak, yeni proje, grafik ve harita oluşturmak ve anahtarla oluşturduklarını güncellemek: kimlik, uç noktalar, istek ve yanıt biçimi, hata kodları, hız sınırı ve OpenAPI belgesi.

Son doğrulama: 2026-09-22 · 0 gün önce

Tuvelia API'si, başka bir uygulamanın (ör. bir WordPress eklentisinin ya da
kendi betiğinin) projelerini, grafiklerini ve haritalarını okumasını, yeni
proje, grafik ve harita oluşturmasını ve bir anahtarla oluşturduğu grafiklerin
ve haritaların verisini ve ayarlarını değiştirmesini sağlar. API ile hiçbir şey silinmez ve yayınlanmaz: yayın her
zaman Tuvelia'da, elle yapılır.

API şu an önizlemede. Tuvelia'nın kendi WordPress eklentisi yayınlanana
kadar uçlar ve alanlar değişebilir; alan kaldırmak ve ad değiştirmek de buna
dahildir. Her değişiklik, tarihiyle birlikte bu sayfanın sonundaki
Değişiklik günlüğü bölümüne yazılır. Önizleme bitince sürüm kuralı
yürürlüğe girer ve v1 içinde yalnız ekleme yapılır.

Kimlik

Her istek bir API anahtarı taşır. Anahtarı Hesap › API anahtarları
sayfasında oluşturursun (API anahtarları) ve
isteğe şu başlıkla eklersin:

Authorization: Bearer tuv_pat_…

Anahtar, oluşturan hesabın verisini okur ve yazar; başka bir hesabın projesini
göremez. Sözleşmenin tanıdığı tek kimlik yöntemi API anahtarıdır.

Uç noktalar

Bütün adresler https://tuvelia.com/api/v1 ile başlar.

İstekNe yapar
GET /projectsProjelerin, en yenisi önce: kimlik, ad, oluşturulma zamanı.
POST /projectsYeni, boş bir proje oluşturur.
GET /projects/{projectId}/chartsProjedeki grafikler, editördeki sırayla. Veri ve ayar gelmez; yayındaki grafik gömme adresleriyle gelir.
POST /projects/{projectId}/chartsProjeye yeni grafik ekler.
GET /charts/{chartId}Grafiğin verisi (tablo) ve görünüm ayarları.
PATCH /charts/{chartId}Grafiğin ayarlarını değiştirir; yalnız gönderdiğin alanlar değişir.
PUT /charts/{chartId}/dataGrafiğin verisini baştan yazar; ayarlar değişmez.
GET /chart-templatesPOST .../charts gövdesindeki template alanına yazabileceğin başlangıç şablonları.
GET /chart-optionsAyarların listesi: adı, türü, ne işe yaradığı ve seçenekli olanlarda geçerli değerlerin tamamı. ?chartType=scatter ile o tipe özgü ayarlar da gelir.
GET /projects/{projectId}/mapsProjedeki haritalar, editördeki sırayla. Veri ve ayar gelmez; yayındaki harita gömme adresleriyle gelir.
GET /maps/{mapId}Haritanın çizilen satırları, ham kaynağı ve ayarları.
GET /geographiesHaritaya altlık olabilecek coğrafyalar: config.geographyId alanına ne yazılabileceği.
GET /geographies/{geographyId}/scope-parentsO coğrafyada kapsam olarak seçilebilecek üst birimler, adıyla ve çizilecek bölge sayısıyla.
GET /region-presetsHazır çok ülkeli bölge listeleri (Baltık, AB-27, Balkanlar…).
GET /map-optionsHarita ayarlarının listesi: adı, türü, ne işe yaradığı ve seçenekli olanlarda geçerli değerlerin tamamı.
POST /projects/{projectId}/mapsProjeye yeni harita ekler (veri ayrı uçtan yazılır).
PATCH /maps/{mapId}Haritanın ayarlarını değiştirir; yalnız gönderdiğin alanlar değişir.
PUT /maps/{mapId}/dataHaritanın verisini baştan yazar; bölge adlarını sunucu çözer.

Kimlikler UUID biçimindedir (ör. 3f2b8c1e-5a4d-4e6f-9b7a-1c2d3e4f5a6b).
Coğrafya kimlikleri bunun DIŞINDADIR: onlar de-adm2 gibi kısa anahtarlardır.
Bu sürümde grafikler ve haritalar okunabilir ve yazılabilir. Hikâyeler listede
yer almaz.

Örnek:

curl -H "Authorization: Bearer tuv_pat_…" https://tuvelia.com/api/v1/projects
{
  "projects": [
    { "id": "3f2b8c1e-…", "name": "Haber grafikleri", "createdAt": "2026-09-02T12:00:00.000Z" }
  ]
}

Zamanlar ISO 8601 biçiminde ve UTC'dir.

Yayındaki grafiği ya da haritayı gömmek

Grafik ve harita yanıtlarında, listede de tek öğe okumasında da, yayındaki
öğenin published alanı doludur; yayında olmayan öğede bu alan nulldır.
published.urls üç adres taşır:

  • live: etkileşimli, canlı çizim. <iframe> ile gömmek için budur; ipucu
    kutuları ve zaman imleci çalışır. Her zaman doludur.
  • page: grafiğin tek başına açılan sayfası. null olabilir.
  • svg: grafiğin durağan görüntüsü. null olabilir.

page ve svg durağan görüntüye dayanır. Bir yayında durağan görüntü yoksa bu
iki adres çalışmaz; API o durumda adres uydurmaz, null döner. Programın bu
ikisini kullanmadan önce dolu olup olmadığına bakmalı; live her yayında
çalışır.

Yayındaki görüntü, öğe Tuvelia'da yeniden yayınlanana kadar değişmez. API ile
verisini değiştirdiğin bir grafik ya da harita da öyledir: yeni veri, öğeyi
Tuvelia'da yeniden yayınladığında görünür. published.stale bunu söyler:
true ise öğede yapılan değişiklikler gömülü görüntüde henüz görünmüyor. API
yayınlayamaz; kullanıcının Tuvelia'da Yeniden yayınla demesi gerekir.

Grafiğin içeriği

GET /charts/{chartId} yanıtında data tablo biçimindedir: headers sütun
başlıklarıdır (ilki kategori sütunu), rows satırlardır. Her hücre METİN
olarak gelir, sayılar da; boş hücre "ölçüm yok" demektir, sıfır değil.

⚠ Ondalık ayırıcı NOKTADIR ("64.8"). Virgüllü yazım ("64,8") sayı
sayılmaz: o hücre sıfır olarak çizilir ve grafik boş görünebilir. Sayıların
ekranda nasıl yazılacağı ayrı bir ayardır (grafik ayarlarındaki sayı biçimi);
gönderdiğin veriyi etkilemez.

title grafiğin Tuvelia'daki adıdır, yani proje listesinde gördüğün ad.
Grafiğin üstünde görünen başlık bu değil, config.title alanıdır; ikisi
farklı olabilir.

config grafiğin görünüm ayarlarıdır: grafik tipi (chartType), renkler,
eksenler, notlar, künye. Ayar alanları zamanla çoğalır; tanımadığın alanları
yok say.

config içinde neye söz veriliyor. Sürüm kuralı config nesnesinin
tamamını değil, şu alanları kapsar: chartType, title, subtitle,
sourceName, sourceLink. Nesnedeki diğer ayarlar Tuvelia'nın iç ayarlarıdır:
okuyabilir ve geri yazabilirsin, ama haber verilmeden değişebilirler.
Programını onlara bağlama.

Yanıtta üç alan daha vardır:

  • version: içerik sürümü. Veri ya da ayar her değiştiğinde artar.

  • apiManaged: grafiğin bir API anahtarıyla oluşturulmuş olduğunu söyler;
    alanın anlamı budur. Bugünkü kural gereği anahtar yalnız true olan
    grafikleri değiştirebilir. Grafik listesinde de bu alan vardır.

  • warnings: verinin bir kısmı çizilmiyorsa uyarılar, yoksa boş dizi. Örneğin
    ağaç haritası boş, sıfır ya da eksi değerli satırları çizemez; yarış aynı anda
    sınırlı sayıda varlık gösterir. Her uyarı bir code, çizilmeyenlerin sayısı
    (count) ve Türkçe bir açıklama (message) taşır. Veri silinmez, yalnız
    çizilmez.

    En önemlisi nothing_drawn: grafiğin hiçbir öğesi çizilmiyor demektir.
    Yarış, dağılım, süre çizelgesi ve ağaç haritası bir eşleme olmadan boş çizilir
    (ör. yarış için config.temporal); uyarı hangi ayarın eksik olduğunu ve varsa
    hangi template ile hazır kurulacağını söyler. Bu uyarıyı gördüğünde grafik
    oluşturma isteği başarılı olmuştur ama grafik boştur.

    Bir uyarı da sayı biçimiyle ilgilidir: comma_decimal_cells, virgüllü ondalık
    taşıyan ("12,5") ve bu yüzden sıfır çizilen hücreleri sayar. Veri yazarken
    ondalık ayırıcı noktadır; bu uyarıyı görüyorsan gönderdiğin sayılar grafikte
    görünmüyor demektir.

Haritanın içeriği

GET /maps/{mapId} yanıtında veri iki biçimde gelir ve aradaki fark önemlidir:

  • rawRows — haritanın ham kaynağı: { "input": "Ankara", "value": "806.2" }.
    Bölge adı yazıldığı gibi durur ve coğrafyada karşılığı bulunamayan satırlar da
    buradadır
    .
  • data — haritada gerçekten çizilen satırlar: { "id": 6, "value": 806.2, "label": "Ankara" }. Bölge adı coğrafyanın sayısal kimliğine çözülmüştür.

Eşleşmeyen bir satır rawRowsta vardır ama datada yoktur. Bu yüzden veriyi
okuyup değiştirmek istersen rawRowsu temel al: datadan türetip geri
yazmak, eşleşmeyen satırları sessizce silerdi.

Zamanlı haritalarda her satırda bir at alanı bulunur:
{ "precision": "year", "iso": "1985" }. isonun biçimi precisiona bağlıdır
(year1985, month1985-03, day1985-03-17). Yıllık bir veriyi
1985-01-01 diye yazmak, eksende olmayan bir gün kesinliği uydurur.

config haritanın ayarlarıdır. Sözleşmenin kapsadığı alanlar geographyId
(hangi coğrafya), view (kapsam), meta (künye) ve temporal (zaman beyanı);
diğerleri Tuvelia'nın iç ayarlarıdır.

Harita coğrafyaları ve kapsam

Bir haritanın altlığı config.geographyId ile seçilir. Geçerli değerleri
GET /geographies listeler; her satır coğrafyanın adını, ait olduğu ülkeyi ve
idari düzeyini verir.

Kapsam (config.view.scope) haritanın yalnız bir bölümünü çizmeye yarar ve iki
türü vardır:

  • Üst birime göre{ "parentId": 15 } yalnız o üst birimin alt
    birimlerini çizer (ör. bir eyaletin ilçeleri). Yazılabilecek değerleri
    GET /geographies/{geographyId}/scope-parents listeler; her satır üst birimin
    adını ve seçilirse çizilecek bölge sayısını verir. Bu keşif ucu gereklidir:
    bazı coğrafyalarda yüzlerce üst birim vardır ve hata mesajı hepsini sayamaz.
    Coğrafyanın parentGeographyId alanı null ise bu tür kapsam kullanılamaz.
  • Kimlik listesine göre{ "ids": [233, 428, 440] } yalnız o bölgeleri
    çizer ve her düzeyde çalışır. Hazır çok ülkeli listeler için
    GET /region-presetse bak: yanıttaki ids değerini olduğu gibi kullan,
    listenin adını değil. Liste ileride değişirse adı kaydedilmiş bir harita
    sessizce başka bir şey gösterirdi.

Harita oluşturmak ve veri yazmak

Harita iki adımda kurulur ve bu bilinçli: bölge adlarının coğrafyaya
çözülmesi ayrı bir iştir ve eşleşme raporunu veri ucu döndürür.

1. Haritayı oluştur — veri göndermezsin, harita boş doğar:

POST /projects/{projectId}/maps
{ "title": "İllere göre nüfus", "config": { "geographyId": "tr-adm1" } }

geographyId değerlerini GET /geographies listeler. Projeksiyon coğrafyadan
türetilir; harita hesabının varsayılan marka kitini giyer. Yanıt 201 ve
Location başlığıyla gelir.

2. Veriyi yaz — bölge adlarını gönderirsin, sunucu çözer:

PUT /maps/{mapId}/data
{
  "rows": [
    { "region": "Ankara", "value": "5803" },
    { "region": "İstanbul", "value": "15907" }
  ]
}

Değerler metin olarak gönderilir ve ondalık ayırıcı noktadır ("806.2");
binlik ayırıcı kullanılmaz ("4946", "4.946" değil). Sütunun geri kalanı
kanıtlarsa virgüllü ondalık çevrilir (806,2 → 806.2). Belirsiz (4.946,
1,234) ya da sayı olmayan değerler yanıtta uyarıyla bildirilir; sayı olmayan
değer (abc, N/A) çizilmez, boş değer 0 sayılır.
Zamanlı harita için her satıra at eklersin:
{ "region": "Ankara", "value": "5803", "at": { "precision": "year", "iso": "2026" } }.
Zaman beyanı (config.temporal) at taşıyan satırlardan türetilir, ayrıca
göndermen gerekmez; hassasiyet ilk zamanlı satırınkidir. Zamanlı bir haritada
at taşımayan ya da hassasiyeti farklı olan satır reddedilmez: kaydedilir
ama çizilmez ve yanıtın warnings alanında undeclared_period_rows koduyla
adıyla sayılır. Hiçbir satırda at yoksa harita zamansızdır.

Eşleşmeyen satırlar sessizce düşmez. Bir bölge adı coğrafyada bulunamazsa ya
da haritanın kapsamı dışında kalırsa satır kaydedilir (rawRows'ta durur) ama
çizilmez, ve yanıtın warnings alanında adıyla sayılır:

"warnings": [
  { "code": "unmatched_rows", "count": 1,
    "message": "1 bölge adı bu coğrafyada bulunamadı: Lefkoşa. …" }
]

Uyarı kodları: unmatched_rows (ad çözülemedi) · mixed_id_types (ad ile kod
aynı veride karışık; bu yüzden bulunamayan satırlar) · out_of_scope_rows
(kapsam dışı) · matched_not_drawable (bu geometride yok) ·
undeclared_period_rows (satırın anı haritanın dönemlerinde yok — zamanlı
haritada at eksikse de bu gelir) · duplicate_rows (aynı bölge ya da
bölge+an için birden fazla değer; yalnız biri çizilir) · unreadable_values
(sayı değil, çizilmez) · ambiguous_number_cells (binlik mi ondalık mı
belirsiz) · comma_decimal_cells (virgüllü ondalık noktalıya çevrildi) ·
scheme_hidden_by_colors (renk şeması değişti ama katmandaki colors onu
gizliyor; yalnız PATCH yanıtında).

Hangi ayarlar var? GET /map-options hepsini listeler: adı, türü, ne işe
yaradığı ve seçenekli olanlarda (renk şeması, projeksiyon, lejant köşesi…)
geçerli değerlerin tamamı. Bir ayarı değiştirmeden önce buraya bakmak, geçersiz
bir değer gönderip 400 almaktan hızlıdır.

⚠ Renk şeması, basamak sayısı ve "veri yok" rengi layers dizisinin
içindedir
(layers[].colorScale.scheme gibi). Bu dizi bütün olarak yazılır:
tek bir alanı değiştirmek için haritayı oku, katman nesnesini kopyala, alanı
değiştir ve layersı tamamen geri gönder — eksik gönderdiğin alanlar kaybolur.

config.dataSource (konnektör künyesi) API ile yazılamaz. O blok verinin
hangi kaynaktan, hangi lisansla geldiğini söyleyen bir köken iddiasıdır ve
lisansı haritanın künyesine basılır; tek meşru yazarı Tuvelia'daki "Kaynaktan
veri" akışıdır. Kaynağı belirtmek için config.meta.source alanına serbest
metin yaz.

Ayarları değiştirmek için PATCH /maps/{mapId} kullanırsın; yalnız
gönderdiğin alanlar değişir. ⚠ geographyId değiştirirsen kapsam (view)
sıfırlanır — aynı çağrıda açıkça view göndermediysen. Sebebi: 15 Almanya'da
bir eyalet, başka bir ülkede başka bir bölgedir.

Haritalarda da anahtar yalnız anahtarla oluşturulan haritaları değiştirir;
Tuvelia'da oluşturduğun haritalar okunur ama değiştirilemez. expectedVersion
gönderirsen araya giren bir değişiklik yazımı conflict (409) ile reddeder.

Proje ve grafik oluşturmak

Yazma isteklerinin gövdesi JSON'dır ve Content-Type: application/json
başlığı zorunludur. Gövdede tanınmayan bir alan varsa (ör. yazım hatası) istek
reddedilir; alan sessizce yok sayılmaz.

Proje oluşturmak için adını gönderirsin:

curl -X POST https://tuvelia.com/api/v1/projects \
  -H "Authorization: Bearer tuv_pat_…" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Seçim grafikleri" }'

Yanıt 201 durumuyla projeyi döner. Proje adı en çok 200 karakter olabilir.

Grafik oluşturmak için bir ad ve genellikle veri gönderirsin:

curl -X POST https://tuvelia.com/api/v1/projects/{projectId}/charts \
  -H "Authorization: Bearer tuv_pat_…" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Yıllık enflasyon",
    "data": { "headers": ["Yıl", "TÜFE"], "rows": [["2023", "64.8"], ["2024", "44.4"]] },
    "config": { "chartType": "line", "sourceName": "TÜİK" }
  }'

Yanıt 201 durumuyla grafiği döner; Location başlığı grafiğin adresini
taşır. Oluşturulan grafik için şunları bil:

  • Hesabının varsayılan marka kitini giyer: renkleri ve yazı tipi Tuvelia'daki
    Yeni öğe ile oluşturduğun bir grafikle aynıdır.
  • Veri gönderir ve config.title vermezsen grafiğin görünen başlığı grafiğin
    adıdır, alt başlığı boştur. Veri göndermezsen grafik örnek veriyle ve o
    örneğin kendi başlığıyla oluşur; gerçek veriyi sonra PUT ile verirsin.
  • template alanı üç başlangıç şablonundan birini seçer: race (yarış),
    scatter (dağılım) ya da timeline (süre çizelgesi). Bu tipler veri eşlemesi
    olmadan boş çizer; şablon onları çalışır hâlde kurar. Gönderdiğin data ve
    config şablonun üzerine yazar.
  • configte GET /charts/{chartId} yanıtındaki ayar alanlarını kullanırsın.
    Notlar (annotations) API ile yazılamaz; notları Tuvelia'da eklersin.
  • Veri sınırları Tuvelia'dakiyle aynıdır: en çok 30 sütun, 5.000 satır, hücre
    başına 300 karakter.

Grafik yayınlanmaz. Gömmek için onu Tuvelia'da bir kez yayınlarsın.

Grafiği güncellemek

Bir API anahtarı YALNIZ anahtarla oluşturulmuş grafikleri (apiManaged: true)
değiştirebilir. Hesabının herhangi bir anahtarı bunu yapabilir; anahtarı
yenilediğinde uygulaman o grafikleri güncellemeye devam eder. Tuvelia'da
oluşturduğun grafikler anahtarla okunur ama değiştirilemez; istek 403
forbidden alır.

  • PATCH /charts/{chartId} gövdesinde config taşır ve yalnız gönderdiğin
    alanları değiştirir. Grafik tipini de böyle değiştirirsin:
    { "config": { "chartType": "bar" } }.
  • PUT /charts/{chartId}/data gövdesinde data taşır ve verinin tamamını
    yeniden yazar; ayarlar değişmez.

İkisi de güncellenen grafiği döner.

Arada değişen grafiğin üzerine yazmamak. Grafik bu arada Tuvelia'da
değişmiş olabilir. İstersen gövdeye son okuduğun sürümü eklersin:

{ "data": { … }, "expectedVersion": 7 }

Grafiğin sürümü artık 7 değilse yazma yapılmaz ve yanıt 409 conflict
olur; mesaj güncel sürümü söyler. Grafiği yeniden okur, değişikliğini güncel
hâline uygular ve tekrar gönderirsin. expectedVersion göndermezsen son yazan
kazanır.

Anahtarla yapılan her yazma, hangi anahtarla, ne zaman ve hangi proje ya da
grafik üzerinde yapıldığıyla kayda geçer. Kayıt içeriği (veriyi, ayarları)
tutmaz ve 90 gün saklanır.

Hatalar

Hata yanıtı her zaman aynı biçimdedir:

{ "error": { "code": "not_found", "message": "Grafik bulunamadı (id=…). …" } }

Programın codea bakmalı; message insan için yazılmış Türkçe bir
açıklamadır ve değişebilir.

KodHTTPNe demek
invalid_request400İstek geçersiz: kimlik UUID biçiminde değil, gövde JSON değil, bir alan eksik ya da tanınmayan bir alan var.
unauthorized401Anahtar yok, biçimsiz, geçersiz, süresi dolmuş ya da iptal edilmiş.
insufficient_scope403Anahtarın yazma yetkisi yok (eski, yalnız okuma yetkili anahtar). Yeni bir anahtar oluştur.
forbidden403Grafik ya da harita Tuvelia'da oluşturulmuş; anahtar onu değiştiremez.
not_found404Kaynak yok: silinmiş ya da başka bir hesaba ait olabilir.
conflict409Grafik ya da harita, gönderdiğin expectedVersiondan sonra değişti; yeniden oku ve tekrar dene.
payload_too_large413İstek gövdesi çok büyük.
rate_limited429Hız sınırı aşıldı; Retry-After başlığındaki saniye kadar bekle.
internal_error500Beklenmeyen bir hata; birazdan yeniden dene.
unavailable503Anahtar şu an doğrulanamadı, ama reddedilmedi; Retry-After kadar bekle.

İleride yeni kodlar eklenebilir; tanımadığın kodu HTTP durumuna göre ele al.

Hız sınırı

Okuma istekleri hesap başına 10 dakikada 300, yazma istekleri ayrıca 10
dakikada 120 ile sınırlıdır. Okumanın ve yazmanın bütçeleri birbirinden
bağımsızdır; hesabın bütün anahtarları bu bütçeleri paylaşır. Sınır aşılınca
yanıt 429 olur ve Retry-After başlığı kaç saniye bekleyeceğini söyler.

Bir yazma isteğinin gövdesi en çok 2 MB olabilir; daha büyüğü 413 alır.

Buradaki sayılar söz değildir ve değişebilir. Programın her durumda 429 ve
413 yanıtlarını karşılayabilmeli.

OpenAPI belgesi

API'nin makinece okunur tarifi şu adrestedir ve kimlik istemez:

https://tuvelia.com/api/v1/openapi.json

Belgeyi Postman gibi araçlara ya da bir ChatGPT eylemine (Actions) adresiyle
aktarabilirsin.

Sürüm kuralı

Şimdi (önizleme). API önizlemede olduğu sürece uçlar ve alanlar
değişebilir: bir alan kaldırılabilir, adı ya da anlamı değişebilir. Böyle bir
değişiklik önce aşağıdaki Değişiklik günlüğüne yazılır. Gereksiz değişiklik
yapılmaz; amaç, sözleşmeyi ilk gerçek kullanıcısı olan WordPress eklentisiyle
sınamak.

Önizleme bittikten sonra. v1 içinde yalnız ekleme yapılır: yeni uç ya da
yanıtlara yeni alan. Var olan bir alan silinmez, adı ya da anlamı değişmez;
böyle bir değişiklik /api/v2 olarak gelir.

Her iki dönemde de istemcin tanımadığı alanları ve tanımadığı hata kodlarını
yok saymalı.

Değişiklik günlüğü

  • 2026-09-22 — grafikte alt eksen adlarının açısı. Yeni opsiyonel ayar
    xAxis.labelAngle: horizontal (varsayılan, alan yoksa da böyle) ·
    diagonal (45°) · vertical · auto (yatay sığmıyorsa 45°, o da sığmıyorsa
    dikey). Yalnız dikey çubuk, yığılmış, çizgi, alan ve dikey dumbbell'da
    etkilidir. Döndürülmüş adlar alttan yer açar; grafik yüksekliğinin %40'ına
    sığmayan ad "…" ile kısalır. Her grafik tipinin ayar keşfinde görünür.
  • 2026-09-22 — haritada "Made with Tuvelia" satırı. Yeni opsiyonel ayar
    showBranding (üst düzeyde, metanın dışında): yoksa açık, false
    gizler. Satır sağ altta, coğrafya atfının sonunda durur; atıf bundan
    bağımsızdır ve gizlenemez. ⚠ Görünüm değişikliği: alanı hiç yazılmamış
    mevcut haritalarda da satır artık görünür ve alt satır payı açılır.
  • 2026-09-21 — haritada değer etiketleri. Yeni opsiyonel ayar
    labels.mode: off (varsayılan, alan yoksa da böyle) · all · exports
    (yalnız video, indirilen görsel ve ZIP karelerinde; gömülü haritada ve hikâyede
    yazılmaz). Sığmayan bölgede etiket basılmaz. Nesne bütün yazılır.
  • 2026-09-21 — haritada iki yeni ayar: doğal kırılım ve kaynak etiketi.
    layers[].colorScale.mode artık natural değerini de alır: birbirine yakın
    değerleri aynı renk basamağında toplar, tek bir dev değeri kendi basamağına
    ayırır. meta.sourceLabel (opsiyonel, varsayılan Kaynak) künyede kaynağın
    önüne basılan ön ektir; harita ": " ekler. ⚠ Görünüm değişikliği: künye
    artık "Kaynak: TÜİK · not · lisans" biçiminde basılıyor (eskiden ön eksiz ve
    uzun tireyle); meta.source alanına ön eki ayrıca yazma.
  • 2026-09-21 — belge düzeltmesi: haritada iç içe ayar nesneleri bütün
    yazılır.
    PATCH /maps/{mapId} ayarları yalnız üst düzeyde birleştirir;
    meta, legend, scaleBar, locator ve animation gibi iç içe nesneler
    bütün olarak yazılır ve eksik alan reddedilir. Belge bunu artık açıkça
    söylüyor; hata mesajı da eksik alanın adını veriyor. Davranış değişmedi.
  • 2026-09-21 — haritanın coğrafyası değişince veri yeniden çözülüyor;
    okuma yanıtı da uyarıları adıyla veriyor.
    PATCH /maps/{mapId} ile
    geographyId değiştiğinde veri artık yeni coğrafyaya göre yeniden çözülüyor.
    Davranış değişikliği: eskiden veri eski coğrafyanın kimlikleriyle
    kalıyordu ve değerler yeni haritada yanlış bölgelere boyanabiliyordu. Ham
    satırı olmayan eski bir kayıtta coğrafya değişimi artık anlaşılır bir hatayla
    reddediliyor. Aynı geographyId'yi yeniden göndermek artık değişim sayılmıyor
    ve kapsamı sıfırlamıyor. GET /maps/{mapId} ve PATCH yanıtlarındaki
    warnings, yazma yanıtıyla aynı kodları ve adları taşıyor; eskiden okuma
    yanıtı her çizilmeyen satırı unmatched_rows diye bildiriyordu. Yeni uyarı
    kodu: scheme_hidden_by_colors.
  • 2026-09-21 — harita verisinde sessiz kalan durumlar artık bildiriliyor.
    PUT /maps/{mapId}/data yanıtına dört yeni uyarı kodu eklendi:
    unreadable_values, ambiguous_number_cells, comma_decimal_cells ve
    mixed_id_types. Aynı ad ve dönem iki kez geldiğinde, zamansız haritada da
    aynı bölge iki kez geldiğinde, duplicate_rows artık bildiriliyor.
    Davranış değişikliği: sayı olmayan bir değer (abc, N/A) eskiden
    sessizce 0 sayılıp çiziliyordu; artık çizilmiyor ve uyarıyla bildiriliyor.
    Boş değer eskisi gibi 0 sayılıyor.
  • 2026-09-21 — belge düzeltmesi: harita verisinde zamanı eksik satır
    reddedilmez.
    PUT /maps/{mapId}/data açıklaması ve bu sayfa "kısmi zaman
    reddedilir" diyordu; doğru değildi. Zamanlı bir yazımda at taşımayan ya da
    hassasiyeti farklı olan satır kaydedilir, çizilmez ve undeclared_period_rows
    uyarısıyla adıyla sayılır. Davranış değişmedi; yalnız anlatımı düzeltildi.
  • 2026-09-21 — harita ayarları keşfedilebilir oldu (GET /map-options) ve
    config.dataSource API'ye kapatıldı.
    Harita ayarlarının tamamı artık adı,
    türü, açıklaması ve geçerli değerleriyle listeleniyor — renk şeması ve
    basamak sayısı dahil. dataSource bir köken iddiası olduğu ve haritanın
    künyesine basıldığı için API ile yazılamaz hâle geldi; kaynak belirtmek için
    meta.source kullanılır. ⚠ Bu ikincisi kısıtlayıcı bir değişikliktir (önizleme
    kapsamında).
  • 2026-09-21 — haritalar yazılabilir oldu (üç yeni uç).
    POST /projects/{projectId}/maps · PATCH /maps/{mapId} ·
    PUT /maps/{mapId}/data. Veri ucu bölge adlarını coğrafyaya çözer ve
    eşleşmeyenleri warnings alanında adıyla sayar. Ekleme yapıldı; var olan
    hiçbir uç değişmedi.
  • 2026-09-21 — haritalar okunabilir oldu (beş yeni uç).
    GET /projects/{projectId}/maps · GET /maps/{mapId} · GET /geographies ·
    GET /geographies/{geographyId}/scope-parents · GET /region-presets.
    Harita oluşturma ve düzenleme henüz yok. Ekleme yapıldı; var olan hiçbir uç
    değişmedi.
  • 2026-09-20 — yayın bilgisi grafik yanıtına eklendi (published, stale).
    Bir grafiği API ile güncellediğinde yayındaki sürüm geride kalır; yanıt artık
    bunu söylüyor. Yayına gitmek insan onayıyla olur: API ile yeniden
    yayınlanamaz, kullanıcı Tuvelia'da "Yeniden yayınla" demelidir. Ekleme
    yapıldı.
  • 2026-09-20 — ayar açıklamaları. GET /chart-options artık her ayarın ne
    işe yaradığını da yazıyor; ayrıca temporal ve legend gibi her tipte
    geçerli ayar blokları alan alan listeleniyor (önce yalnız blok adı
    görünüyordu). Ekleme yapıldı.
  • 2026-09-20 — yeni uç: GET /chart-options. Ayarların adları yanıtlarda
    zaten görünüyordu ama seçenekli alanlarda hangi değerlerin geçerli olduğunu
    öğrenmenin yolu denemekti; artık listeleniyor. Ekleme yapıldı.
  • 2026-09-20 — yeni uyarı kodu: nothing_drawn. Eşlemesi olmayan yarış,
    dağılım, süre çizelgesi ve ağaç haritası boş çiziliyordu ve yanıt bunu
    söylemiyordu; artık warnings sebebini ve çözümünü bildiriyor. Ekleme
    yapıldı, var olan bir kodun anlamı değişmedi.
  • 2026-09-20 — yeni uç: GET /chart-templates. createChartin template
    alanı ilk günden beri vardı ama geçerli kimlikleri öğrenmenin yolu yoktu; artık
    listelenebiliyor. Ekleme yapıldı, var olan hiçbir uç değişmedi.
  • 2026-09-20 — yeni uyarı kodu: comma_decimal_cells. Virgüllü ondalık
    taşıyan hücreler sıfır çiziliyordu ve yanıt bunu söylemiyordu; warnings
    artık bildiriyor. Ekleme yapıldı, var olan bir kodun anlamı değişmedi.
  • 2026-09-20 — ondalık ayırıcı netleşti. Örnekteki virgüllü sayı noktalıyla
    değiştirildi ve kural açıkça yazıldı: veri alanında ondalık ayırıcı noktadır.
    Davranış değişmedi; belge yanlış yönlendiriyordu (ajan denemesinde görüldü).
  • 2026-09-20 — önizleme başladı. API'nin ilk yayını.